使用相同的顶点布局绘制多个缓冲区

Draw multiple buffers with the same vertex layout

我有多个对象,每个对象都有自己的索引缓冲区、顶点缓冲区,有些对象具有不同的着色器或纹理,并且所有对象都具有相同的顶点格式(x、y、z、u、v , nx, 纽约州, 新西兰)。我不想将我的对象一起批处理,而是在单独的绘制调用中渲染它们。假设我想渲染 5 个不同的对象(立方体、球体等),我是否必须为每个对象创建一个新的 vao,或者有没有办法告诉 OpenGL 我想渲染 5 个不同的缓冲区一样layout/format?

你不需要告诉OpenGL这个;您只需修改 VAO 并更改缓冲区而不更改顶点格式。

现在同意,如果不向 glVertexAttribPointer 提供顶点格式参数,您将无法做到这一点。所以至少,你必须记住那些参数仍然是什么。

幸运的是,separate attribute format exists (in GL 4.3+), which allows you to change the buffer bindings (which are still stored in a VAO) 。所以你应该只能调用 glBindVertexBufferglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ...) 来改变缓冲区。