私の OpenGL iOS アプリケーションでは、コンシューマーがテクスチャを表示する必要があるときにプロデューサーがテクスチャをロードする必要があるプロデューサー/コンシューマー モデルを実装しようとしています。ドキュメントを読むと、これには EAGL 共有グループを使用する必要があり、共有 OpenGL オブジェクトはダブル バッファリングする必要があることがわかります。ただし、どの OpenGL オブジェクトをダブル バッファリングする必要があるかはよくわかりません。テクスチャまたはframbufferする必要がありますか?私のプロデューサーは、新しいフレームを表示する必要があるたびに 3 つのテクスチャをロードするため、フレームバッファを切り替える方が効率的かもしれないと考えていました。
したがって、大まかに言えば、これは私がそれが起こるべきだと考えていたことです:
- openGL の初期化中に、1 つのレンダー バッファーと 2 つのフレーム バッファー (frameBuffers[2]) を作成します。
- プロデューサ スレッドでは、コンシューマ スレッドが frameBuffers[0] を使用している間に、着信フレームを OpenGL テクスチャとして frameBuffers[1] にロードし、フレームバッファ ID をある種の共有キューにプッシュします。
- コンシューマ スレッドで、共有キューから次のフレーム バッファ ID をポップし、それを使用してフレームバッファをバインドします (glBindFramebuffer(GL_FRAMEBUFFER, i))。最後にレンダーバッファをスワップして表示します。
それは理にかなっていますか?これをすべて達成するためのより良い方法はありますか?