2016-12-05 113 views
0

我想存儲和更新紋理中的信息。所以我的想法是,我用當前的信息創建一個新的紋理。在將其存儲在渲染過程中時,我實際上想要從相同像素中讀取信息並存儲兩個值的加權平均值。所以呈現給該像素的值以及該像素上已有的值。讀取和寫入一個紋理(OpenGL)

現在我經常讀到,我無法讀取和寫入相同的紋理。現在我的問題是,可能有可能嗎?如果不是,我應該在渲染步驟之前複製紋理信息並將副本傳遞給着色器?如果是這樣,我如何複製紋理?或者我應該爲複製做一個額外的渲染步驟?

回答

2

我在這裏看到兩個可能的選項,這取決於混合式

  • Alpha混合:如果所使用的公式可以映射到的glBlendFunc功能之一,那麼這是要走的路。如果你想使用線性因子來存儲和新值,這應該是可能的。這也是我期望獲得最佳性能的選項。

  • 圖像加載存儲:使用此方法,可以同時讀取和寫入相同的紋理(see here)。在這裏性能通常會非常糟糕,您將不得不使用映像原子操作來確保同一位置的多個片段始終讀取正確的值。

複製紋理會,在我看來,只有當你渲染圖像,然後在它之後執行一個加權平均計算工作(否則你將不得不每家店操作後紋理複製)。但是如果是這樣的話,可以簡單地將平均計算的結果渲染成不同的紋理,並且完全避免複製輸入數據的所有麻煩。

0

如果使用擴展名是一個選項,您可以使用NV_texture_barrier,它允許從相同紋理進行書寫和讀取。

+0

或者您可以使用核心[紋理屏障功能已經存在了一年多了](https://www.opengl.org/wiki/Memory_Model#Texture_barrier)。 –