模板测试跟深度测试一样,通过模板缓冲来丢弃片段
模板缓冲首先全部清为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_WRAP | 与GL_INCR一样,但如果模板值超过了最大值则归零 |
| GL_DECR | 如果模板值大于最小值则将模板值减1 |
| GL_DECR_WRAP | 与GL_DECR一样,但如果模板值小于0则将其设置为最大值 |
| GL_INVERT | 按位翻转当前的模板缓冲值 |