我想渲染深度缓冲区来做一些漂亮的阴影映射。我的绘图代码虽然包含许多着色器开关。如果我设置glColorMask(0,0,0,0)
并保留所有着色器程序,纹理和其他原样,并仅渲染深度缓冲区,是否可以?我的意思是,如果glColorMask禁用了“颜色分量的写入” ,这是否意味着将不对每个片段着色进行?
最佳答案
为了渲染阴影贴图,通常需要将深度纹理(最好是平方和2的幂,因为立体声驱动程序以此作为提示!)绑定(bind)到FBO,并对所有内容使用一个唯一的着色器(尽可能简单)。您不希望附加颜色缓冲区,因为您根本对颜色不感兴趣,并且它给ROP带来了不必要的压力(此外,某些硬件可以仅使用深度渲染就可以使速度加倍或更多)。您不想在许多着色器之间切换。
根据您是执行“经典”阴影映射,还是执行更复杂的操作(例如指数阴影映射),您将使用的着色器尽可能简单(恒定颜色,不进行深度写入),或执行某些操作(适度)深度)计算,但是您通常不希望执行任何颜色计算,因为这将意味着不必要的计算,因此将不会以任何方式显示。
关于c++ - 关于glColorMask及其工作的快速问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4949304/