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



我必须使用glVertexAttribPointer向着色器发送顶点属性,期望它们是内置的(gl_Vertex, gl_Color等)。

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

同样,当试图获取以"gl_"开头的任何属性的位置时,函数glGetAttribLocation将返回-1。

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

内置属性数组不是用glVertexAttribPointer设置的,而是用glVertexPointerglColorPointer、....等函数设置的你可以通过调用glEnableClientStateGL_VERTEX_ARRAY, GL_COLOR_ARRAY,…,而不是glEnableVertexAttribArray .

而在nVidia glVertexAttribPointer可能工作,由于他们的自定义属性索引与内置属性的混叠,这不是标准的一致性,我相信你不能指望这在任何其他硬件供应商。因此,要确保使用glVertexAttribPointer用于自定义属性,glVertexPointer/glNormalPointer/...函数用于bultin属性,以及匹配的enable/disable函数。

请记住,无论如何都不赞成内置属性,以及提到的函数。如果你想写现代OpenGL代码,你应该定义你自己的属性。但也许你必须支持遗留着色器,或者现在不关心向前兼容性。

相关内容

  • 没有找到相关文章

最新更新