0

私の質問はこれに近いものです。ATI グラフィックス カードの GLSL シェーダの頂点均一コンポーネントの実際の数は?

彼の場合、

  • 彼の GL_MAX_VERTEX_UNIFORM_COMPONENTS は 4096 でした
  • 彼は mat4[] 配列を使用していました
  • 64 mat4 未満ではシェーダーは問題なく、それ以上では問題ありません

amd カードの wikiに書かれているように、正しい値を得るには、4 で割る必要があります。

mat4 は 16 フロートなので、16 で割ると、1024/16 = 64 mat4 になります。

したがって、制限は彼の使用と一貫しています。


しかし、それは私のものではありません。ここに私が持っているものがあります:

  • GL_MAX_VERTEX_UNIFORM_COMPONENTS: 16384
  • vec3 の配列

ベクトルを使用して立方体のインスタンスを変換しているため、ベクトルの数は glDrawArraysInstanced() に渡されるインスタンスの数と同じです。コードは本当に単純ですgl_Position = vp * translateVec[gl_InstaceID] * pos(vp は一意の ViewProjection マトリックスです)。ベクトルが 256 未満の場合、立方体は正しく変換されます。256 個のベクトルを超えると、最初の 256 個の立方体は問題ありませんが、他のすべての立方体は問題ありません。それらは (0, 0, 0) ポイントにあり、ベクトルが (0, 0, 0) のように見えます。

私は amd 6490m を持っているので、彼と同じように、4 ステップで除算する必要があります 16384/4 = 4096 フロート

ウィキによると、ベクター アーキテクチャのため、「各ユニフォームは 4 つのコンポーネントを使用すると想定する必要があります」。これは、vec3 が 3 つではなく 4 つのコンポーネントを使用することを意味します。

したがって、4096/4 = 1024 vec3

ご覧のとおり、それは私の観察と一貫性がありません。

私は何が欠けていますか? また、GL_MAX_UNIFORM_VECTORS (私にとっては 4096) はどうですか?

: vec3 配列をアップロードし、配列はCore プロファイル 4.2、 win7、13.1 CatalystglUniform3fv()で宣言されています。uniform vec3[255]

4

0 に答える 0