私は、QGLWidgetを使用しているかなり大きいアプリケーションのQt 4.8からQt 5.5への移行に取り組んでいます。QGLWidgetでのOpenGLコンテキストとスレッドエラー
私のエラーは「別のスレッドで現在のQOpenGLContextを作成できません」です。
私がこのエラーについて理解したことは、エラーが言うように、OpenGLコンテキストは1つのスレッドにしかバインドできず、このスレッドだけがコンテキストを使用できます。これは、その「makeCurrent」への同時呼び出しを回避するために、いくつかのスレッドのロックで、Qtの4.8で働いていた
myQGLWidget->makeCurrent();
.. some openGL
myQGLWidget->doneCurrent();
:
古いコードは次のようでした。私はまだ同じエラーを取得し
myQGLWidget->context()->moveToThread(QThread::currentThread());
myQGLWidget->context()->makeCurrent();
... openGL again
myQGLWidget->context()->doneCurrent();
...
私はそれがになっています方法については少し困惑している:
被写体に何私ができるすべてを読んだ後、私の最後の試みをして仕事、誰かが私を助けることができますか?
よろしく、
申し訳ありませんが、私はまだ失われています。私はmakeCurrentフォームを別のスレッドで呼び出さないようにしても構いません。 [this Qt doc](http://doc.qt.io/qt-5/qglwidget.html)のセクション・スレッディングは、 'moveToThread'を使用しなければならないことを伝えています。これは動作しません(' thread ) '' moveToThread'の前後に同じ結果を与えます)。私の場合は、データを読み込むスレッドがあり、これもいくつかのOpenGL呼び出し(glGenBuffers)を行います。だから1つのウィジェット、1つのコンテキスト、2つのスレッド(申し訳ありませんが、私はこれを前に説明したかもしれません)。 – Krag
申し訳ありませんが、コードの特定の行を誤って読みました: 'myQGLWidget-> context() - > moveToThread(QThread :: currentThread());'が間違っています。あなたはそれをすることはできません。コンテキストを新しいスレッドにプッシュするだけで、新しいスレッドからプルすることはできません。 – peppe
ああ...ありがとう!それからあなたのQtパッチソリューションを使用します。 – Krag