4

描画呼び出しが少ない=高速であると聞いています。暗黙のレッスンは、描画呼び出しの数を最小限に抑えるために、できるだけ多くの頂点データをできるだけ少ない配列にパックすることです。

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

私の質問は、1回の呼び出しで(たとえばglDrawElementsに対して)大量の描画を行うと、これが実際に速くなるかどうかです。

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

4

1 に答える 1

4

この記事は非常に役立ちます:http ://www.nvidia.de/docs/IO/8230/BatchBatchBatch.pdf

私見、あなたは状態の変化を最適化する方が良いです。つまり、シェーダーやテクスチャなどを切り替える必要がある回数を最小限に抑えます。これらは「実際の」コストのかかる操作です。

しかしあなたの質問に関して。大きな頂点バッファから大量の頂点をレンダリングすることは、(私の経験では)複数の小さな頂点バッファからレンダリングするよりも常に高速です。

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

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

于 2011-07-23T23:22:26.653 に答える