4-2模板测试

45 阅读1分钟

模板测试跟深度测试一样,通过模板缓冲来丢弃片段

模板缓冲首先全部清为0,然后在需要渲染的片段填充入1,这样渲染的时候除了1之外的内容都会被丢弃

glEnable(GL_STENCIL_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glStencilMask(0xFF); // 每一位写入模板缓冲时都保持原样 
glStencilMask(0x00); // 每一位在写入模板缓冲时都会变成0(禁用写入)

配置模板测试

glStencilFunc(GLenum func, GLint ref, GLuint mask)

设置模板测试的行为

glStencilOp(GLenum sfail, GLenum dpfail, GLenum dppass)
GL_KEEP保持当前储存的模板值
GL_ZERO将模板值设置为0
GL_REPLACE将模板值设置为glStencilFunc函数设置的ref
GL_INCR如果模板值小于最大值则将模板值加1
GL_INCR_WRAPGL_INCR一样,但如果模板值超过了最大值则归零
GL_DECR如果模板值大于最小值则将模板值减1
GL_DECR_WRAPGL_DECR一样,但如果模板值小于0则将其设置为最大值
GL_INVERT按位翻转当前的模板缓冲值