gluBuild2DMipmaps内存泄漏

时间:2012-01-29 17:03:31

标签: c++ opengl memory-leaks sdl

我有一个功能,可以将图像/文本加载到我的游戏中。我正在使用gluBuild2DMipmaps()从SDL表面制作一个OpenGL纹理。问题是每当我调用该函数时,即使我加载了相同的图像并将其绑定在相同的纹理上,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。

1 个答案:

答案 0 :(得分:1)

你确定自由纹理吗?你打电话给

glDeleteTextures(1, &texture[txtNum]);

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