4

頂点シェーダーに各頂点で変化しない値を指定する場合、それを均一または一定の頂点属性として指定するオプションがあります (glVertexAttrib1f とその仲間を使用)。

どちらか一方を選択する必要がある理由は何ですか? 特定の実装で利用可能な頂点属性とユニフォームの数が限られているため、賢明に選択する必要がありますか、それともパフォーマンスへの影響もありますか?

私は周りを見回していくつかの議論を見つけましたが、私の懸念に具体的に答えるものは何もありません:頂点属性 https://gamedev.stackexchange.com/questions/44024/what-is-the-difference-between-constant-vertex-attributes-and-uniforms

私は決して OpenGL の第一人者ではないので、何か基本的なことが抜けていたら申し訳ありません。

4

1 に答える 1

4

頂点属性ポインターを渡すと、頂点属性を頂点ごとに変更するように設定できます。特定の一般的な属性の場所にデータを与える方法を変更するだけで、一定の値と頂点ごとに変化する値とをオンザフライで切り替えることができます。

ユニフォームは頂点ごとに変化することはありません。はるかに一定です。一般に、GLSL ES は、均一なコンポーネント (128 個のベクトル、それぞれ 4 つのコンポーネント) よりもはるかに少ない頂点属性スロット (8 つ、それぞれ最大 4 つのコンポーネント) を使用することを保証します - ほとんどの実装はこれらの要件を超えていますが、傾向は同じです (より多くの均一なコンポーネント)属性より)。

さらに、ユニフォームはプログラムごとの状態です。これらは、GLSL プログラムのどの段階からでもアクセスできる定数です。OpenGL ES 2.0 ではこれは Vertex / Fragment シェーダーを意味しますが、デスクトップ GL では Vertex、Fragment、Geometry、Tessellation Control、Tessellation Evaluation を意味します。

于 2013-10-28T01:59:52.390 に答える