OpenGL中对VAO和VBO的理解
在之前一次面试中被问到过VAO和VBO分别是什么,因为自己学的不扎实导致没答上来,最近重新开始复习OpenGL,查阅了许多教程后对VAO和VBO有了新的理解
首先VBO(Vertex Buffer Object)是被用来存放顶点(Vertices)数据的,因为计算机在CPU与GPU通信时的消耗比较大,所以尽量把数据打包一起送往GPU,所以就可以用VBO来存放顶点数据然后传递给GPU
那么VAO是什么呢?

说实话我一开始被这张图搞蒙了,以为VAO只是存放VBO索引值的地方
但通过总结其他教程,归纳出以下结论:
VAO中存放着对的VBO句柄,即 glBindBuffer(GL_ARRAY_BUFFER, VBO) 函数绑定的是哪个具体的VBO
VAO中存放着VBO的属性,即glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0) 中保存绑定好的VBO的属性属性(例如第五个参数是步长(Stride)即连续顶点属性组之间的间隔)
VAO中存放着对glEnableVertexAttribArray和glDisableVertexAttribArray的调用,当VAO的值变成enable时,Vertex Shader才可以读取这些值