DoomPlayerの開発にはLVGLのv8.3を使用していましたが、現在LVGLプロジェクトではv9.0に向けての開発が進行中です。最新のmasterを覗いてみたところ'Tiny TTF font engine'というTrueTypeフォントの使用を可能とするライブラリが用意されていることを知ったので、どんなもんか試しに使ってみました。
使用したボードはSTM32H7B3I-DK. フォントデータはGoogle fontsから日本語のフォントを適当に選んでダウンロード。ダウンロードしたttf ファイルは '.bin' に拡張子を変更すれば、そのままSTM32CubeProg を使ってボード上のOctal SPI Flashに書き込むことができます。ライブラリのAPIとしては
lv_font_t * lv_tiny_ttf_create_data(const void * data, size_t data_size, lv_coord_t line_height);
という関数が用意されており、TTFファイルデータのあるアドレスと、そのサイズ、希望する高さを与えてやるとlv_font_t 構造体を用意してくれます。あとは、通常のフォントと同じように文字列表示を行うことができます。表示するビットマップデータは、文字表示操作が呼ばれた時にTTFデータから必要な大きさに展開されて作成されるので、RAMの使用量も抑えることができます。動画で示したように大きさを変えながら表示する場合には、ビットマップへの展開し直しが発生していますが 280MHz動作のSTM32H7B3をもってすればかなりスムーズに表示できることが確認できました。
これまではTTFのフォントデータから、あらかじめ必要なサイズのフォントビットマップデータを作成しておき、それをSDカードやフラッシュに書き込んでおくということをしていましたが、OctSPI/QuadSPIフラッシュをMemory Mappedで使えば、もうSDカードは不要な上に複数の書体/サイズのビットマップを動的に作成して使用できますね。