Steven Lu
Steven Lu

Reputation: 43427

Do I need to rebuild my VAO if I need to change a VBO?

I'm rendering my scene by constructing or modifying a buffer that I give to glBufferData. My understanding of Vertex Array Objects is that they allow me to skip the manual binding of all of the VBOs I am using. Is this still the case when I update my buffer all the time?

Can I bind my VAO, call glBufferData to update the vertices and indices (the only two VBOs I have at the moment), and then render?

Can I use memory mapping with the VBO's? Then I could bind VAO, modify buffer, then render?

What exactly does the VAO do? Is its function simply that of a shortcut which stores and automates the binding of vertex attributes to my VBO's? Does it take ownership of either the data or the bindings?

Upvotes: 5

Views: 2278

Answers (1)

Robert Rouhani
Robert Rouhani

Reputation: 14678

You would probably have to test this, but from my understanding VBOs are given IDs when generated and a VAO only references each vertex attrib along with the VBO ID it's using. You should be able to call glBufferData or glBufferSubData. I'm not sure if memory mapping just before the draw call would work, but you could certainly do things between binding the VAO and drawing. A VAO doesn't lock the VBOs or restrict access to them.

In general, a VAO just stores attributes and all their settings (bound VBO, stride, offset, etc.) and automatically binds the attributes when bound. Until you call glBindVertexArray(0);, all vertex attributes are tied to the bound VAO.

Upvotes: 2

Related Questions