2012-04-27 19 views
0
GLuint index = 0; 
glBindAttribLocation(mprogram, index, name); 

で使用されるさまざまなインデックスのデフォルト属性どのようなものがあり、「0」インデックスは1と2のような他の指標についてgl_positionですが、何?問題@NicolasGLSL 1.2:glBindAttribLocation例えば

答えて

0
...私はゼロにインデックスを設定すると、私はglVertexAttribへの呼び出し(インデックスが...)の代わりに、私はそれが割り当てられた属性の頂点位置を変更するということに気づいたということです

まず、gl_Positionは、入力ではなく、頂点シェーダからの出力の出力です。これは頂点属性ではなく、決してそれではありません。あなたはおそらくgl_Vertexについて考えているでしょう。

第2に、gl_Vertex,gl_Colorなどの組み込み属性には、汎用属性インデックスがありません。 gl_Vertexではないは一般属性0と同じものです。OpenGL仕様では、これらの2つが同じであることは明示的に禁止されています。一般的な属性(属性索引を持つもの)と組み込み属性は、お互いに「エイリアス」しません。彼らは同じリソースやスペースを共有していません。

これで、NVIDIAのOpenGL実装では、OpenGL仕様の方向違反でエイリアスが発生するようになりました。しかし、そのようなコードは移植性がありません(ひどい)。 NVIDIAのマッピング方法を正確に知りたい場合は、NVIDIAのサイトにあるドキュメントを参考にしてください。

+0

しかし、一般的な属性0は実際には(少なくとも旧式の廃止されていない日では)組み込み頂点の位置にエイリアスがあることが指定されていると思いました。まあ、少なくとも*オレンジブック*はこれを述べて、私はこれまでそれを信じていました。 –

+0

@ChristianRau:これは、互換性の規則の下で、レンダリング時に属性0または 'gl_Vertex'のどちらかを使う必要があると混乱している可能性があります。それらは両方とも 'glBegin/glEnd'の下で頂点を"扇動 "する役目を果たします。そのため、あなたはそれらのいずれかに何かを持たなければならず、同じレンダーコールでは両方を使うことはできません。しかし、それが言うならば、オレンジブックは間違っています。 OpenGL 3.3の互換性の仕様から: "一般的な属性を従来のものにエイリアスすることはできません。" 'gl_Vertex'と属性0の例外はありません。 –

+0

ルックアップしました。 2.1仕様では、(2.7章で)「一般的な頂点属性ゼロを設定すると頂点が指定され、4つの頂点座標は属性0の値から取られます。Vertex2、Vertex3、またはVertex4コマンドは、対応するVertexAttrib他の一般的な頂点属性を設定すると、属性の現在の値が更新されます。頂点属性0の現在の値はありません "*"完全に同等 "*にするには値を送信する必要はありません同じ属性チャネルに? –