This feature is well established and works across many devices and browser versions. It’s been available across browsers since December 2022.
The OES_draw_buffers_indexed extension is part of the WebGL API and enables the use of different blend options when writing to multiple color buffers simultaneously.
WebGL extensions are available using the WebGLRenderingContext.getExtension() method. For more information, see also Using Extensions in the WebGL tutorial.
Note: This extension is only available to WebGL2 contexts.
OES_draw_buffers_indexed.blendEquationiOES()Sets both the RGB and alpha blend equations for a particular draw buffer.
OES_draw_buffers_indexed.blendEquationSeparateiOES()Sets the RGB and alpha blend equations separately for a particular draw buffer.
OES_draw_buffers_indexed.blendFunciOES()Defines which function is used when blending pixels for a particular draw buffer.
OES_draw_buffers_indexed.blendFuncSeparateiOES()Defines which function is used when blending pixels for RGB and alpha components separately for a particular draw buffer.
OES_draw_buffers_indexed.colorMaskiOES()Sets which color components to enable or to disable when drawing or rendering for a particular draw buffer.
OES_draw_buffers_indexed.disableiOES()Disables blending for a particular draw buffer.
OES_draw_buffers_indexed.enableiOES()Enables blending for a particular draw buffer.
OES_draw_buffers_indexed extensionEnable the extension with a call to WebGLRenderingContext.getExtension().
const ext = gl.getExtension("OES_draw_buffers_indexed");
You can now enable blending, set blending equation, blending function, and color mask for a particular draw buffer.
// For gl.DRAW_BUFFER0 ext.enableiOES(gl.BLEND, 0); ext.blendEquationiOES(0, gl.FUNC_ADD); ext.blendFunciOES(0, gl.ONE, gl.ONE); ext.colorMaskiOES(0, 1, 0, 0, 0); // For gl.DRAW_BUFFER1 ext.enableiOES(gl.BLEND, 1); ext.blendEquationSeparateiOES(1, gl.FUNC_ADD, gl.FUNC_SUBTRACT); ext.blendFuncSeparateiOES( 1, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ZERO, ); ext.colorMaskiOES(1, 0, 1, 0, 0);
To retrieve settings for a particular draw buffer, use WebGL2RenderingContext.getIndexedParameter().
// For gl.DRAW_BUFFER0 gl.getIndexedParameter(gl.BLEND_EQUATION_RGB, 0); gl.getIndexedParameter(gl.BLEND_EQUATION_ALPHA, 0); gl.getIndexedParameter(gl.BLEND_SRC_RGB, 0); gl.getIndexedParameter(gl.BLEND_SRC_ALPHA, 0); gl.getIndexedParameter(gl.BLEND_DST_RGB, 0); gl.getIndexedParameter(gl.BLEND_DST_ALPHA, 0); gl.getIndexedParameter(gl.COLOR_WRITEMASK, 0); // For gl.DRAW_BUFFER1 gl.getIndexedParameter(gl.BLEND_EQUATION_RGB, 1); gl.getIndexedParameter(gl.BLEND_EQUATION_ALPHA, 1); gl.getIndexedParameter(gl.BLEND_SRC_RGB, 1); gl.getIndexedParameter(gl.BLEND_SRC_ALPHA, 1); gl.getIndexedParameter(gl.BLEND_DST_RGB, 1); gl.getIndexedParameter(gl.BLEND_DST_ALPHA, 1); gl.getIndexedParameter(gl.COLOR_WRITEMASK, 1);
You can use WebGLRenderingContext.getParameter() to see how many draw buffers are available.
const maxDrawBuffers = gl.getParameter(gl.MAX_DRAW_BUFFERS);
| Specification |
|---|
| WebGL OES_draw_buffers_indexed Extension Specification> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
OES_draw_buffers_indexed |
100 | 100 | 108 | 86 | 16 | 100 | 108 | 69 | 16 | 19.0 | 100 | 16 |
blendEquationSeparateiOES |
100 | 100 | 108 | 86 | 16 | 100 | 108 | 69 | 16 | 19.0 | 100 | 16 |
blendEquationiOES |
100 | 100 | 108 | 86 | 16 | 100 | 108 | 69 | 16 | 19.0 | 100 | 16 |
blendFuncSeparateiOES |
100 | 100 | 108 | 86 | 16 | 100 | 108 | 69 | 16 | 19.0 | 100 | 16 |
blendFunciOES |
100 | 100 | 108 | 86 | 16 | 100 | 108 | 69 | 16 | 19.0 | 100 | 16 |
colorMaskiOES |
100 | 100 | 108 | 86 | 16 | 100 | 108 | 69 | 16 | 19.0 | 100 | 16 |
disableiOES |
100 | 100 | 108 | 86 | 16 | 100 | 108 | 69 | 16 | 19.0 | 100 | 16 |
enableiOES |
100 | 100 | 108 | 86 | 16 | 100 | 108 | 69 | 16 | 19.0 | 100 | 16 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/OES_draw_buffers_indexed