2011-06-21 6 views
1

複数のフレームバッファオブジェクトを使用する代わりに、1つしか作成せず、必要に応じてターゲットテクスチャを切り替えて同じ結果を得ることができますか?OpenGL:1つのフレームバッファのみを使用してターゲットテクスチャを交換する

  • これはすべての場合に悪い考えですか?はいの場合、なぜですか?

私のプログラムのAPIにはrender.SetTargetTexture()という機能が実装されていましたが、背後で使用されていたフレームバッファがもっとあれば論理的には機能しません。フレームバッファを完全に公開する必要があります。

+1

私はこれを実際にベンチマークしたことはありませんが、異なるFBOをバインドする方が効率的です。 FBOに別のテクスチャをバインドするには、フレームバッファの完全性のための複雑な一貫性チェックが必要です(明示的に、そしてドライバの中に明示的に指定されていない場合)。変更されていない別のフレームバッファをバインドするには、そのようなことは必要ありません。 – Damon

+0

私はそれを見る別の方法は**おそらく重要ではないと思う**。私はフレームごとに何千ものターゲットを切り替えるアプリは知らない。ほとんどのスイッチはわずか数回です。私はfbosの切り替えが添付ファイルを切り替えるよりも速くなければならないと同意しますが、あなたのAPIが問題ではない場合は問題ありません。 – gman

答えて

6

FBO自体は、実装によってメンテナンスされた論理構造であり、パラメータが必要とするわずかなメモリしか消費しません。 FBOの主な目的は、一貫性のある状態を維持するオブジェクトを持つことです。

FBOの構造を変更するときはいつでも、実装は妥当性と完全性をチェックする必要があります。 OpenGL仕様では、この操作の複雑さについては何も言及していませんが、FBOの構造を変更することは、最も時間がかかる操作(おそらく大きなマージン)であると想定することは安全です。

FBO自体は注目すべきメモリを消費しないので、添付ファイルだけが独立したオブジェクトであり、複数のFBOを割り振り、それらをスワップするというメモリが私の推奨するものです。

-1

通常、フレームバッファの切り替えは、人が与えた理由により高速です。私の経験では、異なるテクスチャタイプをfbos(1Dテクスチャが以前に付着した2次元テクスチャに貼り付けたので、後で変更できなかったある種の目標状態をfboにセットした最初のテクスチャを設定する)私が使用した解決策は、各ターゲットタイプに対してfboを持つことでした。このエラーはNVidia Quadroデバイスで発生し、ドライバの問題であるかどうかは不明です。

関連する問題