CEGUI字体加载优化
Posted 林多
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
// 构建字符码map
d_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字体加载优化的主要内容,如果未能解决你的问题,请参考以下文章