Я хочу создать процессор данных OGL, используя шейдеры QGLFunctions и кадровые буферы. Мне не нужны виджеты. Но для создания действительных экземпляров Shader и framebuffer мне нужен действительный QGLContext с поддержкой соответствующих glExtensions.
С нулевым контекстом, конечно, ничего не работает. С нулевым контекстом QPaintDevice тоже. С Qpixmap в качестве устройства он создает действительный контекст, но ему не хватает glExtensions для шейдеров и кадрового буфера.
#include <QGLFramebufferObject>
#include <QGLShaderProgram>
#include <QtOpenGL/QGLFunctions>
// ...
void GLProcessor::init()
{
auto format = QGLFormat::defaultFormat();
if (!context()){
m_context = new QGLContext(format, new QPixmap(1, 1));
bool ok = m_context->create();
qDebug() << "CREATING CONTEXT "<< ok;
Q_ASSERT(context()->isValid());
}
context()->makeCurrent();
initializeGLFunctions(context());
m_binFBO = new QGLFramebufferObject(lowsize ,lowsize ,QGLFramebufferObject::NoAttachment, GL_TEXTURE_2D, GL_RED);
m_outFBO = new QGLFramebufferObject(lowsize ,1 ,QGLFramebufferObject::NoAttachment, GL_TEXTURE_2D, GL_RED);
setupShaders();
// ...
}
Конечно, есть возможность сделать как всегда, получить контекст из QGLWidget и скрыть его. Но как-то не элегантно. PS CUDA, OpenCL, AMP и так далее мне не нужны. Для моих задач нужен OpenGL.
Как использовать шейдеры и кадровые буферы в qt4 без создания QGLWidget?