glStencilOp 函式

GlStencilOp 函數會設定樣板測試動作。

語法

void WINAPI glStencilOp(
   GLenum fail,
   GLenum zfail,
   GLenum zpass
);

參數

失敗

樣板測試失敗時所要採取的動作。 接受下列六個符號常數。

意義
GL _ 保留
保留目前的值。
GL _ 零
將樣板緩衝區值設定為零。
GL _ 取代
將樣板緩衝區值設定為 ref(如 glStencilFunc 所指定)。
GL _ 增量
遞增目前的樣板緩衝區值。 個至可表示的最大不帶正負號值。
GL _ OPERATORS.DECR
遞減目前的樣板緩衝區值。 個為零。
GL _ 反轉
以位反轉目前的樣板緩衝區值。

zfail

樣板測試通過時的樣板動作,但深度測試會失敗。 接受與失敗相同的符號常數

zpass

樣板測試和深度測試成功時,或樣板測試通過,而且沒有啟用深度緩衝區或深度測試時的樣板動作。 接受與 失敗 相同的符號常數。

傳回值

此函式不會傳回值。

錯誤碼

GlGetError函式可以取出下列錯誤碼。

Name 意義
GL _ 無效 _ 列舉
failzfailzpass 是六個定義常數值以外的任何值。
GL _ 不正確 _ 操作
呼叫 glBegin 和對應的 glEnd呼叫之間呼叫了函數。

備註

Stenciling,例如 z 緩衝,可啟用和停用以每圖元為基礎的繪圖。 您可以使用 OpenGL 繪圖基本專案來繪製到樣板平面,然後轉譯幾何和影像,使用樣板平面來遮蔽畫面的部分。 Stenciling 通常用於 multipass 轉譯演算法,以達成特殊效果,例如 decals、大綱和具建設性的純幾何呈現。

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

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

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

GlStencilOp 指定樣板緩衝區動作的其他兩個引數,應該 (zpass) 或 (zfail) 失敗,才能執行後續深度緩衝區測試。 (請參閱 glDepthFunc。 ) 使用相同的六個符號常數來指定 失敗。 請注意,當沒有深度緩衝區或未啟用深度緩衝區時,就會忽略 zfail 。 在這些情況下,當樣板測試失敗並分別傳遞時,fail 和 zpass 指定樣板動作。

範本測試一開始會停用。 如果沒有任何樣板緩衝區,則不會發生任何樣板修改,也就像樣板測試一律通過,而不考慮任何 glStencilOp 呼叫。

下列函式會取出與 glStencilOp 相關的資訊:

具有引數 GL 樣板的 glGet _ _ 失敗

具有引數 GL _ 樣板 _ 通過 _ 深度 _ 傳遞的 glGet

具有引數 GL _ 樣板 _ 通過 _ 深度 _ 失敗的 glGet

具有引數 GL _ 樣板 _ 位的 glGet

具有引數 GL _ 樣板 _ 測試的 glIsEnabled

規格需求

需求
最低支援的用戶端
Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器
Windows 2000 Server [僅限傳統型應用程式]
標頭
Gl
程式庫
Opengl32 .lib
DLL
Opengl32.dll

另請參閱

glAlphaFunc

glBegin

glBlendFunc

glDepthFunc

glEnable

glEnd

glIsEnabled

glLogicOp

glStencilFunc