2012-08-25 108 views
0

我最近成功地用GL_TEXTURE_RECTANGLE製作了一個小型測試應用程序。現在我試圖將它集成到我的大型項目中,但是當我在render函數內部調用glBindTexture(GL_TEXTURE_RECTANGLE,_tex_id [0])時,它會導致GL_INVALID_OPERATION錯誤。紋理圖像有時會顯示幾分之一秒,然後變黑並保持黑色。OpenGL3兩套着色器,紋理顯示爲黑色

我想通過使用兩組頂點和片段着色器,一組爲3D場景,一組爲2D覆蓋,但我從未嘗試過,因此我不知道是否這就是導致錯誤的原因,或者我應該以不同的方式來解決這個問題。着色器全部編譯並鏈接正常。

任何洞察力將不勝感激,如果它會幫助看到一些代碼,讓我知道,我會發布一些(雖然我認爲這可能是太多,任何人都可以合理查找)。

編輯:在調用glBindTexture() gDEBugger休息,並在斷點處點擊時,屬性窗口顯示我的其他紋理的一個(這是由3D場景的着色器加載一個)的圖片,它顯示它試圖加載紋理編號1,但我知道這個編號已經被用來繪製屬性窗口中顯示的相同3D場景的紋理......爲什麼glGenTextures()會給我重疊的紋理ID號?這是正常還是問題的一部分?

回答

0

黑色紋理是由於我沒有將一些頂點着色器輸入(法線)轉發到片段着色器,即使我沒有在2D覆蓋着色器中使用任何法線。只要我爲所有輸入添加輸出,並將它們一起轉發給片段着色器,紋理不再是黑色,但它在幾分之一秒後仍然消失。這是因爲我在渲染函數的末尾調用了glBindTexture(GL_TEXTURE_RECTANGLE,0),希望它能清理一些狀態......這顯然是錯誤的做法,因爲刪除該調用導致2D紋理留在屏幕上。此外,使用GL_TEXTURE_RECTANGLE目標調用glBindTexture()似乎在紋理設置階段工作,但在渲染過程中GL_TEXTURE_RECTANGLE目標導致GL_INVALID_OPERATION錯誤。僅在渲染函數中將目標更改爲GL_TEXTURE_2D纔會使錯誤消失,現在一切似乎都很好。

相關問題