デバッグ用にGUIが欲しいので,Dear ImGuiの組み込んだサンプルプログラムを作ってみました。
以前は自前でバックエンドを実装していたのですが,最近はImGui側でバックエンドが用意されているので,今回はそれを使う形にしてみました。
zipをダウンロードしたら展開して,組み込みしたいプロジェクトに配置してください。
DirectX12を対象としたwin32アプリケーションの場合,必要なソースコードは以下になりますので,これをプロジェクトに追加してください。
インクルードパスも忘れずに追加しておいてください。
まず初期化ですが,次のような感じでアプリケーションの初期化処理を行う箇所にImGui::CreateContext()の呼び出しと,ImGui_ImplWin32_Init(), ImGui_ImplDX12_Init()の呼び出しをそれぞれ行ってください。日本語フォントを使用した場合は,グリフ設定を忘れずに。
// ImGuiの初期化処理.
{
// コンテキスト作成.
ImGui::CreateContext();
// ダークカラースタイルに変更.
ImGui::StyleColorsDark();
// 日本語フォントの設定.
ImWchar const glyph_ranges[] = { 0x0020, 0xffd, 0 };
auto io = ImGui::GetIO();
[[maybe_unused]] auto font = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\meiryo.ttc", 18.0f, nullptr, glyph_ranges);
// Win32バックエンドの初期化.
if (!ImGui_ImplWin32_Init(m_hWnd))
{
ELOG("Error : ImGui_ImplWin32_Init() Failed.");
return false;
}
// DX12バックエンドの初期化.
ImGui_ImplDX12_InitInfo info = {};
info.Device = m_Device.Get();
info.CommandQueue = m_GraphicsQueue.Get();
info.NumFramesInFlight = 2;
info.RTVFormat = m_SwapChainFormat;
info.DSVFormat = m_DepthStencilFormat;
info.SrvDescriptorHeap = m_HeapRes.Get();
info.SrvDescriptorAllocFn = AllocDescriptor;
info.SrvDescriptorFreeFn = FreeDescriptor;
info.UserData = this;
if (!ImGui_ImplDX12_Init(&info))
{
ELOG("Error : ImGui_ImplDX12_Init() Failed.");
return false;
}
}続いて、描画処理です。描画処理の先頭でNewFrameを呼び出してください。次のような感じです。
// ImGuiのフレーム開始処理.
ImGui_ImplWin32_NewFrame();
ImGui_ImplDX12_NewFrame();
ImGui::NewFrame();上記を呼び出した後で,ImGuiの関数を呼び出してGUIを構築します。構築し終えたら,Direct3D 12のコマンドリストに描画コマンドを積みます。これを行うにはImGui::Render()とImGui_ImplDX12_RenderDrawData()を呼び出せば良いです。
// ImGuiの描画.
{
ImGui::Render();
ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), m_CommandList.Get());
}描画処理は以上です。
最後に終了処理を行います。下記のように,Shutdown()メソッドとDestroyContext()を呼び出してください。
// ImGuiの終了処理.
if (ImGui::GetCurrentContext() != nullptr)
{
ImGui_ImplDX12_Shutdown();
ImGui_ImplWin32_Shutdown();
ImGui::DestroyContext();
}ちゃんと正しく実装されていれば,このページ先頭にある画像のようにImGuiが描画されるはずです。
本ソースコードおよびプログラムはMITライセンスに準じます。
プログラムの作成にはWindows 11, およびMicrosoft Visual Studio 2026 Communityを用いています。