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

模具测试通过但深度测试失败时执行模具操作。 接受与 fail 相同的符号常量

zpass

当模具测试和深度测试都通过时,或者当模具测试通过并且没有深度缓冲区或深度测试未启用时,模具操作。 接受与 fail 相同的符号常量。

返回值

此函数不返回值。

错误代码

glGetError 函数可以检索以下错误代码。

名称 含义
GL_INVALID_ENUM
failzfailzpass 是六个定义的常量值以外的任何值。
GL_INVALID_OPERATION
在对 glBegin 的调用和对 glEnd 的相应调用之间调用了函数。

备注

z 缓冲一样,Stenciling 启用和禁用基于每个像素的绘图。 使用 OpenGL 绘图基元绘制到模具平面中,然后使用模具平面来屏蔽屏幕部分,然后呈现几何图形和图像。 Stenciling 通常用于多通道渲染算法,以实现特殊效果,例如贴纸、大纲和建设性实体几何图形渲染。

模具测试根据模具缓冲区中的值与引用值之间的比较结果有条件地消除像素。 该测试通过 glEnableglDisable 调用(具有参数GL_STENCIL_TEST)启用,并使用 glStencilFunc 进行控制。

glStencilOp 函数采用三个参数,这些参数指示启用 stenciling 时存储的模具值会发生什么情况。 如果模具测试失败,则不会更改像素的颜色或深度缓冲区, 如果失败 ,则指定模具缓冲区内容会发生什么情况。

模具缓冲区值被视为无符号整数。 递增和递减时,值将固定为 0 和 2n 1,其中 n 是查询GL_STENCIL_BITS返回的值。

glStencilOp 的其他两个参数指定如果后续深度缓冲区测试成功 (zpass) 或 zfail) 失败 (模具缓冲区操作。 (请参阅 glDepthFunc.) 使用与 fail 相同的六个符号常量指定它们。 请注意,当没有深度缓冲区或未启用深度缓冲区时,将忽略 zfail 。 在这些情况下,当模具测试失败和通过时,分别指定 失败zpass 模具操作。

最初禁用模具测试。 如果没有模具缓冲区,则不会进行模具修改,并且模具测试始终通过,而不考虑对 glStencilOp 的任何调用。

以下函数检索与 glStencilOp 相关的信息:

带参数GL_STENCIL_FAIL的 glGet

带参数GL_STENCIL_PASS_DEPTH_PASS的 glGet

带参数GL_STENCIL_PASS_DEPTH_FAIL的 glGet

带参数GL_STENCIL_BITS的 glGet

glIsEnabled with argument GL_STENCIL_TEST

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Gl.h

Opengl32.lib
DLL
Opengl32.dll

另请参阅

glAlphaFunc

glBegin

glBlendFunc

glDepthFunc

glEnable

glEnd

glIsEnabled

glLogicOp

glStencilFunc