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?
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.