2012-06-08 103 views
2

我正在使用附加的FBO和貼圖進行「渲染到紋理」功能。glsl更新2D紋理的特定行

我的問題是,在片段着色器中,我不知道如何寫入特定的2D紋理行。我確實有哪些行的信息(用統一的浮點變量表示),但我不知道如何在那裏繪製。

這可能嗎?或者什麼是知道片段着色器在哪裏的好方法?

我的全局想法是從一個頂點到底部將一維紋理演變爲二維紋理。每個進化步驟都是通過片段着色器(使用紋理乒乓方法,使用2個FBO)來計算的。

回答

1

你可以在片段着色器中使用discard;來丟棄你不想要的片段。類似於

if (gl_FragCoord.y != row_to_keep) 
    discard; 

然後正常渲染你的場景,最後你只會輸出一行輸出。

+0

gl_FragCoord.y正是我所需要的,謝謝 – labotsirc

1

我認爲片段着色器不是這個地方。

如果您只想寫入FBO的單行,您不能將繪圖調用的頂點設置爲僅與要繪製的像素重疊?

+0

我不知道你的意思。在繪製每個進化步驟的同時繼續移動一個小矩形? – labotsirc

+0

如果您想要繪製到幀緩衝區的1像素高1D紋理,請生成1像素高,全屏寬度的四邊形,將其轉換爲要繪製的行的高度並繪製。然後它將只對該行中的像素執行片段着色器。 – Tim

+0

我明白了。此外,我還需要在較舊的行中繪製較舊的狀態,這是一直保持累積的狀態。讓我回答這最後一部分:如果我刪除了glClear指令,那麼我最終可能會在每次渲染過程中累積一個幀?如果這是真的,我認爲你的想法解決了這個問題。 – labotsirc