タイトルそのままですが、
OpenGLで、オープンソースのFreeTypeを使って、文字列を描画してみました。

ポイント
  • 文字コード変換用ライブラリICUを準備。
  • freetypeライブラリを準備。
  • 自分のプロジェクトにインポート。
  • —- ここまでで、前準備完了 —-

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

文字コード変換には前の記事のICUを使います。

●freetypeライブラリを準備。

FreeTypeは、前回のを使います。

●自分のプロジェクトにインポート。

この記事を参考に。

—- 前準備完了 —-
●freetype初期化


※/system/fonts/NotoSansJP-Regular.otfは、たぶん、android6なら標準のフォント。

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


※fontSizeと、CHAR_RESOLUTIONの値で文字の大きさが変わる。

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


※変換後のuft32Stringには頭にBOMがつくことがあるから気を付ける。

●文字コードをbitmapに変換


※一文字づつbitmapに変換して、最後に結合する。もちろんforループで。

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


※シェーダ初期化は割愛。詳しくはココ(225行~292行)

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


※DISPLAY_WIDTH、DISPLAY_HEIGHTは、自分のSurfaceviewのサイズに合わせて変更。
※text_image_widthとtext_image_heightは、文字列全体bitmapの高さと幅。詳しくはココ(75行~115行)

●glでbitmap描画


※やっと描画。

●終了処理

あと、画面サイズは、DISPLAY_WIDTHとDISPLAY_HEIGHTでdefineしてるけど、
SurfaceViewのサイズから取得する様にしたほうがいいかも。

こんな感じで、描画できます。
あー、ムズかった。

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