6

CAD のようなアプリ (Qt ベース) を作成しています。これは複数のドキュメント インターフェイスであり、各ドキュメントには約 5 つのビューポート (QGLWidget から派生) が含まれます。そのため、フラット シェーダーをアプリケーション全体で共有し、3D アセット (VBO として保存されたモデル) を各ドキュメント、つまり 5 つのビューポートで共有する必要があります。

シェーダー プログラムと VBO Gluint アドレスを共有している限り、すべてが自動的に機能すると思いましたが、そうではありません。各ビューポート/コンテキストには、グラフィックス カード上に独自のアドレス空間があるためだと思います。詳しい方がいらっしゃいましたら、お知らせください。

アプリケーションの起動時にシェーダーをコンパイルしたいのですが、事前に OpenGL を有効な状態にするために有効な QGLWidget が必要なため、これは困難です。しかし、QGLWidgets を (コンストラクターを介して) 共有してリソースを共有する必要があるため、他のものをインスタンス化する前に、1 つを作成して表示する必要があります。しかし、一度に複数のビューをユーザーに表示する必要があるため、これは非常に非現実的です。

画期的なことではないので、これは私が考えているよりも簡単に違いありませんが、私は本当に苦労しています - 誰かが私を正しい方向に向けることができますか?

ありがとう、カム

4

1 に答える 1

12

通常の CAD/MDI アプリケーションが行っていることは次のとおりです。

  • それらは、リソースを共有するのに役立つ共有コンテキストを作成します。

  • wglShareLists共有コンテキストのリソース ID へのアクセスを提供するために、新しい OpenGL レンダリング コンテキストを作成するときに使用します。

wglShareListsは、表示リストだけでなく、VBO、テクスチャ、シェーダーなどの共有にも使用できます (DL の共有は従来の使用法であるため、関数名になっています)。

共有コンテキストでリソースを作成する必要があるかどうか、または任意のコンテキストでリソースを作成できるかどうかは覚えていません。

Windows を使用していない場合は、 を参照してくださいglXCreateContext。それはあなたを軌道に乗せるはずです。

編集:

Qt を見てきましたが、 member で抽象化されているようQGLContext::createです。

于 2010-12-05T19:45:33.470 に答える