2013-02-24 57 views
0

我總共有5個渲染目標。我使用相同的着色器寫入前4個,然後單獨寫入最後一個。OpenGL MRT glDrawBuffers()參數編號和行爲

在調用渲染前4倍的目標我打電話:

GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3}; 
glDrawBuffers(4, drawBuffers); 

然而,當我稱它爲第二遍,只需要編寫到最後一個,5號目標,爲什麼下面舉奇怪的結果?

GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT4 }; 
glDrawBuffers(1, drawBuffers); 

爲什麼我要改用:

GLenum drawBuffers[] = { GL_NONE, GL_NONE, GL_NONE, GL_NONE, GL_COLOR_ATTACHMENT4 }; 
glDrawBuffers(5, drawBuffers); 

這是glDrawBuffers()只是如何工作的,或者是由別的原因引起的?

編輯:固定碼與問候Jarrods評論

回答

2

是的,這只是how glDrawBuffers works。但有一個原因。

片段着色器寫入映射到某些「顏色編號」的顏色輸出。這些有沒有關係到GL_COLOR_ATTACHMENT''i「數字。整個點glDrawBuffers是將這些片段顏色編號映射到幀緩衝區中的實際緩衝區。

1

http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffers.xml

的第二參數必須是類型const GLenum*即指針「符號常量指定緩衝器陣列的成片段的顏色或數據值將被寫入「。

所以只是通過GL_COLOR_ATTACHMENT4作爲第二個參數是錯誤的類型。您需要將指針傳遞給GLEnum的數組。

+0

對不起,在我的代碼中,我實際上已將它作爲1元素數組,正如你所說的,我只是試圖在我的問題中更加簡潔。 – kbirk 2013-02-24 22:20:48

0

我發現glDrawBuffers()中有什麼問題。 for example tmp = {attement_color0,attachement_color2} glDrawBuffers(tmp)。 在着色器: gl_fragdata [0] = ... gl_fragdata [2] = ...

或u可以使用佈局的位置來定義attments輸出。 但有時候,至少在我的電腦裏,它不起作用。我的意思是attachment_color2沒有確切的輸出。