在下面的代碼片段,我泄漏52個字節的內存爲循環的每一次迭代,但幾個小時後,我無法確定爲什麼=/內存泄漏時FreeType庫
任何幫助將是讚賞。
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_ + 1,GL_COMPILE);'第一個參數應該是一個唯一的編號,你從'glGenLists()'得到的,但是從這個代碼,如果你這樣做並不明顯。 – jrok
確定泄漏的原因是不可能的。閱讀文件非常好。可能你正在使用的某些功能會分配一些你不能釋放的東西。 – FailedDev