2

最近、複数のコンテキストで頂点配列オブジェクトとフレーム バッファ オブジェクトを共有する際の問題を回避する方法について質問したところ、複数のコンテキストを使用すると解決策よりも頭痛の種が増えるだけだと確信しました。

私は Qt を使用していますが、現在、私の設定では、リソースを共有するために目に見える QGLWidget のコンストラクターで使用する非表示の QGLWidget が 1 つあります。これは、コンテキスト間で特定のものを共有できないことを受け入れてうまく機能します。

単一のコンテキストを使用してすべての異なるウィジェットをレンダリングできるソリューションを見つけたいと思います。この質問は、共有したい QGLContext を渡す QGLWidget コンストラクターの使用を指していますが、これは使用していないようです1 つの共通コンテキストを使用する代わりに、1 つの QGLWidget で使用されるコンテキストを設定します。2 番目のウィジェットでそれを使用しようとすると、QGLContext がそれを渡すウィジェットを参照する必要があることを通知する qWarning が呼び出されます。

私のアプリケーションの目標は、異なるシーンをレンダリングしながら同じコンテキストを共有する 2 つの別個の GUI を持つことです。現在、シーンを編集してゲーム エンジンで使用するファイルに保存する「ワールド」エディタと、UDK のマテリアル エディタに似たマテリアルをグラフィカルに編集できる「マテリアル」エディタもあります。 OpenGLを利用したプレビューウィンドウです。

理想的には、エディターの各部分に個別のプログラムを用意するのではなく、タブでナビゲートできる 1 つの統合ゲーム エディターを使用するという現在の設計を維持したいと考えています。

まともな解決策のように見えた唯一のことは、 QGraphicsView を使用して QGLWidget をビューポートとして設定することでしたが、これはまったく機能していないようです。基本的なプリミティブをレンダリングできますが、それ以上のものをレンダリングするとバラバラになります。

複数の OpenGL ウィジェットの問題を扱った経験のある方はいらっしゃいますか?

4

1 に答える 1

1

なぜそんなに問題があるのか​​よくわかりません。CADのようなアプリを作成しているので、次のようないくつかのコンテキストを共有します。

  • メインウィンドウクラスのメンバーとしてアプリケーション全体の非表示を使用しますQGLWidget。これは、にロードされるコンテキストシェーダーです。
  • ドキュメントウィンドウごとに、ウィンドウクラスには非表示のQGLWidgetメンバーがあります。これは、コンテキストジオメトリが読み込まれます。シェーダーコンテキストは、その「共有」ウィジェットとして使用され、ドキュメントがアプリケーション全体のシェーダーにアクセスできるようにします。
  • 各ドキュメントウィンドウの5つのビューポートのそれぞれが表示されますQGLWidget。これは、実際のレンダリングが行われる場所です。ドキュメントウィンドウのジオメトリQGLWidgetは「共有」ウィジェットとして使用されるため、ビューポートはドキュメント全体のジオメトリデータとアプリケーション全体のシェーダーにアクセスできます。

共有ウィジェットパラメータを使用すると、コンテキストの「継承」ツリーを作成できます。すべてのコンテキストは、それ自体とすべての祖先データにアクセスできます(ただし、子や兄弟ではありません)。

于 2012-11-09T08:10:25.670 に答える