什么是缓冲区?说的简单点,就是程序快速给GPU一堆数据的特殊通道。分为二种:
特殊注意:因为缓冲区是用来记录多条数据的,而片元着色器是针对一个片元处理的,因此不可以直接和缓冲区打交道,一般借助顶点着色器间接使用(我不知道这样说是否合适,不过大概是这个意思)。
在使用缓冲区之前,让我们先了解一下着色器语言的变量。其实只有三种(这和int、boolean之类的不是一个概念,这里的"种"是指这个变量是干什么的):
数据流动过程大概是:许多数据流到顶点着色器attribute定义的变量 -> 通过varying变量,数据再流到片元着色器(如果需要)。
var bufferObj=render3D.buffer(boolean);
可以传递一个boolean类型的参数,缺省为fasle,表示创建第一种类型的缓冲区,如果会true,创建的是第二种类型的缓冲区。
bufferObj.write(data[, usage]);
第一个参数是一个类型化数组,表示写入的数据,必输;第二个参数表示程序如何使用存储在缓冲区的数据,非必输。返回bufferObj。
bufferObj.use(location, size[, stride, offset, type, normalized]);
注意:第二种缓冲区到上一步就结束了,这一步是针对第一类缓冲区的。返回bufferObj。
bufferObj.close();
关闭缓冲区必须在使用结束后(相关绘图结束)。返回gl。