OpenGL绘制纹理时,glGenTextures()函数带来的内存泄露,使程序被杀死。

项目中,我需要定时的去更换纹理图片,贴到指定的位置。我就理所当然的写了一个函数,然后定时去执行一次该函数。

函数中有代码:

            glPixelStorei(GL_UNPACK_ALIGNMENT,1);
    glGenTextures(4, texName);           
   glBindTexture(GL_TEXTURE_2D, texName[0]);
   glTexImage2D (GL_TEXTURE_2D,0,3,ImageWidth,ImageHeight,0,GL_RGB,GL_UNSIGNED_BYTE,&Image);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
   glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);

           。。。。。。。。。。。。

结果就是,我的程序每次运行20分钟后就被杀掉,终端输出如下错误——内存泄露:


经过查阅这个错误,http://blog.csdn.net/hunanchenxingyu/article/details/26271293大师提供的思路,定位到了产生内存泄露的地方,然后采用了http://blog.sina.com.cn/s/blog_60d6fadc01013xxs.html这位大侠的意见,把glGenTextures()函数,放到初始化里,就好了。

本以为这个函数可以重复执行,每次都是覆盖旧的纹理地址,原来这个函数每被调用一次,就给4个纹理重新分配新的ID,这样重复的次数越多,就占内存越多,最终导致内存泄露。

总结:函数不可乱用,还是要深刻理解了才行。

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页