WebGLRenderingContext.blendEquationSeparate ()
blendEquationSeparate 可用来分别设置RGB混合方程和alpha混合方程。
混合方程决定新的像素如何与一个已经在WebGLFramebuffer中的像素混合。
语法
void gl.blendEquationSeparate(modeRGB, modeAlpha);
参数
modeRGB
GLenum类型,定义源和目标的红、绿、蓝成分的结合方式,一定是以下几种:
gl.FUNC_ADD: 源 + 目标(默认值)
gl.FUNC_SUBTRACT: 源 - 目标
gl.FUNC_REVERSE_SUBTRACT: 目标 - 源
使用EXT_blend_minmax扩展
ext.MIN_EXT: 源和目标当中的最小值
ext.MAX_EXT: 源和目标当中的最大值
当使用WebGL 2.0时,有下列额外可用的值:
gl.MIN : 源和目标当中的最小值
gl.MAX : 源和目标当中的最大值
modeAlpha
GLenum类型,定义源和目标的透明度的结合方式,一定是以下几种:
gl.FUNC_ADD: 源 + 目标(默认值)
gl.FUNC_SUBTRACT: 源 - 目标
gl.FUNC_REVERSE_SUBTRACT: 目标 - 源
使用EXT_blend_minmax扩展
ext.MIN_EXT: 源和目标当中的最小值
ext.MAX_EXT: 源和目标当中的最大值
当使用WebGL 2.0时,有下列额外可用的值:
gl.MIN : 源和目标当中的最小值
gl.MAX : 源和目标当中的最大值
混合方程式 | 方程 | 描述 |
---|---|---|
gl.FUNC_ADD | R=Rs*Sr+Rd*Dr;G=Gs*Sg+Gd*Dg;B=Bs*Sb+Bd*Db;A=As*Sa+Ad*Da | 源 + 目标(默认值) |
gl.FUNC_SUBTRACT | R=Rs*Sr-Rd*Dr;G=Gs*Sg-Gd*Dg;B=Bs*Sb-Bd*Db;A=As*Sa-Ad*Da | 源 - 目标 |
gl.FUNC_REVERSE_SUBTRACT | R=Rd*Dr-Rs*Sr;G=Gd*Dg-Gs*Sg;B=Bd*Db-Bs*Sb;A=Ad*Da-As*Sa | 目标 - 源 |
gl.MIN | R=min(Rs,Rd);G=min(Gs,Gd);B=min(Bs,Bd);A=min(As,Ad) | 取最小值(WebGL 2.0) |
gl.MAX | R=max(Rs,Rd);G=max(Gs,Gd);B=max(Bs,Bd);A=max(As,Ad) | 取最大值(WebGL 2.0) |
返回值
无
提示
如果mode 不是以上三个值当中的,将会抛出gl.INVALID_ENUM 错误。
例子
设置混合方程,使用:
gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_SUBTRACT);
获得现混合方程,可询问BLEND_EQUATION, BLEND_EQUATION_RGB 和 BLEND_EQUATION_ALPHA常数,它将返回gl.FUNC_ADD, gl.FUNC_SUBTRACT, gl.FUNC_REVERSE_SUBTRACT,或如果 EXT_blend_minmax可用,可返回 ext.MIN_EXT 或 ext.MAX_EXT。
gl.getParameter(gl.BLEND_EQUATION_RGB) === gl.FUNC_ADD;
// true
gl.getParameter(gl.BLEND_EQUATION_ALPHA) === gl.FUNC_ADD;
// true
规范
浏览器兼容
Desktop:Chrome 9、 Edge 12、Firefox 4.0 、 Internet Explorer 11 、Opera 12、Safari 5.1;
Mobile: Android ?、 Chrome for Android 25、 Firefox Mobile 4.0、Firefox OS 1.0、 IE Mobile ?、 Opera Mobile 12、 Safari Mobile 8.0;
Chrome、FireFox 发行版本需要在偏好设置启用WebGL2。