標準のレンダリングからテクスチャへの設定を使用するクロスプラットフォーム コード ベース (iOS および Android) があります。各フレーム (初期化後) で、次のシーケンスが発生します。
- テクスチャ カラーがアタッチされたフレーム バッファの glBindFramebuffer
- いくつかのものをレンダリングする
- *
- デフォルトのフレームバッファの glBindFramebuffer (Android では 0、iOS では通常 2)
- 最初のフレームバッファに色付けされていたテクスチャの glBindTexture
- バインドされたテクスチャを使用してレンダリングする
iOS および一部の Android デバイス (エミュレーターを含む) では、これは正常に機能し、期待どおりに機能します。他のデバイス (現在 4.0.4 を実行している Samsung Galaxy Note の前に座っている) では、テクスチャを使用する第 2 フェーズのレンダリングが「ぎくしゃく」しているように見えます。他のアニメーションは、「ジャンピー」ビットと同じ画面で 60 fps で実行され続けます。私の結論は、ターゲット テクスチャへの変更が 2 番目のレンダリング パスで常に表示されるとは限らないということです。
この理論をテストするために、上記の * でマークされたステップに glFinish() を挿入します。現在、すべてのデバイスで、これは正しい動作をしています。興味深いことに、glFlush() は問題を解決しません。しかし、glFinish() は高価であり、これが必要であることを示唆するドキュメントは見たことがありません。
では、私の質問は次のとおりです。テクスチャへのレンダリングが終了したら、最後に描画されたテクスチャが後のレンダリング パスで確実に使用できるようにするにはどうすればよいですか?