Использование QGLFramebufferObject и шейдеров без QGLWidget - PullRequest
0 голосов
/ 26 мая 2019

Я хочу создать процессор данных 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...