ImGuiでデバッグツール
以前,ImGuiの導入をしてから, 簡易的なプロファイラを作ったりしていたのですが, 思うところあって,いろいろ作り直しました。
いかにも開発中って感じの画面になって良いです。
プロファイラはツリー表示を導入したり,再帰構造を縦に並べて見やすくしてみたりと改善してみました。 利用時には,コード中に
BEGIN_GPU_MEASURE(pDeviceContext, "posteffect"); // (処理) // ... END_GPU_MEASURE(pDeviceContext);
みたいな感じのマクロで囲むとその範囲の測定を行います。測定範囲のネストも自動的に解決します。
ImGuiのサンプルにもありますが,ImGui::GetWindowDrawList()を利用して描画を行うときには,ImGui::GetCursorScreenPos()で描画位置のオフセットを取得して, 描画が終わったらImGui::Dummy()を使って描画された領域をダミーの矩形で埋めると,うまい感じにレイアウトが決まります。
リアルタイムで,作業バッファの内容を画面中に表示する機能も作りました。
並べて比較したり,作業中のバッファをツリーで表示できるのは便利です。
ImTextureIDの実体はvoid*です。ImGui組み込みの実装にもよるのですが,テクスチャの寿命管理がちゃんとしていればImGui::Image()でテクスチャの描画が簡単に出来ます。
作業バッファを見るには,コード中で
// (処理) // ... DEBUG_DRAW(pDeviceContext,"pfx/glare/source", m_pGlareSourceTextureView);
のようなマクロから,コピー元のテクスチャとそのキーを指定すると,デバッグ描画が必要となっているならば,表示用のテクスチャにコピーされます。
ImGuiは便利ですね。