imgui 使ってみた
マルチプラットフォームのGUIフレームワークです
テストアプリ用途によさげ
さすがフランス人エスプリが効いてる
1.どこにあるの?
git clone https://github.com/ocornut/imgui.git -b v1.75
/imgui/examples にサンプルプログラムあり
2.どうやって使うの?
VisualStudioの場合、imgui_examples.slnを開く
[本筋と関係ない話]
.natvisってなんじゃらほいと思ってググったら、Debugger Visualizerというデバッガでいい感じに表示してもらうためのVSの機能らしい
3.自分のアプリに組み込みたい
[Win32 / DirectX11 の場合]
1.空の[Win32 プロジェクト]作成
2.プロジェクトに以下のcppを追加
[imgui 本体]
imgui.cpp
imgui_draw.cpp
imgui_widget.cpp
[imgui プラットフォームごとの固有実装]
imgui_impl_dx11.cpp
imgui_impl_win32.cpp
3.追加のインクルードディレクトリにクローンしたimguiを追加
4.追加のライブラリディレクトリに$(DXSDK_DIR)Lib/x86を追加
※Win10ならDirectX SDKいらない希ガス…
(追記:WindowsSDKが入っていれば$(DXSDK_DIR)なくても大丈夫です)
※プラットフォームx64の場合は/x64に変えてね
5.追加のライブラリファイルにd3d11.libを追加
6.example_win32_directx11/main.cppを持ってきて、一部改変(というか不要なのを削除)
// Main loop
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while (msg.message != WM_QUIT)
{
// Poll and handle messages (inputs, window resize, etc.)
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
if (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
continue;
}
// Start the Dear ImGui frame
ImGui_ImplDX11_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
/* ここに追加したいGUIを書く */
ImGui::Text("Hello, world");
// Rendering
ImGui::Render();
g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, NULL);
g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, (float*)&clear_color);
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
g_pSwapChain->Present(1, 0); // Present with vsync
//g_pSwapChain->Present(0, 0); // Present without vsync
}
[Win32 / DirectX12 の場合]
/imgui/examples/example_win32_dx12/ を参照してください
拙Win10環境で動作することを確認しました
その他
どんなGUIパーツがあるかは以下がよくまとまっています
また、高いポータビリティから、以下のRust向けの本でも使われているみたいです
謎の企業でも使われているっぽい!
ちなみにMITライセンスです いいね!