30

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

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

4

1 に答える 1

35

私は制服に投票します。

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

属性に対してユニフォームを好む他の理由は次のとおりです。

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