我正在将一些代码从使用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);
现在可以了!