2011-02-09 79 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,但你不會在這種情況下:)