3

iPhone OS の OpenGL オブジェクト モデルに頭を悩ませようとしています。UIView現在、画面上でいくつかの異なるs (ビルド オンs) にレンダリングしてCAEAGLayerいます。私は現在、これらのそれぞれを個別に使用しておりEAGLContext、それぞれにカラーレンダーバッファーとフレームバッファーがあります。

私はそれらで同様のものをレンダリングしています。これらのインスタンス間でテクスチャを共有して、メモリのオーバーヘッドを節約したいと考えています。

私の現在の理解では、同じセットアップ (いくつかのコンテキスト、それぞれに FBO/RBO があります) をEAGLShareGroup使用できますが、最初のコンテキストを使用して後のコンテキストをスポーンする場合は、テクスチャ名 (GLuints) を単純に使用できます。後のものの最初のもの。これは正確ですか?

これが事実である場合、フォローアップの質問は次のとおりだと思います:「共有グループ」にする利点は何ですか? 同じコンテキストを再利用して、複数の FBO/RBO をそのコンテキストに関連付けることはできますか? 「オブジェクト」(テクスチャやその他の名前付きのもの) を共有しているように見えますが、コンテキストによって所有されている「状態」(マトリックス、有効/無効状態) は共有していないようです。

これを考える最良の方法は何ですか?

啓発をありがとう!

4

1 に答える 1

4

その通りです。2 つEAGLContextの が同じ で作成された場合EAGLSharegroup、それらはバッファ オブジェクト、テクスチャ、レンダバッファ、およびフレームバッファの同じビューを共有します。コンテキストが OpenGL ES 2.0 を使用している場合、シェーダーとプログラム オブジェクトも共有します。

同じ共有グループを使用する複数のコンテキストの最大のユース ケースの 1 つは、レンダリング中に別のスレッドから非同期的にリソースをロードする機能です。それはあなたがここでやっていることのようには見えませんし、永続的なコンテキスト状態を持つことがあなたにとって問題であるようには見えませんEAGLContext。それを必要とする可能性のあるオブジェクトはそれを見ることができます。適切なフレーム バッファとカラー レンダ バッファをバインドするだけで、レンダリング先のビューを変更できます。

于 2010-06-03T04:45:34.370 に答える