2011-02-09 21 views
2

我想渲染深度缓冲区来做一些漂亮的阴影映射。我的绘图代码由许多着色器开关组成。如果我设置了glColorMask(0,0,0,0),并保留所有着色器程序,纹理和其他图形,并只渲染深度缓冲区,它会是'OK'吗?我的意思是,如果glColorMask禁用“写入颜色分量”,是否意味着每片段着色不会执行关于glColorMask及其工作的快速问题

回答

2

对于渲染阴影贴图,通常需要将深度贴图(最好是正方形和两个幂,因为立体声驱动程序将此作为提示!)绑定到FBO,并使用一个着色器(尽可能简单)为了一切。你不想附加一个颜色缓冲区,因为你根本对颜色不感兴趣,而且它给ROP带来了更多不必要的压力(另外,有些硬件可以仅使用深度渲染速度提高一倍或更多)。你不想在许多着色器之间切换。

根据您是否进行“经典”阴影映射或诸如指数阴影贴图等更复杂的操作,您将使用的着色器可能非常简单(常量颜色,无深度写入),或者对深度执行一些(适度复杂的)计算,但通常不需要执行任何颜色计算,因为这意味着无用的计算将不会以任何方式显示。

1

不,着色器程序独立于固定功能管线执行。设置glColorMask将不会影响着色器程序。

+0

因此,让即使是深度值,我应该切换到固定管道,然后绘制深度缓冲? – 2011-02-09 19:14:51

1

不,不管怎样片段操作都会被执行,但它们的结果将被零色彩掩码压扁。

如果您不希望执行某些片段操作 - 请使用正确的着色器程序,其中附加了一个空片段着色器,并将绘制缓冲区设置为GL_NONE。

还有另一种方法来禁用片段处理 - 使GL_RASTERIZER_DISCARD,但你不会在这种情况下:)