ImGuiでデバッグツール

以前,ImGuiの導入をしてから, 簡易的なプロファイラを作ったりしていたのですが, 思うところあって,いろいろ作り直しました。

f:id:hikita12312:20180317094721p:plain:w600

いかにも開発中って感じの画面になって良いです。

f:id:hikita12312:20180317094853p:plain:w600

プロファイラはツリー表示を導入したり,再帰構造を縦に並べて見やすくしてみたりと改善してみました。 利用時には,コード中に

BEGIN_GPU_MEASURE(pDeviceContext, "posteffect");
// (処理)
// ...
END_GPU_MEASURE(pDeviceContext);

みたいな感じのマクロで囲むとその範囲の測定を行います。測定範囲のネストも自動的に解決します。

ImGuiのサンプルにもありますが,ImGui::GetWindowDrawList()を利用して描画を行うときには,ImGui::GetCursorScreenPos()で描画位置のオフセットを取得して, 描画が終わったらImGui::Dummy()を使って描画された領域をダミーの矩形で埋めると,うまい感じにレイアウトが決まります。

f:id:hikita12312:20180317095412p:plain:w600

リアルタイムで,作業バッファの内容を画面中に表示する機能も作りました。 並べて比較したり,作業中のバッファをツリーで表示できるのは便利です。
ImTextureIDの実体はvoid*です。ImGui組み込みの実装にもよるのですが,テクスチャの寿命管理がちゃんとしていればImGui::Image()でテクスチャの描画が簡単に出来ます。 作業バッファを見るには,コード中で

// (処理)
// ...
DEBUG_DRAW(pDeviceContext,"pfx/glare/source", m_pGlareSourceTextureView);

のようなマクロから,コピー元のテクスチャとそのキーを指定すると,デバッグ描画が必要となっているならば,表示用のテクスチャにコピーされます。

ImGuiは便利ですね。