0
GLuint index = 0;
glBindAttribLocation(mprogram, index, name);

例如,'0' 索引是 gl_position,但其他索引如 1 和 2 呢?

@Nicolas问题是,当我将索引设置为零时,我注意到对 glVertexAttrib(index...) 的调用会修改顶点位置而不是我分配给它的属性...

4

1 回答 1

0

首先,gl_Position是顶点着色器的输出位置,而不是输入。它不是顶点属性,而且从来都不是。你大概在想gl_Vertex

gl_Vertex其次,最重要的是,像,等内置属性gl_Color没有通用属性索引。gl_Vertex与通用属性 0 不同。OpenGL 规范明确禁止这两者相同。通用属性(具有属性索引的事物)和内置属性不会相互“别名”。它们不共享相同的资源或空间。

现在,NVIDIA 的 OpenGL 实现允许混叠,这违反了 OpenGL 规范。但是这样的代码是不可移植的(而且很糟糕)。如果您想确切了解 NVIDIA 是如何进行映射的,我相信 NVIDIA 网站上的文档会在某处说明这一点。

于 2012-04-27T18:34:05.643 回答