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

瀏覽器相容性

另見