OpenGL是否具有glStencilMask的默认值?

时间:2019-02-15 19:21:13

标签: opengl

出于兴趣,我很好奇glStencilMask和glStencilMaskSeparate(以及类似的值)是否具有默认值,或者它们是否是实现定义的,或者它们是否未定义。

我认为明智的做法始终是一开始就设置好它们,但是我很好奇它们是否只是巧合地“起作用”,或者实际上是否设置了默认值。

稍微相关:我记得在某个地方读过,在nvidia卡上您不必设置活动纹理,默认情况下它为零,但是AMD卡要求您设置它,否则您会得到垃圾结果。这使我想知道这是否是同一件事(模具材料刚好对我有用,只是偶然),而没有设置它我就一直在玩危险游戏,或者不是这种情况。

我通过OpenGL规范[第17.4.2节]查找了这些函数的定义,但无法解决我的问题的答案。

1 个答案:

答案 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组件编写。