WebGLRenderingContext: stencilOpSeparate() 方法

Baseline 已广泛支持

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

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

WebGLRenderingContext.stencilOpSeparate() 方法是 WebGL API 的一部分,用于设置正面和/或背面剔除的模板测试操作。

语法

js
stencilOpSeparate(face, fail, zfail, zpass)

参数

face

一个 GLenum,指定是更新正面还是背面模板状态。可能的值为:

  • gl.FRONT
  • gl.BACK
  • gl.FRONT_AND_BACK
fail

一个 GLenum,指定模板测试失败时使用的函数。默认值为 gl.KEEP

zfail

一个 GLenum,指定模板测试通过但深度测试失败时使用的函数。默认值为 gl.KEEP

zpass

一个 GLenum,指定当模板测试和深度测试都通过时,或者当模板测试通过且没有深度缓冲区或禁用了深度测试时使用的函数。默认值为 gl.KEEP

返回值

无(undefined)。

常量

gl.KEEP

保留当前值。

gl.ZERO

将模板缓冲区设置为 0。

gl.REPLACE

将模板缓冲区设置为由 WebGLRenderingContext.stencilFunc() 指定的参考值。

gl.INCR

增加当前模板缓冲区值。钳制到可表示的最大无符号值。

gl.INCR_WRAP

增加当前模板缓冲区值。在增加到可表示的最大无符号值时,将模板缓冲区值回绕到零。

gl.DECR

减少当前模板缓冲区值。钳制到 0。

gl.DECR_WRAP

减少当前模板缓冲区值。在减少到 0 时,将模板缓冲区值回绕到可表示的最大无符号值。

gl.INVERT

按位反转当前模板缓冲区值。

示例

默认情况下,模板测试是禁用的。要启用或禁用模板测试,请使用带有参数 gl.STENCIL_TESTenable()disable() 方法。

js
gl.enable(gl.STENCIL_TEST);
gl.stencilOpSeparate(gl.FRONT, gl.INCR, gl.DECR, gl.INVERT);

要获取关于模板和深度通过或失败的当前信息,请使用 getParameter() 查询以下常量。

js
gl.getParameter(gl.STENCIL_FAIL);
gl.getParameter(gl.STENCIL_PASS_DEPTH_PASS);
gl.getParameter(gl.STENCIL_PASS_DEPTH_FAIL);
gl.getParameter(gl.STENCIL_BACK_FAIL);
gl.getParameter(gl.STENCIL_BACK_PASS_DEPTH_PASS);
gl.getParameter(gl.STENCIL_BACK_PASS_DEPTH_FAIL);
gl.getParameter(gl.STENCIL_BITS);

规范

规范
WebGL 规范
# 5.14.3

浏览器兼容性

另见