2011-10-12 36 views
1

我在GeForce 9800 GTX上使用OpenGL 3.3。 3.3的參考頁面表示,glBindFramebuffer的無效操作表示沒有從glGenFramebuffers返回的幀緩衝區ID。然而,我輸出由glGenFramebuffers返回的ID和稍後發送給glBindFramebuffer的ID,它們是相同的。glBindFramebuffer在使用GL_DRAW_FRAMEBUFFER目標時會導致「無效操作」GL錯誤

但是,當我將glBindFramebuffer中的目標參數從GL_DRAW_FRAMEBUFFER更改爲GL_FRAMEBUFFER時,GL錯誤消失。該文件說我應該能夠使用GL_DRAW_FRAMEBUFFER。有沒有什麼情況下你不能綁定到GL_DRAW_FRAMEBUFFER?使用GL_FRAMEBUFFER而不是GL_DRAW_FRAMEBUFFER會有什麼危害嗎?這是一個更大問題的症狀嗎?

+1

你是怎麼解決的? – elect

回答

2

如果glBindFramebuffer(GL_FRAMEBUFFER)作品時glBindFramebuffer(GL_DRAW_FRAMEBUFFER)不和我們談論的這些功能和枚舉的EXT版本(注意缺乏「EXT」後綴),那麼很有可能,你可能做錯事。 GL_INVALID_OPERATION是在取決於不同狀態的參數的多個組合發生衝突時得到的錯誤。如果它只是一個缺少枚舉,你應該得到GL_INVALID_ENUM。

當然,它也可能只是一個驅動程序bug。但是,如果不知道代碼是什麼樣子,就無法知道。

+0

該程序是爲OpenGL 2.2編寫的。如果我使用glut,我可以假設,因爲glGetString(GL_VERSION)告訴我3.3我使用的上下文是3.3嗎?換句話說,該程序可能會假設幀緩衝區的EXT版本。 –

+2

@ Phineas:沒有OpenGL 2.2。有2.1和3.2,但不是2.2。 –

相關問題