看书籍或资料往往还是云里雾里的,这里写一下自己的理解。希望对需要的人有帮助。
简而言之:
- 模板缓冲区和帧缓冲区一样大
- 模板缓冲区初始状态是什么?
在glClearBuffer的时候清空,所以初始状态是全为0。 - 模板测试什么时候进行?
每一次你调用绘制函数的时候都会进行模板测试。一次绘制后,像素着色器会输出像素,这个像素是否写入到颜色缓冲区,取决于模板测试。
新像素的模板值:本次绘制产生的图像 ,根据每个像素是否有内容或是否被更新,都有一个模板值与之对应。凡是有像素点的地方,像素点的模板值为1;没有像素点的地方,模板值为0。
新像素的模板值和模板缓冲区对应位置的旧值进行一次运算,就叫模板测试,具体的运算规则可以通过glStencilFunc来配置。在配置的运算规则下,若通过,则像素会被写到颜色缓冲区中,即将被刷新到屏幕中;若不通过,则此像素会被直接丢弃,不会更新到屏幕中。 - 模板缓冲区什么时候被更新?
模板缓冲区更新需要打开开关glEnable(GL_DEPTH_TEST)。
模板测试完成后,进行模板缓冲区更新。
更新操作具体怎样进行,和模板测试的结果有关,可以通过函数glStencilOp来配置,成功时写入什么,失败时写入什么。
最后说一句:
模板缓冲区就是一个过滤网,就是用来过滤像素的。