glVertexAttribPointer を使用して、約 8 ミリ秒かかる各フレーム (~242kb) の頂点データをロードします。
VBO を採用することでパフォーマンスが向上しますか?
データ全体をロードする必要があるため、答えは NO だと思います。
パフォーマンスを向上させる唯一の方法は、glBufferData が glVertexAttribPointer よりも速くデータをロードする
場合です。
1 に答える
2
静的な頂点データがある場合、データは GPU でアクセス可能なメモリに保持されるため、VBO には明らかにパフォーマンス上の利点があります。
VBO ドライバーなしで glVertexAttribPointer を使用する場合、フレームごとに頂点データを GPU アクセス可能なメモリにコピーする必要があります。クライアント アレイにコピーが必要な理由は 2 つあります。
- GPU がすべてのメモリにアクセスできるわけではありません。GPU ドライバーがマップしたページのみを表示できます。
- OpenGL は、glDraw* が返された後にクライアント配列メモリを自由に変更できることを約束しますが、GPU レンダリングは返された後に非同期で行われます。
VBO データはドライバーによって割り当てられ、GPU にマップされます。同じ頂点データを保持すると、コピーが回避されます。頂点配列の一部のみを glBufferSubData で更新する場合も、更新を最適化できます。(例: 頂点位置の更新なしでテクスチャ座標のみを更新)
于 2016-10-27T14:57:30.833 に答える