OpenGL Vertex Array/Buffer Objects

opengl, vao, vbo

Solution

Answer 1

It depends. If you called `glDeleteBuffers` before, it will be deleted when you delete the VAO. If not, it won't. The VAO holds a reference to the VBO, and so does your application after calling `glGenBuffers`. Both references need to be released before the VBO is deleted.

Answer 2

There's (afaik) no way to query the maximum amount you can allocate. However, according to the reference documentation, `glBufferData` will emit `GL_OUT_OF_MEMORY` if a buffer can not be allocated.

Problem

Question 1 Do vertex buffer objects created under a certain VAO deleted once that VAO is deleted? An example: ``` glGenBuffers(1, &bufferObject); glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, bufferObject); glBufferData(GL_ARRAY_BUFFER, sizeof(someVertices), someVertices, GL_STATIC_DRAW); glEnableVertexAttribArray(positionAttrib); glVertexAttribPointer(positionAttrib, 3, GL_FLOAT, GL_FALSE, 0, NULL); ``` When later calling `glDeleteVertexArrays(1, &VAO);`, will `bufferObject` be deleted as well? The reason I'm asking is that I saw a few examples over the web that didn't delete those buffer objects. Question 2 What is the maximum amount of memory that I can allocate for buffer objects? It must be system dependent of course, but I can't seem find an estimation for it. What happens when video RAM isn't big enough? How would I know?

Original source