2009-11-21 27 views
1

我在OpenGL程序中使用多種顏色附件創建幀緩衝區對象,並試圖將其升級爲多重採樣的FBO。在OpenGL中使用多種顏色附件對多重採樣的FBO進行Blitting

據我所知,多采樣FBO只能使用渲染緩衝區,特別是使用glRenderbufferStorageMultisampleEXT創建的渲染緩衝區。如果我想在紋理中呈現給FBO的東西,我需要創建第二個帶有附件紋理的FBO,然後使用glBlitFramebufferEXT將多重採樣的FBO移到常規FBO。

我見過的非常非常稀疏的例子假定有一個單色附件。當我想要多個顏色附件時,我該怎麼辦?

回答

1

EXT_framebuffer_blitspecification

12)我們應該增加對多ReadBuffers支持,讓 多種顏色緩衝區可到BlitFramebuffer一個呼叫被複制?

解決:不,我們考慮過這個,但是這個行爲很難定義,而且功能有限。

arb_framebuffer_objectspecification(其superscedes的EXT_版本)

當顏色緩衝器被傳送時,值是從所採取的讀取的讀取幀緩衝器的 緩衝器和寫入每個抽籤緩衝器的和CopyPixels一樣,畫幀緩衝的 。

所以......很明顯你只能從每個單色緩衝區解析出來。

要做多個緩衝區,您需要爲每個緩衝區執行Blit,爲每個要緩衝的緩衝區更改您的READ_BUFFER,然後選擇相應的繪製緩衝區。

0

您可以創建一個新的Fbo,並將插槽1中的渲染緩衝區分配給插槽0中的渲染緩衝區。然後綁定讀取並從該端口向您的最終目標Fbx blit。

即,可以純粹爲了綁定由另一個Fbo寫入的現有渲染緩衝區而創建Fbo。 Fbo實際上並不擁有連接到它的緩衝區,因此多個Fbx可以綁定到相同的紋理/渲染緩衝區(儘管不是同一時間)。

//渲染到Fbo0 Fbo0:[ColorBuffer0,ColorBuffer1,DethBuffer]

//綁定在時隙0與ColorBuffer1另一個FBO用於讀取 Fbo1:[ColorBuffer1]

//的blit Fbo0 ColorBuffer0 > Fbo2 Texture0 Fbo0:[ColorBuffer0,ColorBuffer1,DethBuffer] => Fbo2:[Texture0]

//的blit Fbo1 ColorBuffer1(在SLOT0結合的)> Fbo3 Texture1(在SLOT0結合) Fbo1:[ColorBuffer1] => Fbo3:[Texture1]