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字体加载优化的主要内容,如果未能解决你的问题,请参考以下文章

CEGUI字体加载优化

CEGUI资源加载流程

CEGUI资源加载流程

CEGUI资源加载流程

CEGUIFont资源加载流程

CEGUIFont资源加载流程