在我可以找到的有关VAO(顶点数组对象)的所有教程中,它们都展示了如何通过配置顶点属性和绑定VBO(顶点缓冲区对象)来使用它们。但是我想创建一个VAO,该VAO将与一组固定着色器一起为一组VBO配置,其中每个缓冲区使用相同的数据模式(顶点,uv,颜色等)。因此,我想为将使用一个着色器绘制的多个VBO创建一个VAO。
我在此上找不到任何演示,所以我决定尝试一下。但它不起作用,并在glDrawArray
通话中崩溃。似乎VBO没有绑定。这是我正在使用的代码:
渲染:
/* Prepare vertex attributes */
glBindVertexArrayOES(vao);
/* Upload the buffer to the GPU */
glBindBuffer(GL_ARRAY_BUFFER, pool->next());
glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer());
/* Draw the triangles */
glDrawArrays(GL_TRIANGLES, 0, parts * 6);
glBindVertexArrayOES(0);
VAO创作:
glBindVertexArrayOES(vao);
glEnableVertexAttribArray(ls.position);
glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0);
glEnableVertexAttribArray(ls.color);
glVertexAttribPointer(ls.color, 3, GL_FLOAT, GL_FALSE, buffer.stride(), GL_BUFFER_OFFSET(buffer.dataTypeSize * 2));
glBindVertexArrayOES(0);
其中ls
一个简单的struct
保存属性位置。
在“渲染”部分中,交换glBindBuffer
和glBindVertexArrayOES
周围环境也不起作用。
因此,问题是:是否有可能这样做,还是我必须为每个缓冲区创建一个VAO?如果我必须为每个VBO创建一个VAO,是否可以glBufferSubData
结合使用VAO 来更新VBO的数据?