2015-05-17 24 views
0

我試圖將片段着色器的結果輸出到兩個不同的輸出(幀緩衝區對象)。如何設置2個不同的FBO作爲片段着色器輸出

至於着色器而言,我意識到,我可以爲指定不同的目標:

layout (location = x) out vec4 color; 
layout (location = y) out vec4 miscData; 

現在的問題存在:我該如何指定這些位置C++的一面呢?所以我的兩個FBO匹配着色器的輸出索引?我有一個關於Nicol Bolas書中頂點着色器的例子,但是對片段着色器部分的閱讀不夠深入 - 所以我不知道他是否涵蓋了這個主題。

就像另一個瑣事問題:我讀過紋理索引are at least 48(TEXTURE0,TEXTURE1等等),即使在最極端的圖形應用程序中也沒有超過這個。怎麼來的 ?是否因爲您通常不會在片段着色器中同時使用更多的48個紋理?我必須錯過一些非常明顯的東西,因爲顯然,現代遊戲如果不是成千上萬種不同的紋理,就會使用骰子。

最後,紋理索引(TEXTURE0,TEXTURE1,...)與佈局位置有什麼關係?

+1

你_can_ _not_寫入多個宗教組織/幀緩衝區一次。您可以一次寫入一個FBO的多個顏色_attachments_。 – derhass

回答

1

你應該在你的幀緩衝多個顏色附件然後設置繪圖緩衝,這樣的事情:

glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texID0, 0); 

glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, texID1, 0); 

GLuint drawBuffers[] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1}; 
glDrawBuffers(2, drawBuffers); 
+0

我實際上試圖從片段着色器中寫入2個不同的紋理/ FBO。 – PinkTurtle

+1

這是你如何實現它!你需要有兩個紋理附加到你的幀緩衝區設置繪製緩衝區綁定幀緩衝區,然後從frag 佈局(位置= 0)out向vec4顏色寫入; layout(location = 1)out vec4 miscData; – Mehdi

+0

我想我現在從皮鞋評論中得到它:)接受答案。 – PinkTurtle

相關問題