glStencilOp 函式
glStencilOp函式會設定樣板測試動作。
語法
void WINAPI glStencilOp(
GLenum fail,
GLenum zfail,
GLenum zpass
);
參數
-
失敗
-
樣板測試失敗時要採取的動作。 接受下列六個符號常數。
值 意義 - GL_KEEP
保留目前的值。 - GL_ZERO
將樣板緩衝區值設定為零。 - GL_REPLACE
將樣板緩衝區值設定為 ref,如 glStencilFunc所指定。 - GL_INCR
遞增目前的樣板緩衝區值。 限制為可表示的最大不帶正負號值。 - GL_DECR
遞減目前的樣板緩衝區值。 限制為零。 - GL_INVERT
位反轉目前的樣板緩衝區值。 -
zfail
-
樣板測試通過時樣板動作,但深度測試失敗。 接受與失敗相同的符號常數 。
-
zpass
-
樣板測試和深度測試通過時,或是樣板測試通過且未啟用深度緩衝區或深度測試時,樣板動作。 接受與 失敗相同的符號常數。
傳回值
此函式不會傳回值。
錯誤碼
glGetError函式可以擷取下列錯誤碼。
名稱 | 意義 |
---|---|
|
fail、 zfail或 zpass 是六個已定義常數值以外的任何值。 |
|
在 對 glBegin 的呼叫與 glEnd的對應呼叫之間呼叫函式。 |
備註
Stenciling,例如 z緩衝,可啟用和停用每個圖元的繪圖。 您可以使用 OpenGL 繪圖基本類型繪製樣板平面,然後使用樣板平面來遮罩螢幕的部分,然後轉譯幾何和影像。 多通轉譯演算法中通常會使用 Stenciling 來達成特殊效果,例如解碼、大綱和實心幾何轉譯。
樣板測試會根據樣板緩衝區中值與參考值之間的比較結果,有條件地排除圖元。 使用 glEnable 和 glDisable 呼叫啟用測試,且具有引數GL_STENCIL_TEST,並使用 glStencilFunc進行控制。
glStencilOp函式會採用三個引數,指出啟用 stenciling 時,預存樣板值會發生什麼情況。 如果樣板測試失敗,則不會對圖元的色彩或深度緩衝區進行任何變更,而且 失敗 會指定樣板緩衝區內容會發生什麼情況。
樣板緩衝區值會被視為不帶正負號的整數。 遞增和遞減時,值會限制為 0 和 2n 1,其中 n 是查詢GL_STENCIL_BITS所傳回的值。
glStencilOp的其他兩個引數指定樣板緩衝區動作應該後續深度緩衝區測試成功 (zpass) 或失敗 (zfail) 。 (請參閱 glDepthFunc.) 使用與 失敗相同的六個符號常數來指定。 請注意,當沒有深度緩衝區,或未啟用深度緩衝區時, 就會忽略 zfail 。 在這些情況下,當樣板測試失敗並分別通過時, fail 和 zpass 會指定樣板動作。
一開始會停用樣板測試。 如果沒有樣板緩衝區,則不會進行任何樣板修改,而且樣板測試一律會通過,而不論 glStencilOp的任何呼叫為何。
下列函式會擷取 與 glStencilOp相關的資訊:
glGet with argument GL_STENCIL_FAIL
glGet 與引數GL_STENCIL_PASS_DEPTH_PASS
glGet with argument GL_STENCIL_PASS_DEPTH_FAIL
glGet 與引數GL_STENCIL_BITS
glIsEnabled with argument GL_STENCIL_TEST
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 |
Windows 2000 Server [僅限傳統型應用程式] |
標頭 |
|
程式庫 |
|
DLL |
|