web-dev-qa-db-ja.com

GLSLESのユニフォームと属性

CPUからGPUに渡されるいくつかのパラメーターは、すべてのフラグメントに対して一定ですが、フレームごとに変化します(GLSL ES 1.1を使用しています)。そのような値にユニフォームまたは属性を使用する必要がありますか?属性は頂点ごとに異なる可能性があるため、私の直感では、フレーム全体で一定の値に属性を使用すると非効率になります。ただし、ユニフォームは「比較的まれに」変更される値用であると読みました。これは、すべてのフレームでユニフォームを変更するのは非効率的である可能性があることを示唆しています。

ハードウェアに関しては、iPhone4S用に最適化することに最も興味があります。

30
Alex Flint

私は制服に投票します。

理由の1つは、あなたの質問ですでに説明されています。ユニフォームは、各頂点/フラグメントの定数です。

属性よりもユニフォームを好むその他の理由は次のとおりです。

  • 使用可能なスロットの数(16の属性が許可されますが、さらに多くのユニフォームが許可されます)
  • GLSLコンパイラは均一な値の処理を最適化できます
  • 長い頂点配列でのデータストリーミングが少なく、頂点あたりの属性が少ないほど、パフォーマンスが向上します。
  • ユニフォームは、頂点シェーダーとフラグメントシェーダーの間でさまざまな属性を定義することなく、フラグメントシェーダーで使用できます。
  • ユニフォームは構造体と配列にすることができ、より読みやすいコードになります。
35
Luca