我目前这样做来设置我的vao:
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
...
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBindVertexArray(0);
Run Code Online (Sandbox Code Playgroud)
我的问题是:我是否需要绑定空缓冲区以防止我的vbo和ibo在我完成vao之后更改或者绑定null vao时它还解除当前缓冲区的绑定?例如,我会做以下事情:
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)
一般来说,你不会有永远取消绑定您的缓冲区明确.保持束缚不应该造成任何伤害.他们不会自发地改变.如果其他代码也使用缓冲区,则需要在操作它们之前绑定它自己的缓冲区.
如果您使用的是现代OpenGL(核心配置文件),那么取消绑定VAO绝对是一种浪费.无论如何,每个顶点设置和绘制操作都必须绑定VAO,因此不需要解除之前的VAO绑定,然后不久就绑定不同的VAO.
但是,让我们暂时假设您仍然希望取消绑定缓冲区,以便对应用程序中可能行为不当的代码更加强大,并且您愿意支付性能损失.
答案是GL_ARRAY_BUFFER和不同的GL_ELEMENT_ARRAY_BUFFER.该GL_ELEMENT_ARRAY_BUFFER绑定是VAO状态的一部分.因此,如果您取消绑定VAO,该缓冲区也将自动解除绑定.
该GL_ARRAY_BUFFER绑定是不是该VAO的一部分.在这种情况下,您必须显式取消绑定缓冲区.
| 归档时间: |
|
| 查看次数: |
2094 次 |
| 最近记录: |