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