2017-08-08 97 views
0

我使用了QWidget到QOpenGLWidget轉換一些代碼,我想使用雙緩衝來渲染插件,到目前爲止:Qt的雙緩衝行爲

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

您正在嘗試設置已創建的上下文的格式。我不認爲這會[工作](http://doc.qt.io/qt-5/qopenglcontext.html#setFormat)。假設'clsElevStrip'繼承自'QOpenGLWidget',請嘗試在'clsElevStrip'構造函數中調用['QOpenGLWidget:; setFormat'](http://doc.qt.io/qt-5/qopenglwidget.html#setFormat)。 –

+0

這是從在線示例中複製的,如果它不可能,那麼setFormat方法有什麼意義? QOpenGLWidget :: setFormat不允許提供上下文,所以如何工作? – SPlatten

+0

http://doc.qt.io/qt-5/qopenglcontext.html#setFormat – SPlatten

回答

0

解決:

我修改了代碼,添加

mpobjContext->create(); 

後:

mpobjContext->setFormat(mobjFormat); 

現在,它的作品!