WebGLRenderingContext.readPixels()
The WebGLRenderingContext.readPixels() method of the WebGL API reads a block of pixels from a specified rectangle of the current color framebuffer into an ArrayBufferView object.
Syntax
// WebGL1: void gl.readPixels(x, y, width, height, format, type, pixels); // WebGL2: void gl.readPixels(x, y, width, height, format, type, GLintptr offset); void gl.readPixels(x, y, width, height, format, type, ArrayBufferView pixels, GLuint dstOffset);
Parameters
- x
-
A
GLintspecifying the first horizontal pixel that is read from the lower left corner of a rectangular block of pixels. - y
-
A
GLintspecifying the first vertical pixel that is read from the lower left corner of a rectangular block of pixels. - width
-
A
GLsizeispecifying the width of the rectangle. - height
-
A
GLsizeispecifying the height of the rectangle. - format
-
A
GLenumspecifying the format of the pixel data. Possible values:-
gl.ALPHA: Discards the red, green and blue components and reads the alpha component. -
gl.RGB: Discards the alpha components and reads the red, green and blue components. -
gl.RGBA: Red, green, blue and alpha components are read from the color buffer.
WebGL2 adds
gl.REDgl.RGgl.RED_INTEGERgl.RG_INTEGERgl.RGB_INTEGERgl.RGBA_INTEGER
-
- type
-
A
GLenumspecifying the data type of the pixel data. Possible values:gl.UNSIGNED_BYTEgl.UNSIGNED_SHORT_5_6_5gl.UNSIGNED_SHORT_4_4_4_4gl.UNSIGNED_SHORT_5_5_5_1gl.FLOAT
WebGL2 adds
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
-
An
ArrayBufferViewobject to read data into. The array type must match the type of thetypeparameter.-
Uint8Arrayforgl.UNSIGNED_BYTE. -
Uint16Arrayforgl.UNSIGNED_SHORT_5_6_5,gl.UNSIGNED_SHORT_4_4_4_4, orgl.UNSIGNED_SHORT_5_5_5_1. -
Float32Arrayforgl.FLOAT.
-
-
dstOffsetOptional -
Offset. Defaults to 0.
Return value
None.
Exceptions
- A
gl.INVALID_ENUMerror is thrown ifformatortypeis not an accepted value. - A
gl.INVALID_OPERATIONerror is thrown if-
typeisgl.UNSIGNED_SHORT_5_6_5andformatis notgl.RGB. -
typeisgl.UNSIGNED_SHORT_4_4_4_4andformatis notgl.RGBA. -
typedoes not match the typed array type ofpixels.
-
- A
gl.INVALID_FRAMEBUFFER_OPERATIONerror is thrown if the currently bound framebuffer is not framebuffer complete.
Examples
var canvas = document.getElementById('canvas'); var gl = canvas.getContext('webgl'); var 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
Specifications
| Specification |
|---|
| WebGL Specification (WebGL) # 5.14.12 |
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
readPixels |
9 |
12 |
4 |
11 |
12 |
5.1 |
≤37 |
25 |
Yes |
12 |
8 |
1.5 |
WebGL2 |
56 |
79 |
51 |
No |
43 |
No |
58 |
58 |
51 |
43 |
No |
7.0 |
See also
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/readPixels