WebGLRenderingContext: readPixels() 方法
注意:此功能在 Web Workers 中可用。
WebGLRenderingContext.readPixels() 方法是 WebGL API 的一部分,它会将当前颜色帧缓冲器中指定矩形区域的像素块读取到一个 TypedArray 或 DataView 对象中。
语法
js
// WebGL1:
readPixels(x, y, width, height, format, type, pixels)
// WebGL2:
readPixels(x, y, width, height, format, type, offset)
readPixels(x, y, width, height, format, type, pixels)
readPixels(x, y, width, height, format, type, pixels, dstOffset)
参数
x-
一个
GLint,指定从矩形像素块的左下角开始读取的第一个水平像素。 y-
一个
GLint,指定从矩形像素块的左下角开始读取的第一个垂直像素。 width-
一个
GLsizei,指定矩形的宽度。 height-
一个
GLsizei,指定矩形的高度。 格式(format)-
一个
GLenum,指定像素数据的格式。可能的值有:gl.ALPHA-
丢弃红色、绿色和蓝色分量,只读取 alpha 分量。
gl.RGB-
丢弃 alpha 分量,读取红色、绿色和蓝色分量。
gl.RGBA-
从颜色缓冲区读取红色、绿色、蓝色和 alpha 分量。
WebGL2 添加了:
gl.REDgl.RGgl.RED_INTEGERgl.RG_INTEGERgl.RGB_INTEGERgl.RGBA_INTEGER
type-
一个
GLenum,指定像素数据的类型。可能的值有:gl.UNSIGNED_BYTEgl.UNSIGNED_SHORT_5_6_5gl.UNSIGNED_SHORT_4_4_4_4gl.UNSIGNED_SHORT_5_5_5_1gl.FLOAT
WebGL2 添加了:
gl.BYTEgl.UNSIGNED_INT_2_10_10_10_REVgl.HALF_FLOATgl.SHORTgl.UNSIGNED_SHORTgl.INTgl.UNSIGNED_INTgl.UNSIGNED_INT_10F_11F_11F_REVgl.UNSIGNED_INT_5_9_9_9_REV
pixels-
用于读取数据的对象。数组类型必须与
type参数的类型匹配。- 对于
gl.UNSIGNED_BYTE,使用Uint8Array。 - 对于
gl.UNSIGNED_SHORT_5_6_5、gl.UNSIGNED_SHORT_4_4_4_4或gl.UNSIGNED_SHORT_5_5_5_1,使用Uint16Array。 - 对于
gl.FLOAT,使用Float32Array。
- 对于
dstOffset可选-
偏移量。默认为 0。
返回值
无(undefined)。
异常
-
如果
format或type不是可接受的值,则会抛出gl.INVALID_ENUM错误。 -
如果满足以下条件,则会抛出
gl.INVALID_OPERATION错误:type为gl.UNSIGNED_SHORT_5_6_5,而format不是gl.RGB。type为gl.UNSIGNED_SHORT_4_4_4_4,而format不是gl.RGBA。type与pixels的类型化数组类型不匹配。
-
如果当前绑定的帧缓冲器不完整,则会抛出
gl.INVALID_FRAMEBUFFER_OPERATION错误。
示例
js
const canvas = document.getElementById("canvas");
const gl = canvas.getContext("webgl");
const pixels = new Uint8Array(
gl.drawingBufferWidth * gl.drawingBufferHeight * 4,
);
gl.readPixels(
0,
0,
gl.drawingBufferWidth,
gl.drawingBufferHeight,
gl.RGBA,
gl.UNSIGNED_BYTE,
pixels,
);
console.log(pixels); // Uint8Array
规范
| 规范 |
|---|
| WebGL 规范 # 5.14.12 |
浏览器兼容性
加载中…