名称
glStencilOp- 设置正面和背面模板测试操作
glStencilOpSeparate - 设置前端和/或后端模板测试操作
C规范
void glStencilOp( GLenum sfail,
GLenum dpfail,
GLenum dppass);
void glStencilOpSeparate( GLenum face,
GLenum sfail,
GLenum dpfail,
GLenum dppass);
参数
face
指定是否更新前和/或后模板状态。三个符号常量有效:GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。
sfail
指定模板测试失败时要执行的操作。接受八个符号常量:GL_KEEP,GL_ZERO,GL_REPLACE,GL_INCR,GL_INCR_WRAP,GL_DECR,GL_DECR_WRAP和GL_INVERT。初始值为GL_KEEP。
dpfail
指定模板测试通过时的模板操作,但深度测试失败。 dpfail接受与sfail相同的符号常量。初始值为GL_KEEP。
dppass
指定模板测试和深度测试通过时的模板操作,或模板测试通过时的模板操作,并且未启用深度缓冲或深度测试。 dppass接受与sfail相同的符号常量。初始值为GL_KEEP。
描述
与深度缓冲一样,模板测试可以在每个像素的基础上启用和禁用绘图。首先使用GL绘图基元绘制模板平面,然后使用模板平面渲染几何体和图像以屏蔽部分屏幕。 Stenciling通常用于多通道渲染算法以实现特殊效果,例如贴花,轮廓和构造性实体几何渲染。
模板测试基于参考值和模板缓冲器中的值之间的比较结果有条件地消除像素。要启用和禁用测试,请使用参数GL_STENCIL_TEST调用glEnable和glDisable。要控制它,请调用glStencilFunc或glStencilFuncSeparate。
可以有两组独立的sfail,dpfail和dppass参数;一个影响面向后的多边形,另一个影响前面的多边形以及其他非多边形基元。 glStencilOp将前后模板状态设置为相同的值,就像调用glStencilOpSeparate并将face设置为GL_FRONT_AND_BACK一样。
glStencilOp/glStencilOpSeparate接受三个参数,指示在启用模板处理时存储的模板值会发生什么。如果模板测试失败,则不会更改像素的颜色或深度缓冲区,sfail指定模板缓冲区内容会发生什么。以下八个动作是可能的。
GL_KEEP
保持当前值。
GL_ZERO
将模板缓冲区值设置为0。
GL_REPLACE
将模板缓冲区值设置为ref,由glStencilFunc指定。
GL_INCR
增加当前模板缓冲区值。截断到最大的可表示无符号值。
GL_INCR_WRAP
增加当前模板缓冲区值。当递增最大可表示无符号值时,将模板缓冲区值包含到零。
GL_DECR
减少当前的模板缓冲区值。截断到0。
GL_DECR_WRAP
减少当前的模板缓冲区值。在将模板缓冲区值减小为零时,将模板缓冲区值包装到最大可表示无符号值。
GL_INVERT
按位反转当前模板缓冲区值。
模板缓冲区值被视为无符号整数。递增和递减时,值被钳位为[0,2^n - 1],其中n是查询GL_STENCIL_BITS返回的值。
glStencilOp/glStencilOpSeparate的另外两个参数指定模板缓冲区操作,这些操作取决于后续深度缓冲区测试是成功(dppass)还是失败(dpfail)(请参阅glDepthFunc)。使用与sfail相同的八个符号常量指定操作。请注意,如果没有深度缓冲区,或者未启用深度缓冲区,则会忽略dpfail。在这些情况下,sfail和dppass分别在模板测试失败和通过时指定模板操作。
注意
最初,模板测试被禁用。如果没有模板缓冲区,则不会发生模板修改,就好像模板测试总是通过一样。
错误
GL_INVALID_ENUM:face不是GL_FRONT,GL_BACK或GL_FRONT_AND_BACK
GL_INVALID_ENUM:sfail,dpfail或dppass是除八个定义的符号常量值之外的任何值。
相关Gets
glGet 参数GL_STENCIL_FUNC,GL_STENCIL_VALUE_MASK,GL_STENCIL_REF,GL_STENCIL_BACK_FUNC,GL_STENCIL_BACK_VALUE_MASK,GL_STENCIL_BACK_REF或GL_STENCIL_BITS
glIsEnabled 参数GL_STENCIL_TEST
另见
glBlendFunc,glDepthFunc,glEnable,glStencilFunc,glStencilFuncSeparate,glStencilMask,glStencilMaskSeparate
版权
https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glStencilOp.xml
https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glStencilOpSeparate.xml
https://blog.csdn.net/flycatdeng
Copyright © 1991-2006 Silicon Graphics, Inc.本文档的许可是根据SGI Free Software B License.详见http://oss.sgi.com/projects/FreeB/.