UNPKG

clay-core

Version:

Provide a more friendly web-side drawing interface!

52 lines (47 loc) 1.84 kB
/** * 缓冲区核心方法 * -------------------------------------------- * 缓冲区分为二种: * 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); };