我一個2D遊戲,有可以加載,多層次的工作(而且應該被卸載。)的OpenGL glDeleteTextures C/C++
爲了更容易處理的紋理我寫了,有一個TextureLoader類一個包含所有紋理的列表,當遊戲中的某個對象想要使用紋理時,它只有通向它希望使用的紋理的路徑,然後詢問TextureLoader是否可以獲取具有相同路徑的紋理指針。然後,如果紋理不存在於列表中,則TextureLoader將在返回指針之前嘗試加載它。
這在整個遊戲中都可以正常工作,當我重新加載一個關卡時,內存使用保持不變。
但是,當我加載一個新的水平,我顯然希望卸載前一級,但它似乎並沒有工作。 。
這就是glDeleteTextures進來
所以我嘗試做的是:
int arraySize = textures.size();
GLuint* arr = new GLuint[arraySize];
int x = 0;
for (std::list<Texture2D*>::iterator it = textures.begin(); it != textures.end(); ++it)
{
arr[x] = (*it)->getImage();
x++;
}
glDeleteTextures(arraySize, arr);
textures.clear();
由於指針指向內存存儲在一個單獨的Texture2D類我嘗試之前收集所有的人調用glDeleteTextures;
但是,我的內存使用量在每個級別都在持續增長,直到達到堆棧溢出。
getImage()
返回一個GLuint,它帶有一個指向我在第一次綁定紋理時獲得的紋理的指針。
我在做什麼錯?
如果你單獨創建了所有的紋理ID,我不認爲數組刪除會起作用 - 但我可能在這裏是錯誤的。另外,請確保在調用delete時紋理未被綁定。綁定的紋理不會釋放。 –
至於堆棧溢出,你可能會發佈一個調用堆棧。 – Pete
我不知道如何解除紋理,我試過glDisable(GL_TEXTURE_2D),但它沒有幫助。如果我無法刪除單獨刪除的ID,我該如何解決該問題? – Orujimaru