什么是顶点数组对象?
上一节介绍了缓冲区对象,缓冲区就是个内存块,缓冲区对象 = 图形服务器中的内存块 + 一个ID。
顶点数组,是为了减少函数调用数量,为了避免共享顶点的冗余,而将顶点放在数组中。
那顶点数组对象呢?顶点数组对象,就是 顶点数组 + 一个ID名称。然后通过这个名称,来对这个顶点数组进行访问。
为什么要使用顶点数组对象?
为了方便在不同的顶点数组之间进行切换。由于顶点数组,同一个类型的只有一个,所以,当顶点数据不止有一个数组的时候,就需要将数组A绑定到顶点数组上,使用。用完之后,再将数组B绑定到顶点数组上,使用,这样来回切换,麻烦。而由于顶点数组对象,可以有多个,每个对象,通过名称来区分。这样,假如有两个顶点数组,我们申请两个顶点数组对象,将两个顶点数组,绑定到不同对象上,这样,使用的时候,就只需要在两个对象之间切换,不需要来回绑定。
如何使用顶点数组对象
与顶点数组对象,相关联的函数有4个,它们分别是glGenVertexArrays,glBindVertexArray,glDeleteVertexArrays, glIsVertexArray。
这四个函数,和之前的缓冲区对象有点类似,glGenBuffers,glBindBuffer, glDeleteBuffers,glIsBuffer。
glGenVertexArrays
void glGenVertexArrays(GLsizei n, GLuint *arrays);
返回n个当前未使用的名字,这些未使用的名字保存在arrays中。
glBindVertexArray
void glBindVertexArray(GLuint array);
激活对应的array,表示即将进行的操作,作用于array上面。
glDeleteVertexArrays
void glDeleteVertexArrays(GLsizei n, GLuint *arrays);
这个和glGenVertexArrays对应,表示删除arrays中的n个数组对象。
glIsVertexArray
GLboolean glIsVertexArray(GLuint array);
查询array这个数组对象,是否正在被使用。如果array是之前glGenVertexArrays()产生的一个顶点数组对象的名字,但是随后没有删除,返回GL_TRUE。如果array是0或者一个并非顶点数组对象的名字的非零值,返回GL_FALSE。