我必须使用 glVertexAttribPointer 将顶点属性发送到期望它们作为内置的着色器(gl_Vertex
, gl_Color
, etc.).
The glVertexAttribPointer
函数需要指定每个内置属性的索引(或位置)。我可以在 NVidia 实现上执行此操作,因为每个属性的位置是固定的(请参阅http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php在“自定义属性”部分),但是我不确定 ATI 实现中的位置。
另外,函数glGetAttribLocation
当尝试获取以“gl_”开头的任何属性的位置时,将返回 -1。
我认为我错过了一些东西,这是一个微不足道的问题,但是我还没有找到 ATI 的正确解决方案。
内置属性数组未设置glVertexAttribPointer
,但具有类似的功能glVertexPointer, glColorPointer, ...。你可以通过调用来启用这些glEnableClientState与常数像GL_VERTEX_ARRAY
, GL_COLOR_ARRAY
, ..., 代替glEnableVertexAttribArray
.
而在 nVidia 上glVertexAttribPointer
可能会起作用,因为它们将自定义属性索引与内置属性混叠,这不符合标准,我确信您不能指望在任何其他硬件供应商上出现这种情况。所以要确保使用glVertexAttribPointer
对于自定义属性和glVertexPointer/glNormalPointer/...
用于布尔属性的函数,以及匹配的启用/禁用函数。
请记住,无论如何,内置属性以及提到的函数都已被弃用。因此,如果您想编写现代 OpenGL 代码,无论如何您都应该定义自己的属性。但也许您必须支持旧版着色器,或者目前不关心向前兼容性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)