OpenGL在画图过程中大致可以分为三步,第一步创建好对应的vertex队列,同时在适当的时机将vertex绑定到GL内部;第二步利用BUFFER_ARRAY向vertex队列提交顶点信息以便对vertex队列进行初始化;第三步则是绑定已经初始化的vertex队列,同时利用对应的画图函数进行绘制。
vertex队列的生成主要利用glGenVertexArrays函数完成,其第一个参数定义需要生成的队列的个数;第二个函数则用于接收生成的vertex队列索引。在生成了顶点队列之后,需要利用glBindVertexArray函数将返回的ID号码给绑定到GL状态机上,这样在下一次调用glBindVertexArray函数之前的所有修改都是针对本次绑定的vertex队列。经过处理之后,需要一种渠道使得程序能够向vertex队列提交数据,GL提供的接口是BUFFER_ARRAY。所有向vertex队列提交的数据都是通过buffer array进行的。程序向buffer array提交数据有两种调用方式,第一种是直接利用glBufferData进行数据提交,这种情况适用于所有的数据信息都在一个数组中,并且类型相同;还有一种情况是利用glBufferSubData来进行提交,但是需要注意的是glBufferSubData并不会分配内存,所以在调用之前需要先调用glBufferData。glBufferData首先根据传递来的信息分配足够的连续内存空间,如果传递的数据指针不为NULL,则会提交数据。而glBufferSubData则会根据offset以及需要提交的数据大小向已经分配好的内存空间中提交数据。最后提交的数据由glVertexAttribPointer来分配给对应的vertex shader语言中的对应属性中,包括顶点位置,以及顶点的颜色。在绘图的时候,GPU会有一个索引将顶点的位置信息和顶点的颜色信息一一对应起来,如果绘图过程中需要自