Where in the 3.3 core spec can I find this info. on glVertexAttribPointer?

In the Description section of glVertexAttribPointer in the ref pages, I found this:

When a generic vertex attribute array is specified, size, type, normalized, stride, and pointer are saved as vertex array state, in addition to the current vertex array buffer object binding.

In 3.3 core, I’d conclude from this that after you use glVertexAttribPointer as needed with a “VAO” and a “vertex array buffer object” binded, it’s okay to unbind the current vertex array buffer object (with glBindBuffer(GL_ARRAY_BUFFER,0)), even while the VAO is still binded. It helped me to understand more this comment from the source code in the LearnOpenGL “Hello Triangle” tutorial:

glBindVertexArray(...);
glBindBuffer(GL_ARRAY_BUFFER, ...);
...
glVertexAttribPointer(...);
glEnableVertexAttribArray(...);
...
//note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind
glBindBuffer(GL_ARRAY_BUFFER,0);
...
glBindVertexArray(...);

Where can I find this information in the 3.3 core spec? I want to make a note of it there. I tried looking in “2.9.6 Vertex Arrays in Buffer Objects”, but I can’t find anything similar. The first paragraph talks about glVertexAttribPointer, but more about client state rather than vertex array object state.

[QUOTE=DragonautX;1288609]In 3.3 core, I’d conclude from this that after you use glVertexAttribPointer as needed with a “VAO” and a “vertex array buffer object” binded, it’s okay to unbind the current vertex array buffer object (with glBindBuffer(GL_ARRAY_BUFFER,0)), even while the VAO is still binded.

Where can I find this information in the 3.3 core spec[/QUOTE]

It’s not all-in-one-place. If you read the bits in 2.9.1 and 2.9.6 (quoted below), that pretty well covers it.

So basically, glBindBuffer on GL_ARRAY_BUFFER just modifies the buffer bound to that buffer object bind target. Whereas glVertexAttribPointer() copies the binding from there into VAO state for the specified vertex attribute. So just calling glBindBuffer on GL_ARRAY_BUFFER doesn’t modify VAO state.

However, calling glBindBuffer on GL_ELEMENT_ARRAY_BUFFER does! (Notice above that it is part of VAO state.)

That was really helpful, seeing it pieced together like that. I thought GL_ARRAY_BUFFER modified VAO state if I binded an object to it while I had a VAO bound, but looks like I was wrong on that. Table 6.6 is great info. too. I didn’t know that existed. I think I got ARRAY_BUFFER_BINDING and VERTEX_ARRAY_BINDING mixed up as the same thing, but the table cleared it up for me. I’ll keep a note of the ELEMENT_ARRAY_BUFFER_BINDING too.

Thanks for the help!