WebGLRenderingContext: stencilOp() 方法

Baseline 已广泛支持

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

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

WebGL API 的 WebGLRenderingContext.stencilOp() 方法用于设置正面和背面片元测试的操作。

语法

js
stencilOp(fail, zfail, zpass)

参数

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.stencilOp(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

浏览器兼容性

另见