GLuint index = 0;
glBindAttribLocation(mprogram, index, name);
たとえば、'0' インデックスは gl_position ですが、1 や 2 などの他のインデックスはどうでしょうか?
@Nicolas問題は、インデックスをゼロに設定すると、 glVertexAttrib(index...) への呼び出しが、割り当てた属性ではなく頂点の位置を変更することに気付いたことです...
GLuint index = 0;
glBindAttribLocation(mprogram, index, name);
たとえば、'0' インデックスは gl_position ですが、1 や 2 などの他のインデックスはどうでしょうか?
@Nicolas問題は、インデックスをゼロに設定すると、 glVertexAttrib(index...) への呼び出しが、割り当てた属性ではなく頂点の位置を変更することに気付いたことです...
まず、入力ではなく、頂点シェーダーからgl_Position
の出力位置です。これは頂点属性ではありません。あなたはおそらく次のことを考えていgl_Vertex
ます。
2 番目に最も重要なことgl_Vertex
は、gl_Color
、 などの組み込み属性には一般的な属性インデックスがありません。gl_Vertex
は汎用属性 0 と同じではありません。OpenGL 仕様では、これら 2 つが同じであることを明示的に禁止しています。汎用属性 (属性インデックスを持つもの) と組み込み属性は、互いに「エイリアス」しません。それらは同じリソースまたはスペースを共有しません。
現在、NVIDIA の OpenGL 実装は、OpenGL 仕様に反する方向でのエイリアシングを許可しています。しかし、そのようなコードは移植性がありません (そしてひどいものです)。NVIDIA がどのようにマッピングを行っているかを正確に知りたい場合は、NVIDIA のサイトのドキュメントでどこかに詳しく説明されているはずです。