admin管理员组

文章数量:1026989

【CEGUI】字体加载优化

CEGUI 字体加载优化

  • CEGUI字体加载流程详见【CEGUI】Font资源加载流程
  • CEGUI对于字体加载,例如Freetype类型字体,会通过libfreetype遍历字体文件的所有字形索引,并保持其对应的字符码。
void FreeTypeFont::initialiseGlyphMap()
{FT_UInt gindex;// d_fontFace是该字体的FontFace对象,通过字形索引拿到其对应的字符码。FT_ULong codepoint = FT_Get_First_Char(d_fontFace, &gindex);FT_ULong max_codepoint = codepoint;// 这里会查找字体的所有字形while (gindex){if (max_codepoint < codepoint)max_codepoint = codepoint;// 构建字符码mapd_cp_map[codepoint] = FontGlyph();codepoint = FT_Get_Next_Char(d_fontFace, codepoint, &gindex);}setMaxCodepoint(max_codepoint);
}
  • 优化:对于同一个字体文件,其字形索引和字符码。基本上都是一致的。因此同字体的不同字号,在加载资源时,可以服用。字符码和字形索引资源。
  • 例如(伪码)
void FreeTypeFont::initialiseGlyphMap()
{// d_font_codePitonMap为静态成员变量// 根据字体名称,查找一下该字体的是否已经加载过。isFontLoaded(fontName);if (加载过)  {d_cp_map = d_font_codePitonMap[fontName];// 其他处理} else {// 原有逻辑d_font_codePitonMap[fontName] = d_cp_map; }
}
  • 这样的话,对于每个字体,会多一些内存消耗(保持了一段可服用的字符码map),但是加载字体的速度会有明显的提升。

【CEGUI】字体加载优化

CEGUI 字体加载优化

  • CEGUI字体加载流程详见【CEGUI】Font资源加载流程
  • CEGUI对于字体加载,例如Freetype类型字体,会通过libfreetype遍历字体文件的所有字形索引,并保持其对应的字符码。
void FreeTypeFont::initialiseGlyphMap()
{FT_UInt gindex;// d_fontFace是该字体的FontFace对象,通过字形索引拿到其对应的字符码。FT_ULong codepoint = FT_Get_First_Char(d_fontFace, &gindex);FT_ULong max_codepoint = codepoint;// 这里会查找字体的所有字形while (gindex){if (max_codepoint < codepoint)max_codepoint = codepoint;// 构建字符码mapd_cp_map[codepoint] = FontGlyph();codepoint = FT_Get_Next_Char(d_fontFace, codepoint, &gindex);}setMaxCodepoint(max_codepoint);
}
  • 优化:对于同一个字体文件,其字形索引和字符码。基本上都是一致的。因此同字体的不同字号,在加载资源时,可以服用。字符码和字形索引资源。
  • 例如(伪码)
void FreeTypeFont::initialiseGlyphMap()
{// d_font_codePitonMap为静态成员变量// 根据字体名称,查找一下该字体的是否已经加载过。isFontLoaded(fontName);if (加载过)  {d_cp_map = d_font_codePitonMap[fontName];// 其他处理} else {// 原有逻辑d_font_codePitonMap[fontName] = d_cp_map; }
}
  • 这样的话,对于每个字体,会多一些内存消耗(保持了一段可服用的字符码map),但是加载字体的速度会有明显的提升。

本文标签: CEGUI字体加载优化