DirectX用デバッグ文字表示DirectXのサンプルやゲーム等を作っていつも「いー!」っと思うのがデバッグ文字の表示です。DirectXで文字を表示させるのって意外と面倒なんです。「printf」並に簡単にデバッグ文字を表示させたい!そう思い1ヘッダー1cppでデバッグ文字を表示できるDebugFontクラスを作りました。「ASCII文字限定」です。デバッグ表示ってそれで十分だったリします。アプリケーション開始時にinitializeメソッドを呼んでおけば、実質あとはDebugFont::print(***)だけでデバッグ文字がガンガン出ます(^-^)。oxdebugfont_dx9.cpp※ヘッダーと.cppの名前が違うので注意してください。リソースやワーキングメモリの初期化を行います。これはアプリケーションが開始されてゲームループに入る前に一度だけ呼び出します。このメソッドを呼び出す前に外のメソッドを呼び出してはいけません。deviceにはIDirect3DDevice9オブジェクトを渡して下さい。void*型になっているのは汎用性を考慮しているためです。maxStrNumは一度に描画する最大文字数です。各種バッファサイズに直結するのであまり大きくしない方がメモリに優しいです。maxWorkingBufferSizeは1回のprintメソッド呼び出しでの最大表示文字数です。指定分のメモリをアプリケーションが終了するまで確保します。表示するデバッグ文字を追加します。yはスクリーン座標位置、colorは表示色をARGBで指定します。formatはprintfと同じ書式が使えます。optionはDebugFont::Option構造体で指定した方法で文字列を表示する拡張機能です。単純なデバッグ表示は上のprint、クリッピングやアラインメントなどを使いたい場合は下のprintメソッドを使用します。ストックしたデバッグ文字を描画します。これはストックしたすべての文字を一度に描画するため、ゲームループ内で毎フレーム1回呼ぶだけで十分です。deviceにはIDirect3DDevice9オブジェクトを渡します。内部ではアルファブレンドとカリングのみ一時的に設定されますが、メソッドを抜ける時に元に戻されます。デバッグ文字をストックしている配列の書き込みバッファ位置を0に戻します。このメソッドはdrawメソッドの後ゲームループの最後で必ず一度呼んで下さい。呼び忘れるとデバッグ文字がバッファに貯まり、最大文字数を超えると追加ができなくなってしまいます。内部のリソースをすべて解放します。アプリケーションが終了する前に一度呼んで下さい。{}};拡張的なデバッグ表示を行う時に指定します。Alignは指定位置に対して左寄せ、右寄せ及び中央寄せ描画を行います。clipをtrueにするとclipWidthに指定した幅で自動折り返しになります。ループ前に一度だけ呼び出します。技術的なお話このデバッグフォントのリソースはdebugfont_dx9.cppの中にがりっとハードコーディングされています。よってヘッダーと.cppをプロジェクトに追加するだけでデバッグ文字を表示できます。フォントリソースが入っている.cppはおよそ70KBで、アプリケーションが存在する間メモリに常駐されます。Generatorを利用しました。素晴らしいツールです(オフィシャルページはこちら)。DebugFontクラスの描画の仕組みは、実はフォントリソースさえあればどんな文字でもちゃんと描画する事ができます(ただしUnicode変換が必要になります)。「デバッグ文字が気に入らねぇ」「もっと沢山の文字や記号を表示させられるようにしたい」という場合はリソースを更新すれば良いのですが・・・独自フォーマットなのでちょっと難しいかもしれません(^-^;。ご希望があれば出来る範囲でリソースファイルを作って公開致します。