8

標準のレンダリングからテクスチャへの設定を使用するクロスプラットフォーム コード ベース (iOS および Android) があります。各フレーム (初期化後) で、次のシーケンスが発生します。

  1. テクスチャ カラーがアタッチされたフレーム バッファの glBindFramebuffer
  2. いくつかのものをレンダリングする
  3. *
  4. デフォルトのフレームバッファの glBindFramebuffer (Android では 0、iOS では通常 2)
  5. 最初のフレームバッファに色付けされていたテクスチャの glBindTexture
  6. バインドされたテクスチャを使用してレンダリングする

iOS および一部の Android デバイス (エミュレーターを含む) では、これは正常に機能し、期待どおりに機能します。他のデバイス (現在 4.0.4 を実行している Samsung Galaxy Note の前に座っている) では、テクスチャを使用する第 2 フェーズのレンダリングが「ぎくしゃく」しているように見えます。他のアニメーションは、「ジャンピー」ビットと同じ画面で 60 fps で実行され続けます。私の結論は、ターゲット テクスチャへの変更が 2 番目のレンダリング パスで常に表示されるとは限らないということです。

この理論をテストするために、上記の * でマークされたステップに glFinish() を挿入します。現在、すべてのデバイスで、これは正しい動作をしています。興味深いことに、glFlush() は問題を解決しません。しかし、glFinish() は高価であり、これが必要であることを示唆するドキュメントは見たことがありません。

では、私の質問は次のとおりです。テクスチャへのレンダリングが終了したら、最後に描画されたテクスチャが後のレンダリング パスで確実に使用できるようにするにはどうすればよいですか?

4

1 に答える 1

5

あなたが記述したコードは問題ないはずです。

単一のコンテキストを使用し、同期動作を緩和する拡張機能 ( EXT_map_buffer_rangeなど) をオプトインしない限り、すべてのコマンドは、API で指定された順序とまったく同じ順序で実行されたかのように表示される必要があります。 API の使用法では、テクスチャから読み取る前にテクスチャにレンダリングしています。

そのため、これらのデバイスでドライバーのバグに遭遇している可能性があります。問題が発生しているデバイスをリストできますか? おそらく、共通のハードウェアまたはドライバーが見つかるでしょう。

于 2013-03-04T03:43:29.037 に答える