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

原创 2016年09月02日 13:58:55

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

函数中有代码:

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

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

加载纹理与使用glGenTextures时应注意的一点(解决吃内存)[转]

加载纹理与使用glGenTextures时应注意的一点(解决吃内存)[转] glGenTextures   glGenTextures(GLsizei n, GLuint *te...
  • lovehota
  • lovehota
  • 2012-03-29 15:41:20
  • 7432

《高效学习OpenGL》 之 纹理对象 glGenTextures(),glIsTexture(),glBindTexture(),glDeleteTextures()

命名纹理对象: void glGenTextures (GLsizei n, GLuint *textures); //在数组textures中返回n个当期未使用的值,表示纹理对象的名称...
  • huangbangqing12
  • huangbangqing12
  • 2014-02-28 11:25:08
  • 4417

OpenGL ES glGenTextures返回值为0

最近在Android的一个项目要用到OpenGL ES,自己对于图形引擎这块又不了解,顶多就是看过点DirectX,不过也是挺久以前的了,早忘完了。 想着这下完了,肯定又得掉坑。 坑确实多,不过大...
  • u011810659
  • u011810659
  • 2017-07-30 20:06:53
  • 500

opengl glBindTexture为何失败

半年没有写点东西总结下了。有时候脑中想法很多,却又感觉文字功底着实有限,无法把自由散漫的思想分门别类地记下来,好在可以与人交流,掏空自己,然后吸收些新东西;有时候却什么都不想,就翻翻书,享受前人的精神...
  • C__Allen
  • C__Allen
  • 2013-12-31 10:32:50
  • 2922

glGenTextures(GLsizei n, GLuint *textures)函数说明

BOOL LoadTextures(IplImage *pImage, GLuint *pTexture) { int Status=FALSE; if(pImage != NULL)...
  • gggg_ggg
  • gggg_ggg
  • 2014-12-29 16:12:10
  • 935

OpenGL FrameBuffer Object OpenGL中的FBO对象 OpenGL函数思考-glGenTextures

http://www.cnblogs.com/aokman/archive/2010/11/14/1876987.html
  • liumf2005
  • liumf2005
  • 2014-05-09 13:25:13
  • 761

glGenTextures

参考: http://blog.163.com/qiang_zx/blog/static/4321934200781693752845/glGenTextures (GLsizei n, GLuin...
  • thufreshman
  • thufreshman
  • 2010-08-19 22:46:00
  • 3066

opengl、ffmpeg内存泄露及混编问题(2017-4-20)

记录备忘(2017-4-20)ffmpega. 从摄像头获取到数据为yuv422格式,通过ffmpeg库函数或者yuyv转rgb的方式来处理数据,然后用opengl显示。直接用ffmpeg的库来转比...
  • u013883974
  • u013883974
  • 2017-04-20 14:54:15
  • 611

OpenGL函数思考-glGenTextures

OpenGL函数思考-glGenTextures函数原型:      void glGenTextures(GLsizei n, GLuint *textures)参数说明:      n:用来生成纹...
  • shuaihj
  • shuaihj
  • 2012-02-09 09:37:32
  • 7985

opengl编程学习笔记(四)(纹理映射)(结合nvdia OpenglSDk 的nvimage类)

Opengl中的纹理映射(texture mapping)是它的精华部分,在opengl的书中这一章也是所有章节中最为多的,在所有的opengl技术中,关于纹理映射的技术也是最多最丰富的,同时也是被开...
  • leonwei
  • leonwei
  • 2009-05-06 21:39:00
  • 12668
收藏助手
不良信息举报
您举报文章:OpenGL绘制纹理时,glGenTextures()函数带来的内存泄露,使程序被杀死。
举报原因:
原因补充:

(最多只允许输入30个字)