2011-07-10 13 views
4

描画呼び出しの回数が減り、描画速度が遅いと聞きました。 描画呼び出しの回数を最小限に抑えるため、できるだけ多くの頂点データをできるだけ多くのパックにパックすることを暗示しています。レンダリングの最適化

私は、すべての頂点データを少数の配列にパックし、いくつかの描画呼び出しでシーン全体を描画するために、OpenGLの上にレンダリングフレームワークを作成することを考えていました。

私の質問は、実際には、(glDrawElementsのように)1回の呼び出しで描画のALOTを実行すると終了するのでしょうか?

私はまた、1回の呼び出しで大きすぎる頂点配列を描画しようとすると、キャッシュがオーバーフローし、実際には高速化しないと聞いています。

+0

私は現在、KRIエンジン用に同様のパイプラインを実装しています。あなた自身の質問に明確な答えをしたいと思います。 – kvark

答えて

4

この記事はあなたに大いに役立つだろう。http://www.nvidia.de/docs/IO/8230/BatchBatchBatch.pdf

IMHO、あなたは状態の変化のために最適化する方がよいでしょう。私。シェーダやテクスチャなどを切り替える必要がある時間を最小限に抑えます。これらは、「本当の」高価な操作です。

ただし、ご質問にはお答えできません。大きな頂点バッファから頂点の量をレンダリングすることは、私の経験上、複数の小さな頂点バッファからレンダリングするよりも常に速いです。

「キャッシュが溢れている」ことはわかりません。私が知る限り、頂点フェッチユニットはGPUメモリから直接頂点をフェッチします(よく頂点キャッシュがありますが、16頂点のオーダーにしか格納しません)。あなたが持つことができる唯一のオーバーフローは、あなたがより大きな問題を抱えている時点でVRAMを使い果たしていることです。

大きな頂点バッファでの唯一の他の問題は、ドライバがメモリ内を動かす際に問題を抱えることです。頂点バッファが静的である場合、これは問題ではありませんが、データを「オンザフライ」で変更するとパフォーマンスが低下することがあります。

+0

ありがとうございます。あなたがリンクしている素晴らしい記事です – Prime