OES_draw_buffers_indexed: blendFuncSeparateiOES() 方法

Baseline 已广泛支持

此功能已成熟,可跨多个设备和浏览器版本使用。自 2022 年 12 月起,所有浏览器均已提供此功能。

OES_draw_buffers_indexed WebGL 扩展的 blendFuncSeparateiOES() 方法定义了为特定绘制缓冲区分别混合 RGB 和 Alpha 分量时使用的函数。

有关同时设置 RGB 和 Alpha 的信息,请参阅 OES_draw_buffers_indexed.blendFunciOES();有关此方法的 WebGL 1 版本,请参阅 WebGLRenderingContext.blendFuncSeparate()

语法

js
blendFuncSeparateiOES(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)

参数

buf

一个整数 i,指定与常量 gl.DRAW_BUFFERi 关联的绘制缓冲区。请参阅 WebGL 绘制缓冲区常量

srcRGB

一个 GLenum,指定红色、绿色和蓝色 (RGB) 源混合因子的乘数。接受与 WebGLRenderingContext.blendFuncSeparate() 中的 srcRGB 参数相同的枚举值。

dstRGB

一个 GLenum,指定红色、绿色和蓝色 (RGB) 目标混合因子的乘数。接受与 WebGLRenderingContext.blendFuncSeparate() 中的 dstRGB 参数相同的枚举值。

srcAlpha

一个 GLenum,指定 Alpha 源混合因子的乘数。接受与 WebGLRenderingContext.blendFuncSeparate() 中的 srcAlpha 参数相同的枚举值。

dstAlpha

一个 GLenum,指定 Alpha 目标混合因子的乘数。接受与 WebGLRenderingContext.blendFuncSeparate() 中的 srcAlpha 参数相同的枚举值。

返回值

无(undefined)。

异常

  • 如果 buf 不是有效值,则会抛出 gl.INVALID_VALUE 错误。
  • 如果 srcRGBdstRGBsrcAlphadstAlpha 不是可能的值之一,则会抛出 gl.INVALID_ENUM 错误。
  • WebGLRenderingContext.blendFuncSeparate() 相同的混合限制适用:如果常量颜色和常量 Alpha 值同时用作源和目标因子,则会抛出 gl.INVALID_ENUM 错误。

示例

设置和获取混合函数

以下代码设置绘制缓冲区 gl.DRAW_BUFFER0(当 buf 为 0 时调用)和 gl.DRAW_BUFFER1(当 buf 为 1 时调用)的混合函数。

js
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,
);

要获取 gl.DRAW_BUFFER0gl.DRAW_BUFFER1 绘制缓冲区的混合函数,请使用 WebGL2RenderingContext.getIndexedParameter() 查询 BLEND_SRC_RGBBLEND_SRC_ALPHABLEND_DST_RGBBLEND_DST_ALPHA 常量。

js
// 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);

规范

规范
WebGL OES_draw_buffers_indexed 扩展规范

浏览器兼容性

另见