前回FreeTypeで、文字列を描画してみました。
これはこれで、描画できるのですが、毎回文字コード→bitmap変換を実行しています。

freetypeは、内部で一度変換した文字コードをキャッシュとして保持する機能があるので、
それを使うと早くなるようです。

今回は、freetypeのキャッシュ機能を使ったやり方をやってみました。

ポイント
  • freetype初期化
  • freetypeにフォントサイズ設定
  • ICUで文字コード変換(UTF-8→UTF-32)
  • 文字コードをbitmapに変換
  • glシェーダ初期化・設定
  • 頂点・UV座標・テクスチャユニット準備
  • glでbitmap描画
  • 終了処理
●freetype初期化


※FTC_Manager,FTC_CMapCache,FTC_ImageCacheの初期化が増えた分、キャッシュしない時より、処理が増えた。
※/system/fonts/NotoSansJP-Regular.otfは、たぶん、android6なら標準のフォント。

●freetypeにフォントサイズ設定


※fontSizeと、CHAR_RESOLUTIONの値で文字の大きさを変更可。いまいちサイズ感がわかんない。

●ICUで文字コード変換(UTF-8→UTF-32)


※変換後のuft32Stringには頭にBOMがつくことがあるから気を付ける。
※ここは、キャッシュなしの時と同じ。

●文字コードをbitmapに変換


※一文字づつbitmapに変換して、最後に結合する。もちろんforループで。
※ここも、キャッシュなしの時と同じ。

●glシェーダ初期化・設定


※シェーダ初期化は割愛。キャッシュしない時と同じ。

●頂点・UV座標・テクスチャユニット準備


※ここも、キャッシュなしの時と同じ。

●glでbitmap描画


※やっと描画。

●終了処理


※FT_Done_Face()はやんなくていいみたい。実行すると落ちる。

ふぃー、えらい大変やった。
なかなか情報出てこんちゃもん。

いつもの様に、ソースコード一式はココ