我正在使用一个js/wasm/c++程序,它在更新OpenGL状态时使用面向对象的编程。对于VBO(顶点缓冲区)和VAOs (顶点数组)有相应的c++类。当我们调用vao.unbind();时,它只是简单地调用glBindVertexArray(0);。我看到,未绑定的VAO并没有解除相应的VBO。VAO的一个VAO仍然是ARRAY_BUFFER_BINDING的目标。
我的问题是:当您取消设置VAO时,自动取消相关的VAO是否是最佳实践?或者我应该编写一个单独的函数来取消VAO的VBO?
在WebGL中,我看到当您解除VAO时,它不会解除VBO的绑定,尽管这个编辑职位是这么说的。
发布于 2020-07-16 11:38:58
不,您不需要解除VBO的绑定。VBO的只在VAO被绑定时添加到VAO的状态中。因此,任何先前绑定的VBO都不会改变您要绑定的VAO的状态。可以通过以下调用更改绑定VAO的状态:
glEnableVertexAttribArrayglDisableVertexAttribArrayglVertexAttribPointerglBindBuffer(GL_ELEMENT_ARRAY_BUFFER)您可以在没有当前绑定的VAO的情况下绑定和取消绑定VBO,甚至可以在VAO之间共享它们。VBO只是一个指向数据容器的指针,可以用于多种用途。
https://computergraphics.stackexchange.com/questions/10029
复制相似问题