Здравствуйте.
Попробовал использовать FBO и столкнулся со странным поведением. Корректно работают лишь буферы, созданные до создания первичного буфера.
Допустим, создаю FBO, они получают "номера" 1 и 2. Перед привязкой буфера (glBindFramebuffer(...)/bind()), проверяю текущий - получаю 3 (т.е. это "номер" первичного). Рисую что необходимо, отвязываю через glBindFramebuffer(GL_FRAMEBUFFER, 0) (или release() для QOpenGLFramebufferObject), текущим снова становится 3. Проблем нет.
Снова создаю FBO, они получают "номера" 4 и 5, и вот эти буферы при попытке связывания дают ошибку 1282 (GL_INVALID_OPERATION), и уже ничего нормально не отрисовывается.
Если удалить 1 и 2 буферы и создать вновь, получив те же номера, привязка у них будет также нарушена.
Все буферы создаются корректно, glCheckFramebufferStatus возвращает GL_FRAMEBUFFER_COMPLETE.
Пробовал использовать и класс QOpenGLFramebufferObject, и создавать все нативными командами OpenGL - результат идентичный.
Для отображения используется потомок QOpenGLWidget.
Каковы могут быть причины подобного поведения?
Решение: It is important that you have a current OpenGL context set when creating the QOpenGLFramebufferObject, otherwise the initialization will fail
Перед созданием FBO предварительно нужно выставить контекст (makeCurrent()). Загвоздка в том, что при не выставленном контексте, QOpenGLFramebufferObject::isValid() все равно возвращает true, что вводило меня в заблуждение, так как я считал буфер валидным.