私はCADのようなアプリケーション(Qtベース)を作成しています。複数のドキュメントインターフェイスになり、各ドキュメントには約5つのビューポート(QGLWidgetから派生したもの)が含まれます。そのため、フラットシェイダーをアプリケーション全体で共有する必要があります。次に、3D資産(VBOとして保存されたモデル)を各ドキュメント、つまり5つのビューポートで共有する必要があります。OpenGLリソースを共有するための戦略
シェイダープログラムとVBO GLuintのアドレスを共有する限り、私はすべて自動的に動作すると思っていました。私は、各ビューポート/コンテキストはそれがグラフィックカード上の自分のアドレス空間を持っているので、誰かが分かっている場合はお知らせください!
アプリケーションの起動時にシェーダをコンパイルしたいのですが、OpenGLを有効な状態にするために有効なQGLWidgetが必要なので、これは困難です。しかし、リソースを共有するためにQGLWidgetsを(コンストラクタを介して)共有する必要があるため、はと表示され、他はインスタンス化されます。しかし、これは、複数のビューをユーザーに一度に表示すると非常に非実用的です。
これはほとんど画期的なものではないので、これは簡単ではありませんが、私は本当に苦労しています。誰かが正しい方向に向かうことができますか?
おかげで、カム
優秀! QGLContextは孤立したdudのビットです。私の場合はQGLWidgetの内部にある表示デバイスが作成された後にのみcreateメソッドを実行できます。そこで、シェーダのコンパイルコンテキストとして_invisible_QGLWidgetを作成し、VBOデータを保持するドキュメントの隠しQGLWidgetのコンストラクタ内のconst QGLWidget * shareWidget argとして渡して、そのウィジェットを可視のビューポートQGLWidgetsに渡します。基本的にQGLWidgetツリー階層を作成します。目に見えないGUIコンポーネントを作成するのは難しいですが、移植する際には多くのタイピングを省くことができます。 – cmannett85
@ cmannett85実際には、*クラスであり、http://blog.qt.digia.com/blog/2011/06/03/threaded-opengl-in-4-8/ – mlvljr