调用glVertexAttribPointer将当前绑定的顶点数组的数据与当前绑定的GL_ARRAY_BUFFER的数据相关联后,我提到我可以简单地删除使用的缓冲区,而不会影响渲染。

数据实际发生了什么调用glVertexAttribPointer时在缓冲区内?看来实际上是将缓冲区中的数据复制到了顶点数组使用的另一个内存位置。

#1 楼

删除OpenGL对象仅仅是一个建议。删除对象将使该对象与当前绑定到的任何绑定点解除绑定。但是,缓冲区对象未“绑定”到VAO。它们被附加到VAO。

调用glVertexAttrib*Pointer时,会将缓冲区对象附加到VAO。要附加的缓冲区对象是绑定到GL_ARRAY_BUFFER的对象。取消绑定该缓冲区,甚至完全删除该缓冲区,都不会撤消附件。

只要将OpenGL对象附加到容器对象,它就会继续存在。