ocornut/imgui
摘要
Dear ImGui 是一个轻量级的 C++ GUI 库,专为快速迭代和创建调试/工具 UI 而优化,广泛应用于游戏引擎和实时 3D 应用。
Dear ImGui: 轻量级 C++ 图形用户界面,依赖极少
查看缓存全文
缓存时间: 2026/07/27 13:40
ocornut/imgui 来源:https://github.com/ocornut/imgui Dear ImGui ===== “教人状态管理,bug 会伴随一天;教人用两个独立位置表示状态并保持同步,bug 会伴随一生。” – ryg –– 构建状态 (https://github.com/ocornut/imgui/actions?workflow=build) 静态分析状态 (https://github.com/ocornut/imgui/actions?workflow=static-analysis) 测试状态 (https://github.com/ocornut/imgui_test_engine/actions?workflow=tests) (本库采用自由且宽松的许可证,但需要资金支持以维持其持续改进。除了维护和稳定性之外,还有许多理想的功能尚待添加。如果贵公司正在使用 Dear ImGui,请考虑联系我们。) 企业:通过带发票的赞助/支持合同支持持续开发与维护:邮箱:contact @ dearimgui dot com 个人:在此处 (https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WGHNC6MBFLZ2S) 支持持续开发与维护。另请参阅资助页面 (https://github.com/ocornut/imgui/wiki/Funding)。 | 核心卖点 - 使用方法 - 工作原理 - 发布与变更日志 - 演示 - 入门与集成 | :–––––––––––––––––––––––––––––: | | 图库 - 支持与常见问题 - 如何提供帮助 - 资助与赞助商 (https://github.com/ocornut/imgui/wiki/Funding) - 致谢 - 许可证 | | 维基 (https://github.com/ocornut/imgui/wiki) - 扩展 (https://github.com/ocornut/imgui/wiki/Useful-Extensions) - 语言绑定与框架后端 (https://github.com/ocornut/imgui/wiki/Bindings) - 使用 Dear ImGui 的软件 (https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) - 用户评价 (https://github.com/ocornut/imgui/wiki/Quotes) | ### 核心卖点 Dear ImGui 是一个无膨胀的 C++ 图形用户界面库。它输出优化的顶点缓冲区,您可以在支持 3D 渲染管线的应用程序中随时渲染。它快速、可移植、与渲染器无关,且自包含(无外部依赖)。 Dear ImGui 旨在支持快速迭代和赋能程序员,以创建内容创作工具和可视化/调试工具(而非面向普通最终用户的界面)。它为此目标追求简单性和生产力,因此缺少一些高级库中常见的功能。其中包括:不支持完整的国际化(从右至左文本、双向文本、文本塑形等)以及无障碍访问功能。 Dear ImGui 特别适合集成到游戏引擎(用于工具制作)、实时 3D 应用程序、全屏应用程序、嵌入式应用程序,或任何操作系统功能非标准的游戏机平台应用程序中。 - 最小化状态同步。 - 最小化用户端的 UI 相关状态存储。 - 最小化设置与维护。 - 易于创建反映动态数据集的动态 UI。 - 易于创建代码驱动和数据驱动的工具。 - 易于创建临时性的短期工具和长期、更复杂的工具。 - 易于修改和改进。 - 可移植,最小化依赖,可在目标平台(游戏机、手机等)上运行。 - 高效的运行时和内存消耗。 - 久经考验,被游戏行业许多主要厂商使用 (https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)。 ### 使用方法 Dear ImGui 的核心自包含在少量与平台无关的文件中,您可以轻松地将其编译到您的应用程序/引擎中。这些文件是仓库根文件夹中的所有文件(imgui*.cpp、imgui*.h)。不需要特定的构建过程:您可以将所有文件添加到现有项目中。 针对各种图形 API 和渲染平台的后端 在 backends/ (https://github.com/ocornut/imgui/tree/master/backends) 文件夹中提供,同时 examples/ (https://github.com/ocornut/imgui/tree/master/examples) 文件夹中提供示例应用程序。您也可以创建自己的后端。任何可以渲染纹理三角形的地方,都可以渲染 Dear ImGui。 希望使用模块的 C++20 用户可以使用 stripe2933/imgui-module (https://github.com/stripe2933/imgui-module) 第三方扩展。 有关更多详细信息,请参阅本文档的入门与集成部分。 在您的应用程序中设置好 Dear ImGui 后,您可以在程序循环中的_任何地方_使用它: cpp ImGui::Text("Hello, world %d", 123); if (ImGui::Button("Save")) MySaveFunction(); ImGui::InputText("string", buf, IM_COUNTOF(buf)); ImGui::SliderFloat("float", &f, 0.0f, 1.0f); cpp // 创建一个名为“My First Tool”的窗口,带菜单栏。 ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar); if (ImGui::BeginMenuBar()) { if (ImGui::BeginMenu("File")) { if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* 执行操作 */ } if (ImGui::MenuItem("Save", "Ctrl+S")) { /* 执行操作 */ } if (ImGui::MenuItem("Close", "Ctrl+W")) { my_tool_active = false; } ImGui::EndMenu(); } ImGui::EndMenuBar(); } // 编辑以 4 个浮点数存储的颜色 ImGui::ColorEdit4("Color", my_color); // 生成样本并绘制它们 float samples[100]; for (int n = 0; n < 100; n++) samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f); ImGui::PlotLines("Samples", samples, 100); // 在滚动区域中显示内容 ImGui::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(); my_first_tool_v192 6 Dear ImGui 允许您创建复杂的工具以及非常临时的工具。在临时性的极端情况下:使用现代编译器的“编辑并继续”(热代码重载)功能,您可以在应用程序运行时添加几个控件来调整变量,然后在一分钟后删除代码! Dear ImGui 不仅用于调整值。您可以通过发出文本命令来跟踪正在运行的算法。您可以结合自己的反射数据来实时浏览数据集。您可以用它来暴露引擎子系统的内部结构,创建日志记录器、检查工具、性能分析器、调试器,甚至是完整的游戏制作编辑器/框架等。 ### 工作原理 IMGUI 范式通过其 API 尝试从用户角度最小化多余的状态复制、状态同步和状态保持。与传统的 retained-mode 界面相比,它更不容易出错(代码更少,bug 也更少),并且适合创建动态用户界面。 请查看维基的关于 IMGUI 范式 (https://github.com/ocornut/imgui/wiki#about-the-imgui-paradigm) 部分以获取更多详细信息。 Dear ImGui 输出您可以轻松在应用程序中渲染的顶点缓冲区和命令列表。渲染它们所需的绘制调用和状态更改数量相当少。由于 Dear ImGui 不直接了解或接触图形状态,您可以在代码中的任何地方调用其函数(例如,在正在运行的算法中间,或在您自己的渲染过程中)。 请参考 examples/ 文件夹中的示例应用程序,了解如何将 Dear ImGui 集成到您现有的代码库中。 一个常见的误解是将立即模式 GUI 与立即模式渲染混淆,后者通常意味着在调用 GUI 函数时,用大量低效的绘制调用和状态更改来冲击您的驱动/GPU。这不是 Dear ImGui 所做的。Dear ImGui 输出顶点缓冲区和一小批绘制调用批次。它从不直接接触您的 GPU。这些绘制调用批次相当优化,您可以稍后渲染它们,无论是在您的应用程序中还是远程渲染。 ### 发布与变更日志 请参阅发布页面 (https://github.com/ocornut/imgui/releases) 获取带有注释的变更日志。阅读变更日志是了解 Dear ImGui 提供的新功能的好方法,并且可能会给您带来一些您之前忽略的功能的想法! ### 演示 调用 ImGui::ShowDemoWindow() 函数将创建一个展示各种功能和示例的演示窗口。代码始终可以在 imgui_demo.cpp 中参考。 - imgui_explorer (https://pthom.github.io/imgui_explorer):带源代码浏览器的 Web 版本演示,由 @pthom (https://github.com/pthom) 提供。 您应该能够从源代码构建示例。如果不能,请告诉我们!如果您想快速了解一些 Dear ImGui 的功能,可以在此处下载演示应用程序的 Windows 二进制文件: - imgui-demo-binaries-20260225.zip (https://www.dearimgui.com/binaries/imgui-demo-binaries-20260225.zip) (Windows, 1.92.6, 构建于 2026/02/25, master 分支) 或更早的二进制文件 (https://www.dearimgui.com/binaries)。 ### 图库 使用 Dear ImGui 的示例项目:Tracy (https://github.com/wolfpld/tracy) (性能分析器)、ImHex (https://github.com/WerWolv/ImHex) (十六进制编辑器/数据分析)、RemedyBG (https://remedybg.itch.io/remedybg) (调试器) 以及数百个其他项目 (https://github.com/ocornut/imgui/wiki/Software-using-Dear-ImGui)。 有关使用 Dear ImGui 的更多用户提交截图,请查看图库主题 (https://github.com/ocornut/imgui/issues?q=label%3Agallery)! 有关第三方控件和扩展的列表,请查看实用扩展/控件 (https://github.com/ocornut/imgui/wiki/Useful-Extensions) 维基页面。 | | | |–|–| | 自定义引擎 erhe (https://github.com/tksuoran/erhe) (docking 分支)erhe (https://user-images.githubusercontent.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) | 用于 Wonder Boy: The Dragon’s Trap (http://www.TheDragonsTrap.com) (2017) 的自定义引擎the dragon’s trap (https://cloud.githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png) | | 自定义引擎 (未命名)editor white (https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) | Tracy Profiler (github (https://github.com/wolfpld/tracy))tracy profiler (https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v176/tracy_profiler.png) | ### 入门与集成 有关详细信息,请参阅入门指南 (https://github.com/ocornut/imgui/wiki/Getting-Started)。 在大多数平台上并使用 C++ 时,您应该能够使用 imgui_impl_xxxx (https://github.com/ocornut/imgui/tree/master/backends) 后端的组合而无需修改(例如 imgui_impl_win32.cpp + imgui_impl_dx11.cpp)。如果您的引擎支持多个平台,请考虑使用更多 imgui_impl_xxxx 文件,而不是重写它们:这将为您减少工作量,并且您可以立即运行 Dear ImGui。如果您愿意,您可以_稍后_决定使用您的自定义引擎函数重写一个自定义后端。 将 Dear ImGui 集成到您的自定义引擎中主要涉及 1) 连接鼠标/键盘/游戏手柄输入 2) 将纹理上传到您的 GPU/渲染引擎 3) 提供一个可以创建/更新纹理并渲染纹理三角形的渲染函数。这正是后端所做的事情。 - examples/ (https://github.com/ocornut/imgui/tree/master/examples) 文件夹中填充了设置窗口并使用标准后端的应用程序。 - 入门指南 (https://github.com/ocornut/imgui/wiki/Getting-Started) 提供了使用标准后端将 imgui 集成到现有应用程序中的说明。理论上,在链接了支持库的情况下,集成 Dear ImGui 到您现有的代码库所需时间不到一小时。仔细阅读的话时间会更短。 - 后端指南 (https://github.com/ocornut/imgui/blob/master/docs/BACKENDS.md) 说明了后端的功能,并提供了实现自定义后端的说明。您也可以参考我们约 20 个后端的源代码来了解它们的工作原理。 - 通常,确保花时间阅读 FAQ (https://www.dearimgui.com/faq)、注释和示例应用程序! 官方维护的后端(在仓库中): - 渲染器:DirectX9, DirectX10, DirectX11, DirectX12, Metal 3/4, OpenGL/ES/ES2, SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU。 - 平台:GLFW, SDL2/SDL3, Win32, Glut, OSX, Android。 - 框架:Allegro5, Emscripten。 第三方后端/绑定 (https://github.com/ocornut/imgui/wiki/Bindings) 维基页面: - 语言: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 (homebrew), 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 (https://github.com/cimgui/cimgui) 或我们更新的 dear_bindings (https://github.com/dearimgui/dear_bindings)),您可以使用它们的元数据输出来生成其他语言的绑定。 实用扩展/控件 (https://github.com/ocornut/imgui/wiki/Useful-Extensions) 维基页面:实用扩展缩略图 (https://github.com/ocornut/imgui/wiki/Useful-Extensions) - 自动化/测试、文本编辑器、节点编辑器、时间线编辑器、绘图、软件渲染器、远程网络访问、内存编辑器、小工具等。 值得注意且得到良好支持的扩展包括 ImPlot (https://github.com/epezent/implot)、ImPlot3d (https://github.com/brenocq/implot3d) 和 Dear ImGui Test Engine (https://github.com/ocornut/imgui_test_engine)。另请参阅维基 (https://github.com/ocornut/imgui/wiki) 以获取更多链接和想法。 ### 支持、常见问题 请参阅:常见问题 (FAQ) (https://github.com/ocornut/imgui/blob/master/docs/FAQ.md),其中回答了常见问题。 请参阅:入门指南 (https://github.com/ocornut/imgui/wiki/Getting-Started) 和维基 (https://github.com/ocornut/imgui/wiki) 以获取许多链接、参考资料和文章。 请参阅:关于 IMGUI 范式的文章 (https://github.com/ocornut/imgui/wiki#about-the-imgui-paradigm) 以阅读/了解立即模式 GUI 范式。 请参阅:即将进行的更改 (https://github.com/ocornut/imgui/wiki/Upcoming-Changes)。 请参阅:Dear ImGui Test Engine + Test Suite (https://github.com/ocornut/imgui_test_engine) 以了解自动化和测试。 为了让搜索引擎抓取维基,这里有一个可抓取维基的链接 (https://github-wiki-see.page/m/ocornut/imgui/wiki)(非人类阅读,原因在此 (https://github-wiki-see.page/))。 刚开始使用?对于首次使用遇到编译/链接/运行问题或字体加载问题的用户,请使用 GitHub Discussions (https://github.com/ocornut/imgui/discussions)。 对于任何其他问题、错误报告、请求、反馈,请在 GitHub Issues (https://github.com/ocornut/imgui/issues) 上发帖。请仔细阅读并填写新的 Issue 模板。 付费商业客户可获得私人支持(邮箱:contact @ dearimgui dot com)。 我应该获取哪个版本? 我们偶尔会标记发布版本 (https://github.com/ocornut/imgui/releases)(带有漂亮的发布说明),但通常建议同步到最新的 master 或 docking 分支,这通常是安全的。该库相当稳定,回归问题在报告后往往会很快修复。高级用户可能希望使用带有 Multi-Viewport (https://github.com/ocornut/imgui/wiki/Multi-Viewports) 和 Docking (https://github.com/ocornut/imgui/wiki/Docking) 的 docking 分支。
相似文章
MicroUI – 一个用ANSI C编写的小巧、可移植的即时模式UI库
MicroUI是一个用ANSI C编写的最小化、可移植的即时模式UI库,在固定的内存占用下提供窗口、按钮、滑块和文本框等基本控件。
Comfy-Org/ComfyUI
ComfyUI is an open-source, modular node-based AI engine for generating images, videos, 3D models, and audio, with support for state-of-the-art open-source models and cloud/desktop deployment.
展示HN:面向Ada的现代GUI库——CSS样式、XML界面与SDL3
Adi2是一个面向Ada的现代GUI库,提供CSS样式、基于XML的UI布局,并在SDL3上实现丰富内容渲染,同时支持WebAssembly和工具特性。
Gooey:面向 Zig 的 GPU 加速 UI 框架
Gooey 是一个面向 Zig 的 GPU 加速 UI 框架,通过 Metal、Vulkan/Wayland 和 WebGPU/WASM 支持 macOS、Linux 和浏览器。它提供声明式 UI、动画、主题、无障碍和零外部依赖。
2026年 Rust GUI 库调研
2026年 Rust GUI 库调研通过测试二维码生成器任务来评估各种框架,专注于易用性、功能和开发者体验。