c++ - gluBuild2DMipmaps 内存泄漏

标签 c++ opengl memory-leaks sdl

我有一个函数可以将图像/文本加载到我的游戏中。我正在使用 gluBuild2DMipmaps() 从 SDL 表面制作 OpenGL 纹理。问题是每次调用该函数时,即使我加载了相同的图像并将其绑定(bind)到相同的纹理上,gluBuild2DMipmaps 分配 0.5MB 的内存,直到我关闭程序才会释放。
我的功能:

void Load_texture(const char * text, SDL_Color clr, int txtNum, const char* file, int ptsize, bool type){
if(type){
         tmpfont = TTF_OpenFont(file, ptsize); 
         sText = TTF_RenderUTF8_Blended( tmpfont, text, clr );
         TTF_CloseFont(tmpfont);
}
if(!type)sText = IMG_Load(file);
area[txtNum].x = 0;area[txtNum].y = 0;area[txtNum].w = sText->w;area[txtNum].h = sText->h;
glGenTextures(1, &texture[txtNum]);
glBindTexture(GL_TEXTURE_2D, texture[txtNum]);
gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, sText->w, sText->h, GL_RGBA, GL_UNSIGNED_BYTE, sText->pixels );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR );
SDL_FreeSurface( sText ); 
}

我该怎么做才能释放 gluBuild2DMipmaps 分配的内存,因为现在我的游戏在启动一分钟后使用了将近 1GB 的 RAM。

最佳答案

你确定你释放了纹理本身吗?你打电话吗

glDeleteTextures(1, &texture[txtNum]);

...在重新使用 txtNum 纹理之前?

关于c++ - gluBuild2DMipmaps 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054941/

相关文章:

c++ - C++ FileApi.h没有缓存,我如何使磁盘事件达到100%

c++ - 如何在VTK系统中改变坐标系原点?

java - 内存中 java byte[] 的大小

PHP fatal error 允许内存大小耗尽

c++ - 如何在堆栈上创建多态对象?

c++ - Qt QTableWidget 列大小调整

c++ - cURL Windows 构建配置的说明

c++ - Opengl 纹理有时会在窗口调整大小时闪烁/移动

c++ - 如何使用OpenGL设置Visual Studio Code?

c - C-如果我不将窗口最小化超过15分钟,程序就会崩溃