缓冲区

什么是缓冲区?说的简单点,就是程序快速给GPU一堆数据的特殊通道。分为二种:

特殊注意:因为缓冲区是用来记录多条数据的,而片元着色器是针对一个片元处理的,因此不可以直接和缓冲区打交道,一般借助顶点着色器间接使用(我不知道这样说是否合适,不过大概是这个意思)。

GLES变量

在使用缓冲区之前,让我们先了解一下着色器语言的变量。其实只有三种(这和int、boolean之类的不是一个概念,这里的"种"是指这个变量是干什么的):

第一种缓冲区

数据流动过程大概是:许多数据流到顶点着色器attribute定义的变量 -> 通过varying变量,数据再流到片元着色器(如果需要)。

使用缓冲区

初始化(或创建)缓冲区对象

var bufferObj=render3D.buffer(boolean);

可以传递一个boolean类型的参数,缺省为fasle,表示创建第一种类型的缓冲区,如果会true,创建的是第二种类型的缓冲区。

数据写入缓冲区

bufferObj.write(data[, usage]);

第一个参数是一个类型化数组,表示写入的数据,必输;第二个参数表示程序如何使用存储在缓冲区的数据,非必输。返回bufferObj。

分配缓冲区中数据到指定的attribute变量

bufferObj.use(location, size[, stride, offset, type, normalized]);

注意:第二种缓冲区到上一步就结束了,这一步是针对第一类缓冲区的。返回bufferObj。

关闭缓冲区

bufferObj.close();

关闭缓冲区必须在使用结束后(相关绘图结束)。返回gl。