2012-01-12 53 views
2

我試着去理解一個片段着色器是如何多采樣渲染過程中調用,我已經仔細閱讀規格,但我是個有點糊塗..多重採樣和片段着色器330

我建立一個多重採樣FBO用顏色和深度/模板renderbuffers ..細

我設置一個簡單的1線的頂點着色器只是用於變換和另外1行片段着色器剛剛返回黑色..和其細

我畫一條線 - 行顯示平滑..罰款

現在,如果在片段着色器中,我不是一味地返回黑色,而是從多重採樣紋理中讀取紋理,總是讀取樣本編號0(即黑色),我得到一條鋸齒狀的線。

什麼是簡單的myoutcolor=vec4(0.0)myoutcolor=texelFetch(mysampler2DMS,...,0)之間的區別?

一個片段着色器是在樣品級執行,只有當它使用靜態gl_SampleIDgl_Samplemask[],或具有「樣品」的存儲限定符..(在所有這些情況下,這意味着GLSL #version 400或以上)的規格的狀態,否則它在片段級別執行..

但是,這怎麼可能?在上面的例子中,即使我總是返回相同的顏色,我也得到了平滑的線條,所以我認爲片段着色器總是在多采樣幀緩衝區中以樣本級別執行。另一方面,如果不是這樣,我應該得到平滑的結果,即使總是從MS紋理返回相同的樣本..

有人可以幫我弄清楚這一點嗎?

PS:即時通訊目前使用的#Version 330,但我發現,每多級採樣感知語句ID需要正確處理MS(gl_SampleIDgl_Samplemask[],樣品..)僅在GLSL 400或以上支持..所以,什麼GLSL 330正確支持多重採樣?我如何處理GLSL 330中的MS紋理?

+0

你正在運行什麼顯卡和驅動程序版本? – 2012-01-12 20:24:52

+0

OpenSUSE x64 12.1上的GT330M,驅動程序290.x – user815129 2012-01-13 05:29:24

+0

驅動程序(剛選中)290.10,您是否懷疑驅動程序問題?無論如何,我想我應該得到平滑的結果,你同意嗎? – user815129 2012-01-13 06:45:25

回答

1
在上面的例子中

,我得到了一個平滑的線條,即使我總是返回相同的顏色

,因爲這是多級採樣

多重採樣是關於每個像素調用一次FS並將該值分佈到該原始像素區域內的樣本上。因此,如果對基元邊緣上的像素執行FS,則結果將僅分配給該像素的一些樣本。