7

我必须使用 glVertexAttribPointer 将顶点属性发送到期望它们作为内置(,等)的着色gl_Vertexgl_Color

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

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

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

4

1 回答 1

7

内置属性数组不是用 设置的glVertexAttribPointer,而是用glVertexPointer, glColorPointer, ...等函数设置的。您可以通过使用, , ...glEnableClientState等常量调用来启用这些,而不是.GL_VERTEX_ARRAYGL_COLOR_ARRAYglEnableVertexAttribArray

尽管在 nVidia 上glVertexAttribPointer可能会起作用,但由于它们将自定义属性索引与内置属性混为一谈,这不符合标准,我相信您不能期望在任何其他硬件供应商上都能做到这一点。所以要确保glVertexAttribPointer用于自定义属性和glVertexPointer/glNormalPointer/...bultin 属性的功能,以及匹配的启用/禁用功能。

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

于 2011-09-22T16:36:36.293 回答