画面にデバッグフォントを表示しよう

フォントの描画

フォントの描画も初期化が完了していれば簡単です。

DrawTextで描画が出来ます。

描画処理
RECT rect;
SetRect(&rect, 0, 0, 0, 0);
// 描画範囲の取得
pFont->DrawText(NULL, pText, -1, &rect, DT_LEFT | DT_CALCRECT, color);

// 描画
OffsetRect(&rect, X, Y);
pFont->DrawText(NULL, pText, -1, &rect, DT_LEFT, color);


何故か2回描画しているのですが、これはID3DXFontの仕様で描画範囲を指定してその範囲内に描画するようになっています。

一度目のDrawTextではDT_CALCRECTを指定して描画範囲の取得をしています。
そして2度目のタイミングで描画範囲にX, Yの位置にオフセット移動して描画しています。

これで画面にpTextの内容を画面に表示します。

 

フォント描画関数の実装

フォント描画用の関数は下記のようなものがあれば使い勝手がいいかと思います。

void DrawText(int X, int Y, D3DCOLOR color, const char* pText)
{
	if( s_pFont == NULL ) return;

	RECT rect;
	SetRect(&rect, 0, 0, 0, 0);
	// 描画範囲の取得
	pFont->DrawText(NULL, pText, -1, &rect, DT_LEFT | DT_CALCRECT, color);

	// 描画
	OffsetRect(&rect, X, Y);
	pFont->DrawText(NULL, pText, -1, &rect, DT_LEFT, color);
}


通常のテキスト描画関数です。
先ほど書いていた処理のまんまですね。

次に少し使い勝手のいい関数を実装しましょう。

void DrawFormatText(int X, int Y, D3DCOLOR color, const char* pFormat, ...)
{
	char temp[MAX_PATH];

	va_list list;
	va_start(list, pFormat);
	vsprintf_s(temp, pFormat, list);
	va_end(list);

	DrawText(X, Y, color, temp);
}


DrawFormatText関数ではフォントをprintfのように可変引数で渡せるようにしてあります。
可変引数の内容で文字列を作り直してから画面に表示します。

これがあれば数値も簡単に画面に表示することができますね!

フォント描画が出来れば色々なデバッグ機能が実装できるのでなるべく早めに実装しましょう!

1 2

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です