レンダリングするスプライトがたくさんあるので、この分野でパフォーマンスを向上させた人々からフィードバックを得たいと思っていました。
そこで、シェーダーとテクスチャーで並べ替えます。また、VBO に同じレンダリング設定を持つスプライトのバッチを用意して、レンダリングのためにシェーダーに送信します。すべての通常のもの。私のスプライトはすべて正方形で、中心位置 (P)、方向 (O)、スケール (S)、RGB カラー (Col)、グローバル不透明度 (アルファ) という基本データはすべて同じです。CPU コードの位置と方向を更新する必要があり (ただし、スプライトの約 50% は特定のフレームのペア間で変更されません)、スプライトのスケール、色、不透明度はほとんど変更されませんが、実際には変更されません。
ジオメトリ シェーダーを想定することはできません (サポートしますが、その場合の問題は意味がありません)。
するべきか:
スプライトの位置を更新したら、CPU で頂点の位置を計算します。頂点シェーダーを単純な変換ステップにします。(各フレームを更新するためのデータ量が大幅に少ないという利点がありますが、CPU は多くのトリガーを実行する必要があります)。
POS データを追加データとして VBO に入れ、4 つの頂点に対して複製し、頂点の位置を単純なオフセット (-1,-1; -1,1; 1,1; 1,-1) にして、次のことを行います。シェーダーでのトリガー (GPU がより多くの計算を行うという利点がありますが、各頂点には余分な 5 ワードのデータがあります)。
どちらが優れているかは明らかではないため、両方のアプローチで何が起こるかを確認するためにプロファイリングが必要です。
明らかに私は 3 を行うことができますが、この質問をして、何が高速であるべきかについてのゲシュタルトが不足しているかどうかを確認することは有益だと思いました。いずれにせよ、答えは後で他の真剣なスプライト/パーティクルの実装に役立ちます。