WebGLRenderingContext.bufferData()
bufferData初始化并创建缓冲区对象的数据存储。
语法
void gl.bufferData(target, size, usage);
void gl.bufferData(target, data, usage);
参数
target
GLenum类型,来定义绑定点(目标)。可能的值有:
gl.ARRAY_BUFFER:缓冲区包含顶点属性,比如顶点坐标,纹理坐标数据,或者顶点颜色数据。
gl.ELEMENT_ARRAY_BUFFER:用于元素索引的缓冲区。
当使用WebGL 2.0背景,下列的值可额外被使用:
gl.COPY_READ_BUFFER:用于将一个缓冲区对象复制到另一个的缓冲区。.
gl.COPY_WRITE_BUFFER :用于将一个缓冲区对象复制到另一个的缓冲区。
gl.TRANSFORM_FEEDBACK_BUFFER:用于转换反馈作业的缓冲区。
gl.UNIFORM_BUFFER:用于储存uniform blocks的缓冲区。
gl.PIXEL_PACK_BUFFER:用于像素转化作业的缓冲区。
gl.PIXEL_UNPACK_BUFFER: 用于像素转化作业的缓冲区。
size
GLsizeiptr类型,设置缓冲区对象数据储存的尺寸。
data(可选的)
是ArrayBuffer、ShareArrayBuffer、或ArrayBufferView数组类型之一,将会被复制到数据储存当中。如果是null,数据储存仍被创建,但内容时未初始化、未定义的。
usage
GLenum类型,定义数据储存的使用模式。可能的值有:
gl.STATIC_DRAW::缓冲区中经常被使用但通常不变的内容。写给缓冲区的内容,但不读取。
gl.DYNAMIC_DRAW: 缓冲区中经常被使用也经常改变的内容。写给缓冲区的内容,但不读取。 .
gl.STREAM_DRAW:缓冲区中不经常被使用的内容。写给缓冲区的内容,但不读取。
当使用WebGL 2 context, 下列的值可额外被使用:
gl.STATIC_READ: 缓冲区中经常被使用但通常不变的内容。从缓冲区读取的内容,但不书写。.
gl.DYNAMIC_READ:缓冲区中经常被使用也经常改变的内容。从缓冲区读取的内容,但不书写。
gl.STREAM_READ: 缓冲区中不经常被使用的内容。从缓冲区读取的内容,但不书写。
gl.STATIC_COPY: 缓冲区中经常被使用但通常不变的内容。内容不可被用户读取或书写。
gl.DYNAMIC_COPY:缓冲区中经常被使用也经常改变的内容。内容不可被用户读取或书写。
gl.STREAM_COPY: 缓冲区中经常被使用但通常不变的内容。内容不可被用户读取或书写。
返回值
无
提示
如果在给到的尺寸下不能创建一个数据储存,gl.OUT_OF_MEMORY错误将会抛出。
如果尺寸是负值(negative),gl.INVALID_VALUE错误将会被抛出。
如果目标(target)或用法(usage)不是列举出被允许的那些,gl.INVALID_ENUM错误将会被抛出。
例子
使用缓冲区数据
var canvas = document.getElementById("canvas");
var gl = canvas.getContext("webgl");
var buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, 1024, gl.STATIC_DRAW);
获得缓冲区信息
核查当前的缓冲区usage和缓冲区尺寸(size),使用 WebGLRenderingContext.getBufferParameter()办法。
gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE); gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_USAGE);
规范
浏览器兼容
Desktop:Chrome 9、 Edge 12、Firefox 4.0 、 Internet Explorer 11 、Opera 12、Safari 5.1;
Mobile: Android ?、 Chrome for Android 25、 Firefox Mobile 4.0、Firefox OS 1.0、 IE Mobile ?、 Opera Mobile 12、 Safari Mobile 8.0;
Chrome、FireFox 发行版本需要在偏好设置启用WebGL2。