WebGLRenderingContext: readPixels() method
        
        
          
                Baseline
                
                  Widely available
                
                
              
        
        
        
          
                
              
                
              
                
              
        
        
      
      This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Note: This feature is available in Web Workers.
The WebGLRenderingContext.readPixels() method of the WebGL API reads a block of pixels from a
specified rectangle of the current color framebuffer into a TypedArray or a DataView object.
Syntax
// 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)
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 object to read data into. The array type must match the type of the
typeparameter: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 (undefined).
Exceptions
- 
A
gl.INVALID_ENUMerror is thrown ifformatortypeis not an accepted value. - 
A
gl.INVALID_OPERATIONerror is thrown iftypeisgl.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
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
Specifications
| Specification | 
|---|
| WebGL Specification> # 5.14.12>  | 
            
Browser compatibility
Loading…