我很难理解 VAO 究竟是如何处理缓冲区映射的。我正在做的事情可以用这个伪代码来描述:
SetUp:
BindVAO
BindArrayBuffer
glBufferData(GL_ARRAY_BUFFER, ExpectedMaxCount, NULL, GL_DYNAMIC_DRAW);//Allocate storage
glEnableVertexAttribArray
glVertexAttribPointer
BindElementBuffer
Allocate storage (no data yet)
UnbindVAO
UnbindArrayBuffer
UnbindElementBuffer
Draw:
SubArrayAndElementDataIfNeeded
BindVAO
DrawElements
当调用 DrawElements 时,OpenGL 使用绑定的 VAO 来解析数组和元素缓冲区绑定是否正确?在 Draw 调用之后,绑定的数组缓冲区为 0,但元素缓冲区仍然是用于 Draw 的缓冲区。
在 VAO 设置期间是否必须分配缓冲内存?如果在设置后调用 BufferData,VAO 会失效吗?