2013-05-13 135 views
2

有沒有辦法從當前渲染的幀緩衝區中讀取片段?讀取當前幀緩衝區

所以,我正在尋找一種方式來閱讀這是對當前片段可能會覆蓋的地方片段顏色信息。所以,以前渲染片段的確切位置。

我發現某些EXT_擴展着色器添加gl_FragData和gl_LastFragData,但如果是我所需要的,可能有人解釋如何使用這些?

我期待任一OpenGL或OpenGL ES 2.0的溶液。

編輯:

所有的時間我正在尋找解決方案,讓我有某種閱讀&寫「制服」,從着色器訪問。對於那些尋找類似的東西的人來說,OpenGL版本4.3+支持imagebuffer存儲類型。它們允許同時讀取和寫入它們,並且與計算着色器結合,它們被證明是非常強大的工具。

+2

你的意思是桌面OpenGL或OpenGL ES的產生? – 2013-05-13 21:16:37

+0

它並不重要。任何會做。 – 2013-05-13 22:43:27

回答

5

你的問題似乎相當混亂。你的問題(第一句)的

部分會詢問您是否可以從片段着色器的幀緩衝區讀取。答案是,一般不會。有an OpenGL ES 2.0 extension可以讓你這樣做,但它只支持某些硬件。在桌面GL 4.2+中,您可以使用arbitrary image load/store獲得相同的效果。但是你不能渲染那個圖像了;您必須使用圖像存儲功能編寫數據。

gl_LastFragData非常簡單:它是framebuffer中樣本的顏色,將被此片段着色器覆蓋。如果可以的話,你可以用它來做。

您的問題的第二部分(第二段)完全是不同的問題。在那裏,你正在詢問有關從未將寫入幀緩衝區的片段。您無法從片段着色器讀取;你只能閱讀圖像。如果一個片段沒有通過深度測試,那麼它的數據永遠不會呈現給圖像。所以你不能讀它。

+0

你有鏈接gl_LastFragData的進一步解釋,也許它的用法?什麼是依賴關係?它是否支持webGL?這似乎是我需要的,但我不能谷歌它。 :/ – 2013-05-13 22:52:36

+0

@AbstractAlgorithm:它來自我鏈接到的擴展。依賴關係是......它是一個擴展。如果擴展名不受支持,則不能使用它。它的用法是......如果你想知道正在寫入的樣本的顏色,你可以閱讀它。你知道,像任何其他變量。這只是一個變量;這不是魔術。這不是在其他變量具有「用法」的方式之外具有「用法」的東西。我不確定你在這裏找什麼。 – 2013-05-13 23:42:08

1

對於大多數的nVidia硬件,您可以使用GL_NV_texture_barrier擴展從,因此目前綁定到幀緩存紋理讀取。但是記住,你將無法讀取數據更近比上繪製調用