opengl glEnableClientState与着色器的属性位置

6l7fqoea  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(121)

我可以使用以下函数将VBO数据与着色器的属性连接起来:

GLint attribVertexPosition = glGetAttribLocation(progId, "vertexPosition");
glEnableVertexAttribArray(attribVertexPosition);
glVertexAttribPointer(attribVertexPosition, 3, GL_FLOAT, false, 0, 0);

我分析了一个传统的OpenGL代码,其中VBO与以下函数一起使用:

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, 0);

遗留代码如何在VBO数据和着色器属性之间建立连接:

attribute vec3 vertexPosition;

wd2eg0qa

wd2eg0qa1#

对于这些固定函数来说,缓冲区和顶点属性之间的绑定是固定的,你不需要告诉glVertexArray它提供哪个属性;它 * 总是 * 提供着色器中为您定义的属性gl_Vertex。它不能提供任何用户定义的属性。
用户定义属性是一组独立于固定函数属性的属性。
请注意,NVIDIA硬件违反了这个规则。它是aliases certain attribute locations with certain built-in vertex arrays,允许用户定义的属性从固定函数数组接收数据。也许你正在寻找的代码依赖于这种非标准的行为,只有在NVIDIA的实现可用。

相关问题