glStencilFunc - 设置模板测试的前后功能和参考值
glStencilFuncSeparate - 设置模板测试的前端和/或后端功能和参考值
void glStencilFunc( GLenum func,
GLint ref,
GLuint mask);
void glStencilFuncSeparate( GLenum face,
GLenum func,
GLint ref,
GLuint mask);
face
指定是否更新前和/或后模板状态。三个符号常量有效:GL_FRONT,GL_BACK和GL_FRONT_AND_BACK。
func
指定测试功能。八个符号常量有效:GL_NEVER,GL_LESS,GL_LEQUAL,GL_GREATER,GL_GEQUAL,GL_EQUAL,GL_NOTEQUAL和GL_ALWAYS。初始值为GL_ALWAYS。
ref
指定模板测试的参考值。 ref被截断到[0,2^n - 1]的范围,其中n是模板缓冲器中的位平面数。初始值为0。
mask
指定在测试完成时与参考值和存储的模板值进行AND运算的掩码。初始值全是1。
与深度缓冲一样,模板测试可以在每个像素的基础上启用和禁用绘图。首先使用GL绘图基元绘制模板平面,然后使用模板平面渲染几何体和图像以屏蔽部分屏幕。 Stenciling通常用于多通道渲染算法以实现特殊效果,例如贴花,轮廓和构造性实体几何渲染。
模板测试基于参考值和模板缓冲器中的值之间的比较结果有条件地消除像素。要启用和禁用测试,请使用参数GL_STENCIL_TEST调用glEnable和glDisable。要根据模板测试的结果指定操作,请调用glStencilOp或glStencilOpSeparate。
可以有两组独立的func,ref和mask参数;一个影响面向后的多边形,另一个影响前面的多边形以及其他非多边形基元。 glStencilFunc将前后模板状态设置为相同的值。使用glStencilFuncSeparate将前后模板状态设置为不同的值。
func是一个符号常量,用于确定模板比较函数。它接受八个值中的一个,如下面的列表所示。 ref是在模板比较中使用的整数参考值。它被截断到[0,2^n - 1]的范围,其中n是模板缓冲器中的位平面数。mask与参考值和存储的模板值进行按位AND运算。
如果模板表示存储在相应模板缓冲区位置中的值,则以下列表显示可由func指定的每个比较函数的效果。仅当比较成功时,像素才会传递到光栅化过程中的下一个阶段(请参阅glStencilOp)。所有测试都将模板值视为[0,2^n - 1]范围内的无符号整数,其中n是模板缓冲区中的位平面数。
func接受以下值:
GL_NEVER
总是失败。
GL_LESS
( ref & mask ) < ( stencil & mask ) 则通过。
GL_LEQUAL
( ref & mask ) <= ( stencil & mask )则通过。
GL_GREATER
( ref & mask ) > ( stencil & mask )则通过。
GL_GEQUAL
( ref & mask ) >= ( stencil & mask )则通过。
GL_EQUAL
( ref & mask ) = ( stencil & mask )则通过。
GL_NOTEQUAL
( ref & mask ) != ( stencil & mask )则通过。
GL_ALWAYS
总是通过。
最初,模板测试被禁用。如果没有模板缓冲区,则不会发生模板修改,就好像模板测试总是通过一样。
glStencilFunc与调用glStencilFuncSeparate并将face设置为GL_FRONT_AND_BACK相同。
GL_INVALID_ENUM:face不是GL_FRONT,GL_BACK或GL_FRONT_AND_BACK
GL_INVALID_ENUM:func不是八个接受值之一。
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,glStencilMask,glStencilMaskSeparate,glStencilOp,glStencilOpSeparate
https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glStencilFunc.xml
https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glStencilFuncSeparate.xml
https://blog.csdn.net/flycatdeng
Copyright © 1991-2006 Silicon Graphics, Inc.本文档的许可是根据SGI Free Software B License.详见http://oss.sgi.com/projects/FreeB/.
Android,OpenGL ES,图形学