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

Pau*_*get 7 opengl attributes glsl ati vertex

我要送顶点使用glVertexAttribPointer属性来着色期待他们作为内置(gl_Vertex,gl_Color,等).

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

此外,glGetAttribLocation当尝试获取以"gl_"开头的任何属性的位置时,该函数将返回-1.

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

Chr*_*ica 7

内建的属性数组不设定glVertexAttribPointer,而是用类似的功能glVertexPointer,glColorPointer....并通过调用启用这些glEnableClientState与像常量GL_VERTEX_ARRAY,GL_COLOR_ARRAY......,而不是glEnableVertexAttribArray.

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

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

  • @Pau bultin属性无论如何都被弃用,所以如果你使用这些属性,你已经使用了不推荐使用的功能.如果答案有帮助,接受将不胜感激. (4认同)