2009-09-04 16 views
12

レンダリングには、現在のGLコンテキストがウィンドウに関連付けられています。アプリケーションが複数のシーンをレンダリングする場合(例えば、蓄積または異なるビューポートを使用する場合)、私は同じコンテキストを再利用することができます。複数のOpenGLコンテキストを使用する理由

私の質問は、複数のGLコンテキストを使用する理由は何ですか?私は、ARB_framebuffer_object拡張仕様で、MakeCurrentへの呼び出しが高価である可能性があります。また、ARB_framebuffer_object拡張が存在する場合は、MakeCurrentを使用せずに汎用バッファでレンダリングすることができます。

複数のGLコンテキストを使用する唯一の理由は、コンテキスト状態(ピクセルストア、転送、ポイントサイズ、ポリゴンスティプル...)を設定したり、複数のレンダリングバッファ設定を使用したりすることを避けることですなし)。コンテキスト状態を設定するのではなく、代わりのコンテキストを使用する方が良いときは、どうすればよいでしょうか?

答えて

11

私は通常、複数のGUIウィンドウへのレンダリングなど、絶対に必要な場合にのみ、追加のコンテキストを使用する傾向があります。それ以外は、フレームバッファオブジェクトや状態変更を使用します。

ただし、このようなパフォーマンスの推奨事項は、すべての場合に適用されるわけではありません。不確かな場合は、自分のハードウェア上で独自のアプリケーションを測定する必要があります。 gDEBuggerが役立つかもしれませんが、試用版があります。

2

GUIプログラムでは、複数のOpenGLビューを持つことができます。これらのビューの一部は、GUIと同じスレッドで実行され、他は独自のスレッドで実行されます。さらに、オフスクリーンモードでopenglを実行することもできます。スレッドごとに少なくとも1つのコンテキスト。

スレッドごとにより多くのコンテキストを持つことが理にかなっているかどうかは不明です。

4

複数のGPUに対処する場合は、GPU固有のコンテキストを使用して、1つのGPUあたり少なくとも1つの描画可能なオブジェクトが必要なため、複数のコンテキストを使用する必要があります。

6

IIRCでは、テクスチャやバッファオブジェクトなどのオブジェクトをコンテキスト間で共有できるため、技術的に2番目のスレッドで2番目のコンテキストを作成し、最初のスレッドがレンダリングを実行しているかどうかにかかわらず、テクスチャを非同期に読み込むことができます。

関連する問題