シェーダーで実際の名前を使用してユニフォームを設定できるようにしたい
myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f);
何らかの形式の地図で場所をキャッシュする必要がありますか?
std::map<std::string, unsigned int> // or unordered_map
または、OpenGL(デスクトップ上)はとにかくこれをキャッシュするので、パフォーマンスの違いはありませんか?
OpenGL仕様は、パフォーマンスではなく機能を定義します。したがって、特定のOpenGL実装がアクティブなユニフォームのリストをどのように保存するか、またはパフォーマンスglGetUniformLocation
と比較してどれだけ高速になるかを知る方法はありません。std::map
本当に、それはあなた次第です。一貫性のある既知のパフォーマンスが必要な場合は、自分で行ってください。OpenGL実装の気まぐれにチャンスをつかみたい場合は、いつでもクエリを実行してください。個人的には、名前を付けて場所を指定します。そうすれば、最大のパフォーマンスが得られます。