2016-12-03 115 views
0

我一直在嘗試在使用GLES 3的應用程序中實現渲染到紋理的方法,並且我已經得到了它的工作原理,但我對幀頻下降有點失望。將非多重採樣的FBO複製到多重採樣的FBO

到目前爲止,我們已經直接渲染到主FBO,它是使用EGL_SAMPLES = 8創建的多重採樣FBO。

我基本上想要的是能夠獲得已經繪製的像素,而我仍然在繪製。所以我認爲渲染紋理的方法應該做到這一點。然後,我只需要閱讀屏幕外FBO的紋理部分,當我完成渲染時,我會將整個內容粘貼到主FBO。

挖掘到這我發現我不得不實現一個多采樣FBO系統以及一個非多采樣紋理FBO,我不得不解決multisampled之一。然後將解決的問題提交給主FBO。

這一切都有效,但問題是,通過使用上述系統和一個非多重採樣主FBO(EGL_SAMPLES = 0),我得到了相當大的幀速率下降,這與我僅使用main EGL_SAMPLES = 8的FBO。

挖掘更多一點,我發現人們在線報告以及這裏的帖子https://community.arm.com/thread/6925,說最快的多抽樣方法是使用EGL_SAMPLES。事實上,這就是我們目標板上的jetson tk1上的樣子。

這最終導致我的問題,併爲長介紹道歉:

有沒有辦法,我可以設計這樣任何方式使用非多重採樣關屏FBO對所有最終的位圖混合渲染到使用EGL_SAMPLES的主多重採樣FBO?

+2

最後一段完全倒退。你並不是先開始每像素1個樣本的光柵化處理,然後將其傳輸到多重採樣的幀緩衝器中。您想要轉向另一個方向並將多重採樣緩衝區解析爲單個樣本,否則您只會浪費VRAM。 –

回答

0

有沒有什麼辦法可以讓我設計這個功能,使用非多重採樣的離屏fbo處理所有的渲染,最終使用EGL_SAMPLES的主多重採樣FBO?

不以任何方式真正有用。

幀緩衝blitting確實允許從單採樣緩衝區到多采樣緩衝區的傳輸。但是,所有這些都是爲像素內的每個樣本提供與源代碼中相同的值。

Blitting不能生成新信息。所以你不會得到任何實際的抗鋸齒。您將得到的是以相當低效的方式存儲的相同數據。

0

MSAA的唯一要點是抗混疊幾何邊緣。如果多個三角形邊緣出現在相同的像素中,它只會帶來好處。對於正在執行多個離屏通道的渲染管線,您希望爲包含幾何圖形的離屏通道啓用多個樣本(通常是管道中的早期通道之一,在任何後期處理效果之前)。

將MSAA應用於最終blit的管道末端將提供零利益,並且可能不是免費的(它將接近免費基於圖像的呈現器,如IMG Series 6和Mali(您鏈接的博客) ),在Jetson板上的Nvidia等即時模式渲染上免費)。

關於屏幕外消除鋸齒的注意事項「標準」方法是渲染到MSAA幀緩衝區,然後解析爲第二遍(例如,使用glBlitFramebuffer進入單個採樣緩衝區)。這彈跳在很多平臺上效率不高,所以該擴展的存在是爲了幫助:

實際上,這提供了相同的隱決心爲EGL窗口表面的功能。

在評論中回答你的問題。

在這種情況下產生的紋理是多重採樣紋理嗎?

從申請的角度來看,沒有。多采樣數據位於由驅動程序分配的隱式分配緩衝區內。看到這一點的規格:

「該實現分配一個隱式多采樣緩衝區與TEXTURE_SAMPLES_EXT採樣和相同的內部格式,寬度和高度指定的紋理級別。」

可能需要在主存儲器上的一些GPU架構真正MSAA緩衝區分配(因此是沒有快於不帶擴展手動glBlitFramebuffer的方法),但已知是他人有效不含(即瓦基於GPU的GPU,其中隱式「緩衝區」是GPU內部的一個小型RAM,根本不在主內存中)。

的目標是模糊的小部件後面的背景

MSAA是不以任何方式通用模糊 - 它只是消除鋸齒這與三角形的邊緣重合的像素。如果您想模糊三角形面,最好使用實現爲一對片段着色器的可分離高斯模糊,並將其作爲2D後處理通道實施。

+0

是的,我試過的解決方案是你在這裏描述的。渲染到離屏MSAA FBO(帶有多采樣渲染緩衝區,而不是紋理,因爲我們在GL ES3或更低版本上),然後解析爲帶紋理的單樣本FBO,然後使用glBlitFrameBuffer將其閃光到主FBO。它很慢。特別是在1920x1080分辨率下。但是你談論的這個擴展聽起來很有趣。在這種情況下,生成的紋理是多重採樣紋理?對我們來說最好的解決方案就是能夠以某種方式隨時獲得我們可以訪問的場景的2D紋理。目標是模糊小部件背後的背景。 – DolphinAndWailu

+0

回答更新了您的問題的答案... – solidpixel

+0

感謝您的回答。我實際上模糊的意思是,我想複製已經繪製的任何部分,並重新模糊它,而我仍然處於渲染循環中。這就是爲什麼我要渲染紋理。問題是我使用MSAA進行抗鋸齒,並且使「渲染到紋理」步驟複雜化。我提到了模糊的情況,以說明這種折磨的目標,以防你知道任何更簡單的方法來實現這一目標。我已經有了一遍高斯模糊着色器,效果很好。只需要能夠對我的MSAA FBO中已有的內容進行抽樣。 – DolphinAndWailu