前回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()はやんなくていいみたい。実行すると落ちる。
ふぃー、えらい大変やった。
なかなか情報出てこんちゃもん。
いつもの様に、ソースコード一式はココ。