2013-02-06 5 views
7

私はシェーダコード内のglsl uniform locationをキャッシュする価値はありますか?

myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f); 

で自分の実際の名前を経由して制服を設定する機能を持っていると思い、私はマップの何らかの形でキャッシュ位置にあるのですか?

std::map<std::string, unsigned int> // or unordered_map 

または多分OpenGLは(デスクトップ上)とにかくこれをキャッシュするので、私は任意のパフォーマンスの違いを持っ​​ていないでしょうか?

答えて

6

OpenGL仕様では、パフォーマンスではなく機能が定義されています。だから、どの特定のOpenGLの実装でアクティブなユニフォームのリストをどのように格納するか、どれくらいの速さでglGetUniformLocationになるかは、std::mapのパフォーマンスに比べて分かりません。

本当に、それはあなた次第です。一貫性を持たせたい場合は、と知られているのパフォーマンスがあります。 OpenGL実装のばかばかしさに挑戦したい場合は、いつでもそれを照会することができます。個人的には、私は溝の名前を言うと、場所と一緒に行く。そうすれば最大限のパフォーマンスが得られます。

+0

ほとんどの場合、私たちは仮定(ドライバの実装について)に頼ることはできません。私たち自身でこのような単純なキャッシングを行う方がよいでしょう。 – fen

関連する問題