25

のような APIが間接レンダリングglDrawElementsIndirectglDrawArraysIndirect役立つことを読みました。間接レンダリングは、「頂点属性の数」、「描画するインスタンスの数」、「バッファー オブジェクトからの頂点属性の開始」などのレンダリング パラメーターが、GPU 自体ではなく GPU 自体によってバッファー オブジェクトで提供されるという点で、直接レンダリングとは異なります。ドローコールで CPU によって提供されます。

私は理解した。また、CPU とのやり取りがないため、レンダリングが高速になるという利点も説明されています。しかし、待ってください。実際にレンダー コールを行ったのは CPU ではありませんか? まだレンダリングモード(GL_TRIANGLESなど)を指定していました。また、頂点属性をロードした可能性もあります。

これらの小さな変数を渡す必要がないだけで、間接レンダリングのすべてのパフォーマンスが向上します:「カウント」、「プリミティブカウント」、「最初の頂点属性」、「インスタンスカウント」? これは私にはあまり意味がありません。(状態も変化していません)

4

2 に答える 2

11

ダイレクト レンダリングでは、CPU は、GPU への帯域幅が制限されたバスを介して、独自のメモリからインデックス データを準備してストリーミングすることに専念します。GPU の状態を確認し、それと同期する必要があります。これらの各ステップには時間がかかります。

間接レンダリングを使用すると、CPU は 1 つの短いコマンドを送信するだけで、大量の描画操作を開始します。これにより、バス帯域幅が節約されます。また、GPU はより長い時間スパンで動作するため、CPU が現在行っていることを強制的に停止させる (コンテキストの切り替え) 中断が少なくなります。つまり、物理シミュレーションなどの複雑な数値タスクをより効率的に実行できます。

于 2013-10-23T11:01:58.890 に答える