Qt双缓冲行为

时间:2017-08-08 10:53:38

标签: c++ qt opengl

我正在将一些代码从使用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?

由于这一点,我呈现给上下文的任何东西都是可见的。

1 个答案:

答案 0 :(得分:2)

解决:

我修改了代码,添加了

    mpobjContext->create();

后:

    mpobjContext->setFormat(mobjFormat);

现在有效!