“如果给某人提供状态,他们总有一天会遇到 bug,但教他们如何在两个必须保持同步的不同位置表示状态,他们就会终生遇到 bug。” -ryg
(该库采用免费且宽松的许可证,但需要资金支持才能持续改进。除了维护和稳定性之外,还有许多理想的功能尚待添加。如果您的公司正在使用 Dear ImGui,请考虑与我们联系。)
企业:通过发票赞助/支持合同支持持续开发和维护:
电子邮件:contact @ dearimgui dot com个人: 在此
支持持续开发和维护。另请参阅资金页面。
宣传-使用方法-工作原理-发布和更新日志-演示-入门和集成 |
---|
画廊-支持、常见问题- 如何提供帮助-资金和赞助商-积分-许可证 |
Wiki -扩展-语言绑定和框架后端-使用 Dear ImGui 的软件-用户引言 |
Dear ImGui 是一个不臃肿的 C++ 图形用户界面库。它输出优化的顶点缓冲区,您可以在支持 3D 流水线的应用程序中随时渲染。它速度快、可移植、渲染器无关且功能完备(无需任何外部依赖)。
Dear ImGui 旨在实现快速迭代,并帮助程序员创建内容创建工具和可视化/调试工具(而非面向普通终端用户的 UI)。为了实现这一目标,它更注重简洁性和高效性,但缺少一些高级库中常见的功能。此外,它不支持完整的国际化(从右到左的文本、双向文本、文本整形等)和辅助功能。
Dear ImGui 特别适合集成到游戏引擎(用于工具)、实时 3D 应用程序、全屏应用程序、嵌入式应用程序或任何操作系统功能非标准的控制台平台上的应用程序中。
最小化状态同步。
最小化用户端与 UI 相关的状态存储。
最大限度地减少设置和维护。
易于使用,创建反映动态数据集的动态 UI。
易于使用来创建代码驱动和数据驱动的工具。
易于使用,可创建临时的短期工具和长期、更复杂的工具。
易于破解和改进。
可移植、最小化依赖性、在目标上运行(控制台、电话等)。
高效的运行时间和内存消耗。
经过实战检验,被游戏行业的许多主要参与者所使用。
Dear ImGui 的核心包含在几个与平台无关的文件中,您可以轻松地在应用程序/引擎中编译它们。它们都是存储库根文件夹中的文件(imgui*.cpp、imgui*.h)。无需任何特定的构建过程。您可以将 .cpp 文件添加到现有项目中。
backends/文件夹中提供了各种图形 API 和渲染平台的后端, examples/文件夹中提供了示例应用程序。您也可以创建自己的后端。任何可以渲染纹理三角形的地方,都可以渲染 Dear ImGui。
有关更多详细信息,请参阅本文档的入门和集成部分。
在您的应用程序中设置 Dear ImGui 之后,您可以在程序循环中的任何位置使用它:
ImGui::Text("Hello, world %d", 123);if (ImGui::Button("Save")) MySaveFunction();ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
// Create a window called "My First Tool", with a menu bar.ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);if (ImGui::BeginMenuBar())
{ if (ImGui::BeginMenu("File"))
{ if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ } if (ImGui::MenuItem("Save", "Ctrl+S")) { /* Do stuff */ } if (ImGui::MenuItem("Close", "Ctrl+W")) { my_tool_active = false; } ImGui::EndMenu();
} ImGui::EndMenuBar();
}// Edit a color stored as 4 floatsImGui::ColorEdit4("Color", my_color);// Generate samples and plot themfloat samples[100];for (int n = 0; n < 100; n++)
samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);ImGui::PlotLines("Samples", samples, 100);// Display contents in a scrolling regionImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");ImGui::BeginChild("Scrolling");for (int n = 0; n < 50; n++) ImGui::Text("%04d: Some text", n);ImGui::EndChild();ImGui::End();
Dear ImGui 不仅允许您创建复杂的工具,还允许您创建非常短暂的工具。在极短的生命周期方面,您可以使用现代编译器的“编辑并继续”(热代码重载)功能,在应用程序运行时添加一些小部件来调整变量,并在一分钟后删除代码!Dear ImGui 的功能远不止调整值。您可以通过发送文本命令来跟踪正在运行的算法。您可以将其与您自己的反射数据一起使用,以实时浏览数据集。您可以使用它来公开引擎中子系统的内部结构,创建记录器、检查工具、分析器、调试器、完整的游戏制作编辑器/框架等等。
IMGUI 范式通过其 API 尝试从用户的角度最小化多余的状态重复、状态同步和状态保留。与传统的保留模式界面相比,它更不容易出错(代码更少,错误更少),并且适合创建动态用户界面。更多详细信息,请参阅 Wiki 的“关于 IMGUI 范式”部分。
Dear ImGui 输出顶点缓冲区和命令列表,您可以在应用程序中轻松渲染它们。渲染它们所需的绘制调用和状态更改次数非常少。由于 Dear ImGui 不直接感知或接触图形状态,因此您可以在代码中的任何位置调用其函数(例如,在运行算法的过程中,或在您自己的渲染过程中)。请参阅 examples/ 文件夹中的示例应用程序,了解如何将 Dear ImGui 与您现有的代码库集成。
一个常见的误解是将立即模式 GUI 误认为立即模式渲染,这通常意味着在调用 GUI 函数时,会用大量低效的绘制调用和状态更改来重击你的驱动程序/GPU。Dear ImGui 并非如此。Dear ImGui 输出的是顶点缓冲区和一小串绘制调用批次。它永远不会直接接触你的 GPU。绘制调用批次已经达到了相当理想的优化,你可以稍后在应用程序中甚至远程渲染它们。
请参阅发布页面,查看精心设计的变更日志。阅读变更日志是了解 Dear ImGui 最新功能的好方法,或许还能让你了解一些你之前一直忽略的功能!
调用该ImGui::ShowDemoWindow()
函数将创建一个演示窗口,展示各种功能和示例。代码可在 中随时参考imgui_demo.cpp
。演示窗口如下所示。
您应该能够从源代码构建示例。如果不行,请告诉我们!如果您想快速了解 Dear ImGui 的一些功能,可以在此处下载演示应用的 Windows 二进制文件:
imgui-demo-binaries-20250625.zip(Windows,1.92.0,构建于 2025/06/25,master)或更旧的二进制文件。
演示应用程序不支持 DPI 感知,因此在 4K 屏幕上可能会出现一些模糊。为了在您的应用程序中实现 DPI 感知,您可以以不同的比例加载/重新加载字体,并相应地缩放样式style.ScaleAllSizes()
(请参阅常见问题解答)。
有关详细信息,请参阅入门指南。
在大多数平台上,使用 C++ 时,您应该能够组合使用imgui_impl_xxxx后端而无需修改(例如imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
)。如果您的引擎支持多平台,请考虑使用更多 imgui_impl_xxxx 文件,而不是重写它们:这样可以减少您的工作量,并且您可以立即运行 Dear ImGui。如果您愿意,可以稍后决定使用自定义引擎函数重写自定义后端。
将 Dear ImGui 集成到您的自定义引擎中需要:1) 连接鼠标/键盘/游戏手柄输入;2) 将纹理上传到您的 GPU/渲染引擎;3) 提供可以绑定纹理并渲染带纹理三角形的渲染函数,这本质上就是后端所做的工作。examples /文件夹中包含的应用程序正是用于执行这些操作:设置窗口并使用后端。如果您遵循入门指南,理论上集成 Dear ImGui 应该只需不到一小时。 请务必花时间阅读常见问题解答、评论和示例应用程序!
官方维护的后端/绑定(在存储库中):
渲染器:DirectX9、DirectX10、DirectX11、DirectX12、Metal、OpenGL/ES/ES2、SDL_GPU、SDL_Renderer2/3、Vulkan、WebGPU。
平台:GLFW、SDL2/SDL3、Win32、Glut、OSX、Android。
框架:Allegro5、Emscripten。
第三方后端/绑定wiki 页面:
语言:C、C# 和:Beef、ChaiScript、CovScript、Crystal、D、Go、Haskell、Haxe/hxcpp、Java、JavaScript、Julia、Kotlin、Lobster、Lua、Nim、Odin、Pascal、PureBasic、Python、ReaScript、Ruby、Rust、Swift、Zig...
框架:AGS/Adventure Game Studio、Amethyst、Blender、bsf、Cinder、Cocos2d-x、Defold、Diligent Engine、Ebiten、Flexium、GML/Game Maker Studio、GLEQ、Godot、GTK3、Irrlicht Engine、JUCE、LÖVE+LUA、Mach Engine、Magnum、Marmalade、Monogame、NanoRT、nCine、Nim Game Lib、Nintendo 3DS/Switch/WiiU(自制)、Ogre、openFrameworks、OSG/OpenSceneGraph、Orx、Photoshop、px_render、Qt/QtDirect3D、raylib、SFML、Sokol、Unity、Unreal Engine 4/5、UWP、vtk、VulkanHpp、VulkanSceneGraph、Win32 GDI、WxWidgets。
许多绑定是自动生成的(通过旧的cimgui或较新的/实验性的dear_bindings),您可以使用它们的元数据输出来生成其他语言的绑定。
有用的扩展/小部件wiki 页面:
自动化/测试、文本编辑器、节点编辑器、时间线编辑器、绘图、软件渲染器、远程网络访问、内存编辑器、小工具等。值得注意且得到良好支持的扩展包括ImPlot和Dear ImGui Test Engine。
另请参阅Wiki以获取更多链接和想法。
使用 Dear ImGui 的示例项目:Tracy(分析器)、ImHex(十六进制编辑器/数据分析)、RemedyBG(调试器)以及数百个其他项目。
要查看更多用户提交的使用 Dear ImGui 的项目截图,请查看Gallery Threads!
有关第三方小部件和扩展的列表,请查看有用的扩展/小部件wiki 页面。
定制引擎二合一(对接分支)![]() | 《神奇小子:龙之陷阱》(2017)的定制引擎![]() |
自定义引擎(无标题)![]() | Tracy Profiler(github)![]() |
请参阅:常见问题解答 (FAQ),其中解答了常见问题。
请参阅:有关 IMGUI 范例的文章,以阅读/了解即时模式 GUI 范例。
请参阅:即将发生的变化。
请参阅:亲爱的 ImGui 测试引擎 +用于自动化和测试的测试套件。
为了让搜索引擎抓取 wiki,这里提供了可抓取 Wiki的链接(不适合人类,原因如下)。
开始使用?对于首次使用的用户,如果在编译/链接/运行或加载字体时遇到问题,请使用GitHub Discussions。如有任何其他问题、错误报告、请求或反馈,请在GitHub Issues上发帖。请仔细阅读并填写新 Issue 模板。
付费商业客户可获得私人支持(电子邮件:contact @ dearimgui dot com)。
我应该购买哪个版本?
我们偶尔会标记发布版本(并附上详细的发布说明),但通常情况下,同步到最新版本master
或docking
分支版本是安全的,建议这样做。该库相当稳定,遇到回归问题时通常会很快得到修复。高级用户可能希望使用docking
具有多视口和停靠功能的分支版本。此分支会定期与主分支保持同步。
谁使用 Dear ImGui?
请参阅报价、资金和赞助商以及使用 Dear ImGui 的软件Wiki 页面,了解哪些用户在使用 Dear ImGui。如果可以,请添加您的游戏/软件!另请参阅图库主题!