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函式可以擷取下列錯誤碼。

名稱 意義
GL_INVALID_ENUM
failzfailzpass 是六個已定義常數值以外的任何值。
GL_INVALID_OPERATION
對 glBegin 的呼叫與 glEnd的對應呼叫之間呼叫函式。

備註

Stenciling,例如 z緩衝,可啟用和停用每個圖元的繪圖。 您可以使用 OpenGL 繪圖基本類型繪製樣板平面,然後使用樣板平面來遮罩螢幕的部分,然後轉譯幾何和影像。 多通轉譯演算法中通常會使用 Stenciling 來達成特殊效果,例如解碼、大綱和實心幾何轉譯。

樣板測試會根據樣板緩衝區中值與參考值之間的比較結果,有條件地排除圖元。 使用 glEnableglDisable 呼叫啟用測試,且具有引數GL_STENCIL_TEST,並使用 glStencilFunc進行控制。

glStencilOp函式會採用三個引數,指出啟用 stenciling 時,預存樣板值會發生什麼情況。 如果樣板測試失敗,則不會對圖元的色彩或深度緩衝區進行任何變更,而且 失敗 會指定樣板緩衝區內容會發生什麼情況。

樣板緩衝區值會被視為不帶正負號的整數。 遞增和遞減時,值會限制為 0 和 2n 1,其中 n 是查詢GL_STENCIL_BITS所傳回的值。

glStencilOp的其他兩個引數指定樣板緩衝區動作應該後續深度緩衝區測試成功 (zpass) 或失敗 (zfail) 。 (請參閱 glDepthFunc.) 使用與 失敗相同的六個符號常數來指定。 請注意,當沒有深度緩衝區,或未啟用深度緩衝區時, 就會忽略 zfail 。 在這些情況下,當樣板測試失敗並分別通過時, failzpass 會指定樣板動作。

一開始會停用樣板測試。 如果沒有樣板緩衝區,則不會進行任何樣板修改,而且樣板測試一律會通過,而不論 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 [僅限傳統型應用程式]
標頭
Gl.h
程式庫
Opengl32.lib
DLL
Opengl32.dll

另請參閱

glAlphaFunc

glBegin

glBlendFunc

glDepthFunc

glEnable

glEnd

glIsEnabled

glLogicOp

glStencilFunc