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 函数可以检索以下错误代码。
名称 | 含义 |
---|---|
|
fail、 zfail 或 zpass 是六个定义的常量值以外的任何值。 |
|
在对 glBegin 的调用和对 glEnd 的相应调用之间调用了函数。 |
备注
与 z 缓冲一样,Stenciling 启用和禁用基于每个像素的绘图。 使用 OpenGL 绘图基元绘制到模具平面中,然后使用模具平面来屏蔽屏幕部分,然后呈现几何图形和图像。 Stenciling 通常用于多通道渲染算法,以实现特殊效果,例如贴纸、大纲和建设性实体几何图形渲染。
模具测试根据模具缓冲区中的值与引用值之间的比较结果有条件地消除像素。 该测试通过 glEnable 和 glDisable 调用(具有参数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 [仅限桌面应用] |
标头 |
|
库 |
|
DLL |
|