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

规范

WebGL 1.0

OpenGL ES 2.0

OpenGL ES 3.0

浏览器兼容

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。

results matching ""

    No results matching ""