のテクスチャ アタッチメントで使用されているターゲットに関する情報を収集してFBO
、別の にコピーする必要がありますFBO
。
に関する限り、 andのみをサポートしているため、 andOpenGL ES 2.0
を使用できます。返された情報は、使用されたテクスチャ ターゲットを決定するのに十分です (それがキューブ マップ フェースでない場合は、それ以外のものではないため、 です)。 .glGetFramebufferAttachmentParameter[if]v()
OpenGL ES 2.0
GL_TEXTURE_2D
GL_TEXTURE_CUBE_MAP
GL_TEXTURE_2D
ただし、デスクトップでは状況が変わります。
、、、、、および 6 つのキューブ マップ面がテクスチャ アタッチメントの有効なターゲットとしてあり、6GL_TEXTURE_1D
つのキューブ マップ面とターゲットは簡単に判別できるためです (キューブ マップ面とレイヤード テクスチャには特定のクエリがあるため)。 、少なくともマニュアルページに関する限り、残りのターゲットには同じことが当てはまりません: 、、、および。したがって、これら 4 つのターゲットのどれがテクスチャ アタッチメントで使用されたかをどのように判断できますか?GL_TEXTURE_2D
GL_TEXTURE_2D_MULTISAMPLE
GL_TEXTURE_RECTANGLE
GL_TEXTURE_3D
FBO's
GL_TEXTURE_3D
GL_TEXTURE_1D
GL_TEXTURE_2D
GL_TEXTURE_2D_MULTISAMPLE
GL_TEXTURE_RECTANGLE
コピーする必要があるのは、コンテキスト間で共有されていないFBO
という事実、実装によってメイン スレッドで画面が作成されること、およびレンダリング ループでメイン スレッドを失速させないように、各画面専用の子スレッドでそれらを使用することです。したがって、UI イベントに対するアプリケーションの応答性を維持します。この場合、キャッシュ状態は望ましくなく実行不可能です。クライアント ライブラリ (アプリケーションとサーバー間の通信 API として機能することのみが懸念事項) が状態自体をキャッシュするのにはるかに適した位置にある場合、それ以外の場合はアプリケーションの明確な懸念事項をカットするため、望ましくなく、この場合は実行不可能です。前述のように、アプリケーションの懸念事項の一部を制御することさえできません。FBOs
FBOs
OpenGL
私が取り組んでいる実装は OpenGL ES 2.0 のみをサポートしているため、現時点ではこれは理論的な問題ですが、動作するコードよりも、FBO アタッチメントとして使用される正確なテクスチャ ターゲットについて確実な将来性のあるコードを書きたいと考えています。利用可能なオプションの数が、選択されていないオプションを除外することでどのオプションが選択されたかを把握できるように制限されているため、上記で示したように、機能豊富なデスクトップ バージョンでは機能せず、将来の OpenGL ES バージョンでは動作しません。