WebGLRenderingContext: blendFuncSeparate() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

注意:此功能在 Web Workers 中可用。

WebGLRenderingContext.blendFuncSeparate() 方法属于 WebGL API,它定义了如何分别对 RGB 和 Alpha 分量进行像素混合算术运算。

语法

js
blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha)

参数

srcRGB

一个 GLenum 类型的值,指定了红、绿、蓝(RGB)源混合因子的乘数。默认值为 gl.ONE。可能的值见下文。

dstRGB

一个 GLenum 类型的值,指定了红、绿、蓝(RGB)目标混合因子的乘数。默认值为 gl.ZERO。可能的值见下文。

srcAlpha

一个 GLenum 类型的值,指定了 Alpha 源混合因子的乘数。默认值为 gl.ONE。可能的值见下文。

dstAlpha

一个 GLenum 类型的值,指定了 Alpha 目标混合因子的乘数。默认值为 gl.ZERO。可能的值见下文。

返回值

无(undefined)。

异常

  • 如果 srcRGBdstRGBsrcAlphadstAlpha 不是列出的可能值之一,则会抛出 gl.INVALID_ENUM 错误。
  • 如果同时使用常量颜色和常量 Alpha 值作为源(srcRGB)和目标(dstRGB)因子,则会抛出 gl.INVALID_ENUM 错误。

常量

以下常量可用于 srcRGBdstRGBsrcAlphadstAlpha

混合因子的计算公式如下(所有 RGBA 值介于 0 和 1 之间):

  • color(RGB) = (sourceColor * srcRGB) + (destinationColor * dstRGB)
  • color(A) = (sourceAlpha * srcAlpha) + (destinationAlpha * dstAlpha)

在下表中,RS、GS、BS、AS 分别代表源的绿Alpha分量,而 RD、GD、BD、AD 分别代表目标的绿Alpha分量。同样,RC、GC、BC、AC 分别代表常量颜色的绿Alpha分量。它们的值都介于 0 和 1 之间(包含)。

常量 RGB 因子 Alpha 因子 描述
gl.ZERO 0,0,0 0 将所有颜色乘以 0。
gl.ONE 1,1,1,1 1 将所有颜色乘以 1。
gl.SRC_COLOR RS、GS、BS AS 将所有颜色乘以源颜色。
gl.ONE_MINUS_SRC_COLOR 1-RS、1-GS、1-BS 1-AS 将所有颜色乘以 1 减去每个源颜色。
gl.DST_COLOR RD、GD、BD AD 将所有颜色乘以目标颜色。
gl.ONE_MINUS_DST_COLOR 1-RD、1-GD、1-BD 1-AD 将所有颜色乘以 1 减去每个目标颜色。
gl.SRC_ALPHA AS、AS、AS AS 将所有颜色乘以源 Alpha 颜色。
gl.ONE_MINUS_SRC_ALPHA 1-AS、1-AS、1-AS 1-AS 将所有颜色乘以 1 减去源 Alpha 颜色。
gl.DST_ALPHA AD、AD、AD AD 将所有颜色乘以目标 Alpha 颜色。
gl.ONE_MINUS_DST_ALPHA 1-AD、1-AD、1-AD 1-AD 将所有颜色乘以 1 减去目标 Alpha 颜色。
gl.CONSTANT_COLOR RC、GC、BC AC 将所有颜色乘以一个常量颜色。
gl.ONE_MINUS_CONSTANT_COLOR 1-RC、1-GC、1-BC 1-AC 将所有颜色乘以 1 减去一个常量颜色。
gl.CONSTANT_ALPHA AC、AC、AC AC 将所有颜色乘以一个常量 Alpha 值。
gl.ONE_MINUS_CONSTANT_ALPHA 1-AC、1-AC、1-AC 1-AC 将所有颜色乘以 1 减去一个常量 Alpha 值。
gl.SRC_ALPHA_SATURATE min(AS, 1 - AD), min(AS, 1 - AD), min(AS, 1 - AD) 1 将 RGB 颜色乘以源 Alpha 颜色与 1 减去目标 Alpha 颜色中较小者。Alpha 值乘以 1。

示例

要使用混合函数,您首先需要通过带有参数 gl.BLENDWebGLRenderingContext.enable() 来激活混合。

js
gl.enable(gl.BLEND);
gl.blendFuncSeparate(gl.SRC_COLOR, gl.DST_COLOR, gl.ONE, gl.ZERO);

要获取当前的混合函数,请查询 BLEND_SRC_RGBBLEND_SRC_ALPHABLEND_DST_RGBBLEND_DST_ALPHA 常量,它们会返回一个混合函数常量。

js
gl.enable(gl.BLEND);
gl.blendFuncSeparate(gl.SRC_COLOR, gl.DST_COLOR, gl.ONE, gl.ZERO);
gl.getParameter(gl.BLEND_SRC_RGB) === gl.SRC_COLOR;
// true

规范

规范
WebGL 规范
# 5.14.3

浏览器兼容性

另见