2012-09-20 50 views
2

我在代碼(C)的開頭設置了許多紋理。每個紋理都正確生成(沒有錯誤),並將紋理名稱作爲GLuint存儲在圖像結構中供以後使用。 在程序結束時,GLuint被傳回給GLdeleteTextures(),程序退出。OpenGL GLDeleteTextures()無法刪除第一個紋理

問題是我在第一次嘗試使用GLDeleteTextures()時不斷收到錯誤。所有後續調用GLDeleteTextures()都不會產生錯誤。

該錯誤(來自gluErrorString)聲明'invalid enumerant'。

額外的信息。 所有紋理在調用glBindTexture(GL_TEXTURE_2D,NULL)之前都未被綁定。 創建時驗證所有紋理名稱(GLuints),並且它們與刪除時使用的名稱相同。 刪除紋理時的順序無關緊要,這是第一次刪除這個問題的調用。

當前的解決方法。 我發現,第一紋理作品,如重複glDeleteTextures()...

glDeleteTextures(1,&MyImage->texName); // Will produce 'invalid enumerant' 

glDeleteTextures(1,&MyImage->texName); // This time it will work! 

我仔細檢查過上面的代碼由第二刪除後產生新的紋理和比較紋理的名字。紋理確實在第二次調用後被刪除並正確放回到系統中。

我有紅皮書,它的紋理刪除有點模糊。是否有一組明確的步驟必須執行才能正確刪除紋理?

+3

您確定該行產生錯誤嗎?看起來可能是glDeleteTextures之前的一個前面調用中的錯誤。在第一個deleteTextures之前移動錯誤檢查行。 – Tim

+0

發佈證明問題的[SSCCE](http://sscce.org/)。 – genpfault

+0

我剛剛得出同樣的結論。這不是glDeleteTextures。它似乎來自glEnable(GL_ALPHA)。幽靈般的。 Thankyou genpfault。 – Hol101

回答

0

故障不是glDeleteTextures()而是來自glEnable(GL_ALPHA)