cocos2d-x 2.x 移植freetype 各种奇葩????

求大神知道 我在quick2.25里面 添加freetype2.53 渲染的字符 有的正确有的不正确,

而且改变字号 出来的效果还各不相同???

void CCFontAtlas::load(const char* font_file , int _size)
{
FT_Library library;
if (FT_Init_FreeType( &library) )
exit(0);
//加载一个字体,取默认的Face,一般为Regualer
if (FT_New_Face( library, font_file, 0, &m_FT_Face ))
{
exit(0);
}
//选择字符表
FT_Select_Charmap(m_FT_Face, FT_ENCODING_UNICODE);
//m_FT_Face->num_fixed_sizes;
//大小要乘64.这是规定。照做就可以了。
int fontSizePoints = (int)(64.0f * _size );
FT_Set_Char_Size( m_FT_Face ,0, fontSizePoints, 72, 72);
//用来存放指定字符宽度和高度的特定数据
//FT_Set_Pixel_Sizes(m_FT_Face,_size, _size);
}

GLuint CCFontAtlas::loadChar(wchar_t ch)
{
if(g_TexID.m_texID)
{
return g_TexID.m_texID;
}
/* 装载字形图像到字形槽(将会抹掉先前的字形图像) */
if(FT_Load_Char(m_FT_Face, ch, FT_LOAD_FORCE_AUTOHINT|(TRUE ? FT_LOAD_TARGET_NORMAL : FT_LOAD_MONOCHROME | FT_LOAD_TARGET_MONO) ) )return 0;

xCharTexture &charTex = g_TexID;

//得到字模
FT_Glyph glyph;
//把字形图像从字形槽复制到新的FT_Glyph对象glyph中。这个函数返回一个错误码并且设置glyph。
if(FT_Get_Glyph( m_FT_Face->glyph, &glyph ))return 0;

//转化成位图
FT_Render_Glyph( m_FT_Face->glyph, FT_RENDER_MODE_MONO );//FT_RENDER_MODE_LCD );
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 x = m_FT_Face->glyph->metrics.horiBearingX >> 6;
int y = - (m_FT_Face->glyph->metrics.horiBearingY >> 6);
int rectWidth = (m_FT_Face->glyph->metrics.width >> 6);
int rectHeight = (m_FT_Face->glyph->metrics.height >> 6);

charTex.m_adv_x = (static_cast(m_FT_Face->glyph->metrics.horiAdvance >> 6));
int width = bitmap.width;
int height = bitmap.rows;

//printf("%d-----%d\n",rectWidth,width);
charTex.m_Width = width;
charTex.m_Height = height;
charTex.m_delta_x = (float)bitmap_glyph->left; //left:字形原点(0,0)到字形位图最左边象素的水平距离.它以整数象素的形式表示。
charTex.m_delta_y = (float)bitmap_glyph->top - height; //Top: 类似于字形槽的bitmap_top字段。
if (U>CacheTextureWidth)
{
int Ascender = m_FT_Face->size->metrics.ascender >> 6;
int Descender = m_FT_Face->size->metrics.descender >> 6; // // 基线到字符轮廓最低点的距离
int FontHeight = m_FT_Face->size->metrics.height >> 6;// ((m_FT_Face->size->metrics.height >> 6) + Ascender + Descender) / 2+2;
U=0;
V += FontHeight;
}
charTex.uv = U;
charTex.uv = V;

charTex.uv = (U+rectWidth);
charTex.uv = V ;

charTex.uv = U;
charTex.uv = V+rectHeight;

charTex.uv = (U+rectWidth);
charTex.uv = V+rectHeight;
index ++;
charTex.m_texID = index;

unsigned char* pBuf = new unsigned char;
for(int j=0; j < height ; j++)
{
for(int i=0; i < width; i++)
{
unsigned char _vl = bitmap.buffer*;
pBuf(4i + (height - j - 1) * width * 4) ] = 0XFF;
pBuf(4
i + (height - j - 1) * width * 4)+1] = 0XFF;
pBuf(4i + (height - j - 1) * width * 4)+2] = 0XFF;
pBuf(4
i + (height - j - 1) * width * 4)+3] = _vl;
printf("%d, “,_vl);
}
printf(”\n");
}

glBindTexture(GL_TEXTURE_2D,textureIndex);
glTexSubImage2D(GL_TEXTURE_2D,0,U,V,width,height,GL_RGBA, GL_UNSIGNED_BYTE,pBuf);
U += rectWidth+1;
delete] pBuf;
return charTex.m_chaID;
}

}

渲染的字符是 “123asdf”

我用纯opengl代码写的 就没有问题 渲染正常

我在3.x渲染字符” 2“ 生成的bitmap数据都一样?? 为什么3.x就正确 我的就是错的呢??