2012-01-23 41 views
5

爲了澄清,當我說'默認幀緩衝區'時,我的意思是由窗口系統提供的那個,以及在監視器上的結果。將FBO混合到默認幀緩衝區

爲了提高我的CAD應用程序的渲染速度,我設法從Qt處理的2D元素中分離出3D元素,並且他們現在分別渲染成它們自己的FBO。當把它們放到屏幕上時,我將3D FBO閃光到默認的FB上,然後我想在它上面混合我的2D FBO。

我已經到了blitting的部分,但我看不到如何將我的2D FBO融合到它上面?兩個FBO在大小和格式上都是相同的,它們都與默認的FB相同。

我相信這是一個簡單的操作,但我無法在網上找到任何東西 - 大概我錯過了正在嘗試做的事。雖然我使用Qt,但我可以使用本機OpenGL命令而不會出現問題。

回答

7

blit操作最終是像素複製操作。如果您想將一個圖像疊加到另一個圖像上,則無法將其粘貼。您必須將全屏四邊形渲染爲紋理,並使用proper blending parameters進行混合操作。

+0

這完全是可怕的效率低下,雖然,我有相同大小的像素值(緩衝區)的兩個數組,最終所有我需要做的是應用數學運算其中之一的元素合併另一個的相應元素。 OpenGL真的只把FBO當作紋理嗎? – cmannett85

+0

@ cbamber85渲染紋理不會那麼低效 –

+1

@ cbamber85:「OpenGL是否真的只將FBO作爲紋理處理?」 FBO只是圖像的容器。您將圖像附加到FBO,但FBO本身不擁有它們。圖像來自其他對象:紋理和渲染緩衝區。然而,無論看起來「效率低下」,渲染一幅圖像都非常快。沒有頂點變換。無非是片段着色器中的紋理採樣。此外,API不會爲您提供另一種方式來執行此操作,因此它的效率與其獲得的效率相同。 –

1

您可以使用GL_EXT_framebuffer_blitblit幀緩衝區對象的內容到應用程序幀緩衝區(或任何其他)。儘管如規格所述,不可能使用混合:

像素副本繞過片段管道。影響blit的唯一片段 是像素所有權測試和 剪式測試。

因此,任何混合手段使用片段着色器建議。一個全屏通過混合應該是相當便宜的,我相信沒有什麼可擔心的。

相關問題