项目中,我需要定时的去更换纹理图片,贴到指定的位置。我就理所当然的写了一个函数,然后定时去执行一次该函数。
函数中有代码:
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,这样重复的次数越多,就占内存越多,最终导致内存泄露。
总结:函数不可乱用,还是要深刻理解了才行。