2017-07-17 136 views

回答

3

這是不可能的。如果你想品嚐着色器內的圖像,您有(一般)兩種可能性:

  1. 您可以使用一個描述符類型採樣圖像組合圖像採樣的描述符中設置。這樣你可以解決它,只要你喜歡。但是,在渲染過程中充當附件的圖像不能用於同一渲染過程中的這些描述符,而在這些過程中它們被用作附件。爲此,您需要結束渲染通道並啓動另一個渲染通道。在第二次渲染過程中,您可以使用這些圖像並從着色器中對其進行採樣。

  2. 如果您想要在渲染過程中使用圖像作爲附件,並且您想要在同一渲染過程中(但在後續子過程中)對這樣的圖像進行採樣,則只能使用輸入附件描述符(着色器內的subpassInput)。這樣您就不需要結束渲染過程並啓動另一個過程,但是您只能對與片段着色器的座標關聯的位置進行採樣。

    這個限制來自渲染高度平行的事實。下一個子通道的某些部分可能已經在來自前一個子通道的所有操作完成之前開始處理(考慮平鋪渲染器)。如果您開始從前一個子通道中的圖像中讀取數據,並且該圖像的某些部分尚未完成渲染,則可能會得到不正確的值。這就是爲什麼您只能從渲染過程中的單個位置讀取(使用輸入附件時)。

也許有一個擴展提升了這些約束,但我沒有讀到任何這樣的擴展。核心規格只允許上述兩個選項。

+0

我想將2個後期效果應用於我的輸出。第一個後期效果與片段着色器中的渲染輸出一起播放,其中第二後期效果翻轉圖像。通過第一個子通道,我可以實現第一個後期效果。對於第二個子通道是否有辦法實現它?如果我無法解決紋理問題,可以修改我可以將顏色寫入的位置? –

+1

@abhijitjagdale:不,你*必須*打破渲染過程。應該注意的是,當你在OpenGL ES中做了這樣的訣竅時,你幾乎殺死了你的表現。 Vulkan不會讓你想到這是一個便宜的操作。 –

+0

我認爲有一個擴展名允許您反轉視口,從而反轉顯示的圖像。但它只是一個擴展,所以它可能不支持所有設備。使用核心規格您需要啓動新的渲染通道或使用計算着色器反轉圖像。 – Ekzuzy

相關問題