我創建的紋理是這樣的:SDL不釋放系統內存
//Create temp SDL_Surface
SDL_Surface* surface = IMG_Load(this->path.c_str());
//If we successfully loaded an image
if (surface)
{
SDL_DisplayFormatAlpha(surface);
bounds = GameRectangle(surface->w, surface->h);
GLuint object(0);
glGenTextures(1, &object);
glBindTexture(GL_TEXTURE_2D, object);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_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, surface->w, surface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels);
SDL_FreeSurface(surface);
return object;
}
glDeleteTextures()釋放的VRAM正常,但系統RAM保持並建立直到遊戲崩潰。
我將它定位到SDL_Surface,顯然表面存儲器沒有被釋放。
任何想法?
這是作業的OS釋放內存,所以解決方案可能是操作系統特定的 –
我正在使用Windows 7專業64位,SP1 – Orujimaru
你如何測量內存使用情況?請記住,只查看任務列表可能會給你錯誤的結果 - SDL 是釋放內存完全可行,只是沒有將其交給系統(這可能非常困難)。這意味着您不會看到任務列表內存使用量減少,但內存仍可供應用程序重用。 –