2011-01-31 35 views
1

私はこれをたくさん考えていました。glBindTexture()で多少小さなテクスチャを切り替える代わりに、巨大なテクスチャを切り替えると描画が遅くなりますか? glBindTexture()が使用されるたびにGPUがテクスチャデータをより高速のメモリ位置にコピーするというアイデアを私は持っていたので、大きなテクスチャがコピーするのにも時間がかかると考えました。OpenGL:大きなテクスチャサーフェスは、多くの小さなテクスチャサーフェスよりも優れているか悪いですか?

しかし、以前はアニメーションを作成するために小さなテクスチャを使用していましたが、いくつかのgfxカードではひどく遅かったですが、アニメーションフレームを1つのテクスチャに置くと、それでも、私は両方のケースで他のgfxカードでパフォーマンス上の問題はありませんでした。

私はいつも可能な最大のテクスチャの表面サイズを使用する必要がありますか? (もし空のテクスチャ空間を無駄にしていなければ)

答えて

6

テクスチャの切り替えは高価です。通常のボトルネックはキャッシュ圧力ですが、GPUメモリからテクスチャがスワップアウトされることもあります。しかし、問題のテクスチャが常駐している限り、すなわち高速GPUメモリ上に位置する限り、テクスチャ結合をチェインすることはO(1)であり、すなわちテクスチャサイズとは無関係である。だから、常に可能な限り大きなテクスチャを使うべきです。キーワードはテクスチャアトラスで、通常はパフォーマンスを向上させる方法です。

+0

これについていくつかの参考資料を提供できますか?すべてのテクスチャに対して常に同じ時間がかかるとは考えにくいです。 @rookie。 – Rookie

+0

たとえば、CUDAでテクスチャキャッシュの動作について自分自身を文書化しようとすることができます。ドライバは、(必要でない場合)テクスチャ全体をより速いメモリに移動しません。実際に使用/サンプリングされたパーツだけがGPU「テクスチャキャッシュ」にNピクセルサイズの2dブロックで持ち込まれます。 – rotoglup

関連する問題