我正在将一些代码从使用QWidget转换为QOpenGLWidget,到目前为止,我想使用双重缓冲来呈现该窗口小部件:

    void clsElevStrip::initializeGL() {
        qDebug() << "clsElevStrip::initializeGL()";
        initializeOpenGLFunctions();
    //Get the openGL context
        mpobjContext = context();

        if ( mpobjContext != NULL ) {
    //Setup surface
            mobjFormat.setDepthBufferSize(24);
            mobjFormat.setSamples(4);
            mobjFormat.setVersion(3, 0);
            mobjFormat.setProfile(QSurfaceFormat::NoProfile);
            mobjFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
            int intSB = (int)mobjFormat.swapBehavior();
            qDebug() << "swapBehavour as set-up in format: " << QString::number(intSB);
            mpobjContext->setFormat(mobjFormat);
            intSB = (int)mpobjContext->format().swapBehavior();
            qDebug() << "swapBehavour as set-up in context: " << QString::number(intSB);
        }
    }


当从格式检查交换行为时,我可以在调试器中看到intSB为2,但是当我检查上下文中设置的intSB时,它是0,而不是2?

结果,我渲染到上下文的任何内容都是可见的。

最佳答案

解决:

我修改了代码,添加了

    mpobjContext->create();


后:

    mpobjContext->setFormat(mobjFormat);


现在可以了!

09-06 16:05