我正在将一些代码从使用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?
由于这一点,我呈现给上下文的任何东西都是可见的。
答案 0 :(得分:2)
解决:
我修改了代码,添加了
mpobjContext->create();
后:
mpobjContext->setFormat(mobjFormat);
现在有效!