2017-08-08 60 views
0

私はQOpenGLWidgetにQWidgetのを使用してからいくつかのコードを変換しています、私はこれまで、ウィジェットをレンダリングするためにダブルバッファリングを使用したい: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をコンテキストに設定されているかどうかチェックすると、2ではなく0になります。

この結果、コンテキストにレンダリングするものはすべて表示されます。

+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->setFormat(mobjFormat); 

を私がした後

mpobjContext->create(); 

を追加し、コードを修正!

関連する問題