首页 > 解决方案 > OpenGL 是否有 glStencilMask 的默认值?

问题描述

出于利益考虑,我很好奇 glStencilMask 和 glStencilMaskSeparate (和类似的)是否具有默认值,或者它们是否已定义实现,或者是否未定义。

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

稍微相关:我记得在某处读过,在 nvidia 卡上您不必设置活动纹理,默认情况下它为零,但 AMD 卡要求您设置它,否则您会得到垃圾结果。这让我想知道这是否是同一件事(模板的东西恰好对我有用,但只是偶然)并且没有设置它我一直在玩危险的游戏,或者如果不是这种情况。

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

标签: opengl

解决方案


的初始状态glStencilMask被明确指定。最初,掩码全为 1。

OpenGL 4.6 API Core Profile Specification - 17.4.2 缓冲区更新的精细控制;第 522 页

void StencilMask( uint mask );
void StencilMaskSeparate( enum face, uint mask );

控制将特定位写入模板平面。
掩码的最低有效 s 位,其中 s 是模板缓冲区中的位数,指定一个整数掩码。在此掩码中出现 1 时,写入模板缓冲区中的相应位;出现 0 时,不写入该位。

[...]

在初始状态下,整数掩码都是 1,控制深度值和 RGBA 分量写入的位也是如此。


推荐阅读