gpt4 book ai didi

c++ - SDL 不释放系统 RAM

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:46 24 4
gpt4 key购买 nike

我创建这样的纹理:

//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,显然表面内存没有释放。

有什么想法吗?

最佳答案

这与 OpenGL 无关。

您对 SDL_DisplayFormatAlpha 的调用会返回一个新的 SDL_Surface,因此您的原始表面仍会被分配。这意味着您将泄露每张图片的拷贝。

你应该这样做:

SDL_Surface* surfaceWithAlpha = SDL_DisplayFormatAlpha(surface);
SDL_FreeSurface(surface);
...rest of code use surfaceWithAlpha
SDL_FreeSurface(surfaceWithAlpha);

参见 documentation .

关于c++ - SDL 不释放系统 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12156462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com