toge's diary

コンピュータ関連の趣味をつらつらと。

文字描画の意外に遅い部分

お手製の文字描画ルーチンが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 程度の配列があれば一瞬で文字コードが引けることに気がつく。なんてこったい、明日やって差を見てみよう。