出于兴趣,我很好奇glStencilMask和glStencilMaskSeparate(以及类似的值)是否具有默认值,或者它们是否是实现定义的,或者它们是否未定义。
我认为明智的做法始终是一开始就设置好它们,但是我很好奇它们是否只是巧合地“起作用”,或者实际上是否设置了默认值。
稍微相关:我记得在某个地方读过,在nvidia卡上您不必设置活动纹理,默认情况下它为零,但是AMD卡要求您设置它,否则您会得到垃圾结果。这使我想知道这是否是同一件事(模具材料刚好对我有用,只是偶然),而没有设置它我就一直在玩危险游戏,或者不是这种情况。
我通过OpenGL规范[第17.4.2节]查找了这些函数的定义,但无法解决我的问题的答案。
答案 0 :(得分:3)
glStencilMask
的初始状态已明确指定。最初,掩码是全1。
OpenGL 4.6 API Core Profile Specification - 17.4.2 Fine Control of Buffer Updates; page 522:
void StencilMask( uint mask ); void StencilMaskSeparate( enum face, uint mask );
控制将特定位写入模板平面。
掩码的最低有效s位(其中s是模板缓冲区中的位数)指定整数掩码。在此掩码中出现1的位置,将写入模板缓冲区中的相应位;如果出现0,则不会写入该位。[...]
在初始状态下,整数掩码都是1 ,控制深度的位也是如此 值和RGBA组件编写。