本文へスキップ
PS5PCEM
一部ファームウェアと HLE

フォントの描画

libSceFont は、タイトルが提供する TrueType と OpenType のフェイスを FreeType でラスタライズします。システムフォントの要求には、同梱の Noto Sans をラテン文字、ギリシャ文字、キリル文字の代替として使います。

2026年10月10日 までのリポジトリノート

フェイス、スケール、寿命

タイトルはフォントライブラリを開き、自分で用意したバイト列かシステムフォントの要求からフェイスを作り、グリフの寸法とカバレッジを求めます。各フェイスは独自のスケール、描画スケール、傾き、寿命を持ちます。ライブラリを閉じるとフェイスが解放され、プロセスの終了でフォントの状態が消去されます。フォントのバイト列は開いたときにコピーされるため、後でタイトルの元のバッファがアンマップされてもラスタライザーが無効になることはありません。

Noto Sans は代替であって、すべてのファームウェアフォントのバイト単位の複製ではありません。ラテン文字、ギリシャ文字、キリル文字をカバーします。タイトルが提供するフェイスは CJK を含むほかのグリフを持つことがあり、その輪郭は使われます。システムフォントの要求そのものが CJK のフェイスで代替されることはありません。

グリフ、カーニング、アトラス

グリフの経路は、本物の寸法、水平方向のレイアウト、基本的なペアカーニング、アンチエイリアスされたカバレッジ、クリッピング、描画結果のディスクリプターを返します。上限付きのグリフキャッシュで同じ文字の再ラスタライズを避け、別のペアキャッシュでサイズをまたいでカーニングを再利用します。書き込みは、テクスチャアトラスに触れる前に CPU の権限を確認し、GPU のページ監視を無効化します。

フェイスが含まない有効な Unicode スカラーは、タイトルがアトラスの範囲全体を作る途中で出会う制御コードを含め、フェイスの .notdef の輪郭を使います。Jurassic Park Classic Games Collection がフォントアトラスの作成を終えられるのは、この欠けたグリフの経路のおかげです。無効な Unicode スカラーと範囲外の明示的なグリフ識別子は、引き続きエラーを返します。カバレッジは 1~4 バイトのピクセルに書き込まれます。

テキストのレイアウトでタイトルに任せること

多くのタイトルは libSceFont をまったく呼びません。自分のエンジンのフォントで文字を描いており、この実装はそのピクセルを変えません。HLE の経路は、ファームウェアにラスタライズを頼むタイトルのためのものです。

テキストのシェーピング、双方向のレイアウト、合成の太さ、CJK のシステムフォント代替、コレクションのフェイス選択、上位の FontWriting と String の API は実装していません。対象を絞ったチェックは、font フィルター付きの zig build test-hle にあります。

実装済みのこと

  • タイトルが提供する TrueType と OpenType のフェイスを FreeType でラスタライズ。
  • ラテン文字、ギリシャ文字、キリル文字のシステムフォント要求に対する Noto Sans の代替。
  • 寸法、水平方向のレイアウト、ペアカーニング、傾き、クリッピング、グリフキャッシュ。
  • 欠けた Unicode スカラーに対する .notdef の代替。Jurassic Park のアトラスを動かすもの。

まだ足りないこと

  • シェーピング、双方向のレイアウト、FontWriting の API はありません。
  • システムフォントの要求は CJK のフェイスで代替されません。
  • 文字を完全に自前のエンジンで描くタイトルは、この経路を使いません。

関連するしくみ

これらのページについて

本文は PS5PCEM リポジトリのアーキテクチャノートと 2026 年 10 月のレポートに基づいています。個別のテストに合格したことは、新しいフレームレートや新しいクリアを意味しません。

すべての技術