glVertexAttribPointer内置顶点属性,如gl_Vertex,gl_Normal

时间:2011-09-22 15:17:58

标签: opengl attributes glsl vertex ati

我必须使用glVertexAttribPointer将顶点属性发送给着色器,将它们视为内置(gl_Vertexgl_Color等)。

glVertexAttribPointer函数需要指定每个内置属性的索引(或位置)。我可以在NVidia实现上做到这一点,因为每个属性的位置都是固定的(请参阅“自定义属性”部分的http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php),但是我不确定ATI实现中的位置。

此外,当尝试获取以“gl _”开头的任何属性的位置时,函数glGetAttribLocation将返回-1。

我想我错过了一些东西,这是一个微不足道的问题,但是我没有为ATI找到正确的解决方案。

1 个答案:

答案 0 :(得分:7)

内置属性数组未使用glVertexAttribPointer设置,但使用glVertexPointer, glColorPointer, ...等函数。您可以使用GL_VERTEX_ARRAYGL_COLOR_ARRAY,...代替glEnableVertexAttribArray等常量调用glEnableClientState来启用这些功能。

虽然nVidia glVertexAttribPointer可能有效,但由于它们具有内置属性的自定义属性索引的别名,这不符合标准,我相信你不能指望任何其他硬件供应商。因此,请确保将glVertexAttribPointer用于bultin属性的自定义属性和glVertexPointer/glNormalPointer/...函数,以及匹配的启用/禁用函数。

请记住,无论如何都不推荐使用内置属性以及上述功能。因此,如果您想编写现代OpenGL代码,您应该定义自己的属性。但也许你必须支持传统着色器或者不关心前向兼容性。