该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
缓存对象中的顶点数组
保存在缓存对象中的顶点数组数据块和客户端顶点数组使用同样的格式和布局选项。
客户端状态与每个顶点数组的类型相关,包括点的缓存对象。定义顶点数组位置和组织的命令 复制缓存对象的名字(绑定到ARRAY_BUFFER)到绑定点。例如,NormalPointer命令复制ARRAY_BUFFER_BINDING的值(绑定到ARRAY_BUFFER的缓存对象的名字)到客户端状态变量 NORMAL_ARRAY_BUFFER_BINDING。
如果数组绑定的缓存不为零,渲染命令DrawArrays和DrawElements将操作缓存区中的先前定义的顶点数组数据。当一个数组源自缓存对象,这个数组的指针值常用于计算缓存中数据区的偏移量。这个偏移通过指向数组的指针减去一个空指针来计算,所有的指针都是指向基本机器单元的指针。
在一个单独的渲染操作中,顶点数组可以使用客户端内存和各种缓存对象的任意组合。
当一个缓存对象绑定后,重新使用客户端顶点数组,可以调用命令BindBuffer(ARRAY_BUFFER, 0),然后可以使用先前的命令操作客户端的顶点数组指针。
缓存对象中的数组索引
保存在缓存对象中的数组索引块支持和客户端索引数组相同的操作格式。最初,0被绑定到ELEMENT_ARRAY_BUFFER, DrawElements命令需要indices参数指向数据源。
调用BindBuffer命令,并将target设置为ELEMENT_ARRAY_BUFFER,将绑定一个缓存对象到ELEMENT_ARRAY_BUFFER上。buffer将设置一个缓存对象的名字。如果没有一致的缓存对象存在,一个新缓存对象将被初始化。
命令BufferData和BufferSubData也可以设置target为ELEMENT_ARRAY_BUFFER。在这些情况下,和先前介绍的缓存对象的操作方式一样,只是buffer的被绑定的目标为ELEMENT_ARRAY_BUFFER。
当一个非0的缓存对象名被绑定到ELEMENT_ARRAY_BUFFER,DrawElements作用于缓存对象中的索引数组,并通过indices参数来计算缓存对象中的偏移,
缓存对象通过绑定一个未使用的名字到ARRAY_BUFFER或者ELEMENT_ARRAY_BUFFER创建,它们形式上相同的,但是GL可能使用不同方式的实现绑定的初始化。在某种情况下,通过在某些特殊的缓存对象中保存索引和数组对象和为绑定点创建这些缓存对象,可以优化性能。