glVertexAttrib函数系列允许向每个顶点添加通用属性.您可以设置与数据关联的索引.但是,您无法任意选择索引,因为我发现使用低于4的索引将破坏标准(Normal/TexCoord)属性,加上0是顶点位置.我怎样才能找到,这将是第一个用于自定义属性的真正免费索引?
我找到了一个列出nvidia硬件预定义索引的网站:
http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php
不幸的是,在NVidia硬件上使用它时存在某些限制.根据NVidia的说法:"GLSL试图消除顶点属性的混叠,但这是NVIDIA硬件方法的组成部分,也是维持与NVIDIA客户所依赖的现有OpenGL应用程序兼容所必需的.因此,NVIDIA的GLSL实现不允许内置顶点属性发生冲突使用glBindAttribLocation分配给特定顶点属性索引的通用顶点属性.例如,不应使用gl_Normal(内置顶点属性)并使用glBindAttribLocation将名为"whatever"的通用顶点属性绑定到顶点属性索引2因为gl_Normal别名为索引2"
换句话说,NVidia硬件索引保留用于内置属性:
gl_Vertex 0
gl_Normal 2
gl_Color 3
gl_SecondaryColor 4
gl_FogCoord 5
gl_MultiTexCoord0 8
gl_MultiTexCoord1 9
gl_MultiTexCoord2 10
gl_MultiTexCoord3 11
gl_MultiTexCoord4 12
gl_MultiTexCoord5 13
gl_MultiTexCoord6 14
gl_MultiTexCoord7 15