--- title: WebGLRenderingContext.bufferData() slug: Web/API/WebGLRenderingContext/bufferData tags: - API - WebGL - WebGLRenderingContext - 参考 - 方法 translation_of: Web/API/WebGLRenderingContext/bufferData ---
WebGL API 的WebGLRenderingContext.bufferData()方法创建并初始化了Buffer对象的数据存储区。
// WebGL1: void gl.bufferData(target, size, usage); void gl.bufferData(target, ArrayBuffer? srcData, usage); void gl.bufferData(target, ArrayBufferView srcData, usage); // WebGL2: void gl.bufferData(target, ArrayBufferView srcData, usage, srcOffset, length);
gl.ARRAY_BUFFER: 包含顶点属性的Buffer,如顶点坐标,纹理坐标数据或顶点颜色数据。gl.ELEMENT_ARRAY_BUFFER: 用于元素索引的Buffer。gl.COPY_READ_BUFFER: 从一个Buffer对象复制到另一个Buffer对象。gl.COPY_WRITE_BUFFER: 从一个Buffer对象复制到另一个Buffer对象。gl.TRANSFORM_FEEDBACK_BUFFER: 用于转换反馈操作的Buffer。gl.UNIFORM_BUFFER: 用于存储统一块的Buffer。gl.PIXEL_PACK_BUFFER: 用于像素转换操作的Buffer。gl.PIXEL_UNPACK_BUFFER: 用于像素转换操作的Buffer。null,数据存储区仍会被创建,但是不会进行初始化和定义。gl.STATIC_DRAW: 缓冲区的内容可能经常使用,而不会经常更改。内容被写入缓冲区,但不被读取。gl.DYNAMIC_DRAW: 缓冲区的内容可能经常被使用,并且经常更改。内容被写入缓冲区,但不被读取。gl.STREAM_DRAW: 缓冲区的内容可能不会经常使用。内容被写入缓冲区,但不被读取。gl.STATIC_READ: 缓冲区的内容可能经常使用,而不会经常更改。内容从缓冲区读取,但不写入。gl.DYNAMIC_READ: 缓冲区的内容可能经常使用,并且经常更改。内容从缓冲区读取,但不写入。gl.STREAM_READ: 缓冲区的内容可能不会经常使用。内容从缓冲区读取,但不写入。gl.STATIC_COPY: 缓冲区的内容可能经常使用,而不会经常更改。用户不会从缓冲区读取内容,也不写入。gl.DYNAMIC_COPY: 缓冲区的内容可能经常使用,并且经常更改。用户不会从缓冲区读取内容,也不写入。gl.STREAM_COPY: 缓冲区的内容可能不会经常使用。用户不会从缓冲区读取内容,也不写入。length {{optional_inline}}None.
size指定大小的数据存储区,则会抛出gl.OUT_OF_MEMORY异常。size是负值,则会抛出gl.INVALID_VALUE异常。target或usage不属于枚举值之列,则会抛出gl.INVALID_ENUM异常。bufferDatavar 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);
使用 {{domxref("WebGLRenderingContext.getBufferParameter()")}} 方法检查当前缓冲区的使用情况和缓冲区大小。
gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE); gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_USAGE);
| 规范 | 状态 | 备注 |
|---|---|---|
| {{SpecName('WebGL', "#5.14.5", "bufferData")}} | {{Spec2('WebGL')}} | 初次定义 |
| {{SpecName('OpenGL ES 2.0', "glBufferData.xml", "glBufferData")}} | {{Spec2('OpenGL ES 2.0')}} | OpenGL API的手册页 |
| {{SpecName('OpenGL ES 3.0', "glBufferData.xhtml", "glBufferData")}} | {{Spec2('OpenGL ES 3.0')}} | OpenGL ES 3 API 的手册页 新增 target 可取的buffer值:gl.COPY_READ_BUFFER,gl.COPY_WRITE_BUFFER,gl.TRANSFORM_FEEDBACK_BUFFER,gl.UNIFORM_BUFFER,gl.PIXEL_PACK_BUFFER,gl.PIXEL_UNPACK_BUFFER新增 usage 提示:gl.STATIC_READ,gl.DYNAMIC_READ,gl.STREAM_READ,gl.STATIC_COPY,gl.DYNAMIC_COPY,gl.STREAM_COPY. |
{{Compat("api.WebGLRenderingContext.bufferData")}}