This feature is well established and works across many devices and browser versions. It’s been available across browsers since December 2022.
The blendFuncSeparateiOES() method of the OES_draw_buffers_indexed WebGL extension defines which function is used when blending pixels for RGB and alpha components separately for a particular draw buffer.
See OES_draw_buffers_indexed.blendFunciOES() for setting RGB and alpha together and WebGLRenderingContext.blendFuncSeparate() for the WebGL 1 version of this method.
blendFuncSeparateiOES(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)
bufAn integer i specifying the draw buffer associated with the constant gl.DRAW_BUFFERi, see WebGL draw buffer constants.
srcRGBA GLenum specifying a multiplier for the red, green and blue (RGB) source blending factors. Accepts the same enums as the srcRGB parameter in WebGLRenderingContext.blendFuncSeparate().
dstRGBA GLenum specifying a multiplier for the red, green and blue (RGB) destination blending factors. Accepts the same enums as the dstRGB parameter in WebGLRenderingContext.blendFuncSeparate().
srcAlphaA GLenum specifying a multiplier for the alpha source blending factor. Accepts the same enums as the srcAlpha parameter in WebGLRenderingContext.blendFuncSeparate().
dstAlphaA GLenum specifying a multiplier for the alpha destination blending factor. Accepts the same enums as the srcAlpha parameter in WebGLRenderingContext.blendFuncSeparate().
None (undefined).
buf is not a valid value, a gl.INVALID_VALUE error is thrown.srcRGB, dstRGB, srcAlpha or dstAlpha are not one of the possible values, a gl.INVALID_ENUM error is thrown.WebGLRenderingContext.blendFuncSeparate() apply: If a constant color and a constant alpha value are used together as source and destination factors, a gl.INVALID_ENUM error is thrown.The following sets the blend functions for the draw buffers gl.DRAW_BUFFER0 (call where buf is 0) and gl.DRAW_BUFFER1 (call where buf is 1).
const ext = gl.getExtension("OES_draw_buffers_indexed");
ext.blendFuncSeparateiOES(0, gl.ONE, gl.ONE, gl.ZERO, gl.ZERO);
ext.blendFuncSeparateiOES(
1,
gl.SRC_ALPHA,
gl.ONE_MINUS_SRC_ALPHA,
gl.ZERO,
gl.ZERO,
);
To get the blend functions for the gl.DRAW_BUFFER0 and gl.DRAW_BUFFER1 draw buffers, query the BLEND_SRC_RGB, BLEND_SRC_ALPHA, BLEND_DST_RGB, and BLEND_DST_ALPHA constants using WebGL2RenderingContext.getIndexedParameter():
// For gl.DRAW_BUFFER0 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); // For gl.DRAW_BUFFER0 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);
| 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 | |
blendFuncSeparateiOES |
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/blendFuncSeparateiOES