2011-12-01 137 views
3

編輯:解決幀緩衝區對象創建錯誤

我遇到一個問題,而試圖渲染到紋理。我創建了一個幀緩衝區對象是這樣的:

glGenTextures(1, &renderFBOtex); 
glBindTexture(GL_TEXTURE_2D, renderFBOtex); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 

glGenRenderbuffers(1, &renderFBOrender); 
glBindRenderbuffer(GL_RENDERBUFFER, renderFBOrender); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height); 
glBindRenderbuffer(GL_RENDERBUFFER, 0); 

glGenFramebuffers(1, &renderFBO); 
glBindFramebuffer(GL_FRAMEBUFFER, renderFBO); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderFBOtex, 0); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderFBOrender); 

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

glCheckFrambufferStatus的返回值始終是GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

這個問題似乎與紋理,因爲它是沒有Renderbuffer附件相同。進入Framebuffer本身不應該是一個問題。

有人請指出我在這裏錯過了什麼?

回答

1

問題出在程序的另一部分。這是一個非常愚蠢的錯誤,導致紋理的寬度和高度使用了錯誤的初始化值。他們都被設置爲0,因此不完整的附件錯誤。

0

試試這個:

glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderFBOtex, 0); 
          ^^^^ 

從技術上講,他們應該沒有什麼區別,但一些司機可能有這個bug。

+0

我已經試過了。根據文檔,GL_DRAW_FRAMEBUFFER和GL_FRAMEBUFFER是等價的,它似乎沒有改變任何東西。無論如何感謝... – lukashko

+0

@ user1076104:是的,這個等同是我的意思是「沒有區別」。但是有些驅動程序有(有)錯誤。 – datenwolf

+0

對不起,我最初忽略了你寫的(在尋找建議的時候,這很愚蠢)。 – lukashko

1

將紋理貼圖附加到顏色緩衝區之前,先構建紋理貼圖。

專用於此任務的例程是glGenerateMipmap


另一個建議是使用紋理內部格式。您沒有指定大小的內部格式。由於錯誤的原因之一是紋理沒有受支持的顏色可呈現的內部格式,所以您可以嘗試一下。

+0

當使用'GL_LINEAR'過濾器模式時,這應該是完全不需要的(就像他一樣)。順便說一下,不要使用'gluBuild2DMipmaps'(它甚至不是OpenGL)。只要使用'GL_GENERATE_MIPMAP'或更好,如果您已經有FBO,請使用'glGenerateMipmaps'。他們應該用硬件來做。 –

+0

非常感謝您的意見。我試過了,但似乎沒有任何區別。我也嘗試過所有可能的參數組合glTexImage2d。每次都是一樣的。我的問題是否可能導致程序中的其他位置?我的意思是,我真的是OpenGL的新手,並且不確定各個流水線階段之間的所有相互依賴關係...... – lukashko