【问题标题】:Memory leak when using freetype library使用 freetype 库时的内存泄漏
【发布时间】:2011-12-04 19:41:01
【问题描述】:

在下面的代码 sn-p 中,for 循环的每次迭代都会泄漏 52 字节的内存,但几个小时后我无法确定原因 =/

任何帮助将不胜感激。

    for(unsigned char i=0; i<128; ++i)
    {
        ttf.loadGlyph(i);
        FT_Glyph glyph;
        FT_Get_Glyph(ttf.ftFace_->glyph, &glyph);
        FT_Glyph_To_Bitmap( &glyph, ft_render_mode_normal, 0, 1 );
        FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph;
        FT_Bitmap& bitmap = bitmap_glyph->bitmap;

        int width = nextPowerOf2(bitmap.width);
        int height = nextPowerOf2(bitmap.rows);
        GLubyte* expanded_data = new GLubyte[ 2 * width * height]; // Allocate Memory For The Texture Data.

        for(int j=0; j <height;j++) {
            for(int i=0; i < width; i++){
                expanded_data[2*(i+j*width)]= expanded_data[2*(i+j*width)+1] =
                    (i>=bitmap.width || j>=bitmap.rows) ?
                    0 : bitmap.buffer[i + bitmap.width*j];
            }
        }
        glBindTexture( GL_TEXTURE_2D, fontData_.pTextures_[i]);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
        glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, expanded_data );

        delete [] expanded_data;

        glNewList(fontData_.fontBase_+i, GL_COMPILE);
        glBindTexture(GL_TEXTURE_2D, fontData_.pTextures_[i]);
        glPushMatrix();
        glTranslatef( (GLfloat)bitmap_glyph->left, 0.0f, 0.0f );
        glTranslatef(0.0f, (GLfloat)bitmap_glyph->top-bitmap.rows, 0.0f);

        float   x=(float)bitmap.width / (float)width,
            y=(float)bitmap.rows / (float)height;

        glBegin(GL_QUADS);

        glTexCoord2d(0,0); glVertex3f( 0, 0, 1 );                       //Bottom-left vertex (corner) 
        glTexCoord2d(0,y); glVertex3f( 0, (GLfloat)bitmap.rows, 1 );    // top left vertex
        glTexCoord2d(x,y); glVertex3f( (GLfloat)bitmap.width, (GLfloat)bitmap.rows, 1 ); // top right vertex
        glTexCoord2d(x,0); glVertex3f( (GLfloat)bitmap.width, 0, 1 );   // bottom right

        glEnd();
        glPopMatrix();
        glTranslatef( (GLfloat)( ttf.ftFace_->glyph->advance.x >> 6 ), 0, 0);
        glEndList();
    }

【问题讨论】:

  • 我可能完全离开了,但这看起来很可疑:glNewList(fontData_.fontBase_+i, GL_COMPILE); 第一个参数应该是您从 glGenLists() 获得的唯一编号,但从这段代码中,您是否正在做并不明显那个。
  • 很难确定泄漏的原因。阅读文档非常好。可能您正在使用的某些函数分配了您没有释放的东西。

标签: c++ opengl freetype2


【解决方案1】:

来自the docs

FT_Get_Glyph

用于从槽中提取字形图像的函数。 请注意, 创建的 FT_Glyph 对象必须与 FT_Done_Glyph 一起释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多