clay-core
Version:
Provide a more friendly web-side drawing interface!
52 lines (47 loc) • 1.84 kB
JavaScript
/**
* 缓冲区核心方法
* --------------------------------------------
* 缓冲区分为二种:
* 1.缓冲区中保存了包含顶点的数据
* 2.缓冲区保存了包含顶点的索引值
*
*/
// 获取一个新的缓冲区
// isElement默认false,创建第一种缓冲区,为true创建第二种
var _newBuffer = function (gl, isElement) {
var buffer = gl.createBuffer(),
TYPE = isElement ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER;
// 把缓冲区对象绑定到目标
gl.bindBuffer(TYPE, buffer);
return buffer;
};
// 数据写入缓冲区
// data是一个类型化数组,表示写入的数据
// usage表示程序如何使用存储在缓冲区的数据
var _writeBuffer = function (gl, data, usage, isElement) {
var TYPE = isElement ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER;
gl.bufferData(TYPE, data, usage);
};
// 使用缓冲区数据
// location指定待分配的attribute变量的存储位置
// size每个分量个数
// type数据类型,应该是以下的某个:
// gl.UNSIGNED_BYTE Uint8Array
// gl.SHORT Int16Array
// gl.UNSIGNED_SHORT Uint16Array
// gl.INT Int32Array
// gl.UNSIGNED_INT Uint32Array
// gl.FLOAT Float32Array
// stride相邻二个数据项的字节数
// offset数据的起点字节位置
// normalized是否把非浮点型的数据归一化到[0,1]或[-1,1]区间
var _useBuffer = function (gl, location, size, type, stride, offset, normalized) {
// 把缓冲区对象分配给目标变量
gl.vertexAttribPointer(location, size, type, normalized || false, stride || 0, offset || 0);
// 连接目标对象和缓冲区对象
gl.enableVertexAttribArray(location);
};
// 删除缓冲区
var _deleteBuffer = function (gl, buffer) {
gl.deleteBuffer(buffer);
};