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

瀏覽器相容性

另見