-
テクスチャ不要のテキストレンダリング
- 従来、テキストをレンダリングするには、フォントのすべてのグリフをアトラスにレンダリングし、それをテクスチャとしてバインドしたうえで、画面に三角形を描画してグリフを1つずつレンダリングする必要がある。
- デバッグメッセージを高速に出力するためのシンプルな方法を紹介する。
- すべてのテキストを単一のドローコールで描画できる技術を説明する。
-
フォント: テクスチャ不要のピクセル
- フォントアトラステクスチャを取り除くために、フラグメントシェーダ内部にフォントアトラスに似たものを格納する必要がある。
- 整数定数を使ってビットマップを格納でき、これによってグリフをレンダリングできる。
- 8ビット整数をビットマップとして使い、GLSLフラグメントシェーダで画面に描画できる。
-
単一ドローコール
- インスタンスドローコールを使って、繰り返しの描画命令を回避できる。
- 各インスタンスごとに、位置オフセットと出力するテキストを含むデータを使用する。
- メッセージを4文字単位に分割して
uint32_t に変換し、word_data 構造体に格納する。
-
バーテックスシェーダ
- バーテックスシェーダは3つの出力を生成する。
gl_Position に三角形の頂点を画面上へ配置する。
- 出力する単語をフラグメントシェーダへ渡す。
- テクスチャ座標を生成して
uv 座標を計算する。
-
フラグメントシェーダ
- フラグメントシェーダはテキストをレンダリングするために3つの情報を必要とする。
uv 座標をグリフビットマップの正しいビットにマッピングしてグリフをレンダリングする。
- ビットが設定されている場合は前景色で、設定されていない場合は背景色でレンダリングする。
-
全体実装とソースコード
- この技術の実装は、
le_print_debug_print_text モジュールのソースコードで確認できる。
- このモジュールにより、デバッグメッセージを画面に簡単に出力できる。
1件のコメント
Hacker Newsの意見
snprintfを使ってGPUバッファに直接出力した