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,这样重复的次数越多,就占内存越多,最终导致内存泄露。

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值