お手製の文字描画ルーチンがgprofでシステム全体の30%以上を締めていることが分かる。
どうもEUC->グリフインデックスな部分で遅いようだ。
そういやここって2分木探索してたなぁと反省し、libchashを使ってみたがあんまり高速化しない。
しょうがないので次のような超手抜きキャッシュルーチンを入れてみた。
ぬぅ、50%速くなってしまった。おそるべしキャッシュ。
GL2D_PFont_Cache* cache = font->cache + (code & (PFONT_CACHE_NUMBER - 1));
if (cache->code == code)
{
glyph_index = cache->index;
}
else
{
glyph_index = convertCharcode2GlyphIndex(font, code);
cache->code = code;
cache->index = glyph_index;
} そして良く考えたら 94 x 94 x 2 x sizeof(unsigned char) = 約35kbyte 程度の配列があれば一瞬で文字コードが引けることに気がつく。なんてこったい、明日やって差を見てみよう。