# When unsetting a VAO, should you also unbind the associated VBOs?

I'm working with a js/wasm/c++ program that uses object oriented programming when updating the OpenGL state. There are corresponding c++ classes for VBOs (vertex buffer) and VAOs (vertex array). When we call vao.unbind();, it simply calls glBindVertexArray(0);. I'm seeing that unbinding the VAO does not unbind the corresponding VBOs. One of the VAO's VBOs was still set as ARRAY_BUFFER_BINDING target.

My question is: is it best practice to automatically unset the associated VBOs when you unset the VAO? Or should I write a separate function that unsets the VAO's VBOs?

With WebGL I'm seeing that it does not unbind the VBO when you unset the VAO, despite what this reddit post is saying.

• glEnableVertexAttribArray
• glDisableVertexAttribArray
• glVertexAttribPointer
• glBindBuffer(GL_ELEMENT_ARRAY_BUFFER)