ocornut/imgui

GitHub: ocornut/imgui

一款轻量、无依赖的 C++ 即时模式 GUI 库,专为快速构建调试工具、内容创作工具和数据可视化界面而设计。

Stars: 71702 | Forks: 11592

# Dear ImGui
"给某人一个状态,他一天后就会有一个 bug;但教他如何在两个必须保持同步的独立位置表示状态,他将终身与 bug 为伴。"
-ryg [![Build Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9622f6f24d144138.svg)](https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/998ede7a3f144138.svg)](https://github.com/ocornut/imgui/actions?workflow=static-analysis) [![Tests Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3c374df302144139.svg)](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)支持持续的开发和维护。另请参阅 [Funding](https://github.com/ocornut/imgui/wiki/Funding) 页面。 | [简介](#the-pitch) - [用法](#usage) - [工作原理](#how-it-works) - [版本与更新日志](#releases--changelogs) - [演示](#demo) - [入门与集成](#getting-started--integration) | :----------------------------------------------------------: | | [作品展示](#gallery) - [支持,常见问题](#support-frequently-asked-questions-faq) - [如何帮助](#how-to-help) - **[资助与赞助商](https://github.com/ocornut/imgui/wiki/Funding)** - [致谢](#credits) - [许可证](#license) | | [Wiki](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 的设计旨在**实现快速迭代**,并**赋能程序员**创建**内容创作工具和可视化/调试工具**(而非面向普通终端用户的 UI)。为了实现这一目标,它倾向于简单和高产,因此缺乏某些更高级库中常见的功能。除其他外,不支持完整的国际化(从右到左文本、双向文本、文本整形等)和无障碍功能。 Dear ImGui 特别适合集成到游戏引擎(用于工具开发)、实时 3D 应用程序、全屏应用程序、嵌入式应用程序,或任何操作系统功能非标准的控制台平台应用程序中。 - 最小化状态同步。 - 最小化用户端的 UI 相关状态存储。 - 最小化设置和维护工作。 - 易于创建作为动态数据集镜像的动态 UI。 - 易于创建代码驱动和数据驱动的工具。 - 易于创建临时的短期工具以及长期、更复杂的工具。 - 易于修改和改进。 - 可移植,最小化依赖,可在目标平台(游戏主机、手机等)上运行。 - 高效的运行时和内存消耗。 - 经过实战检验,被[游戏行业的许多主要参与者](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)使用。 ### 用法 **Dear ImGui 的核心包含在几个与平台无关的文件中**,您可以轻松地在您的应用程序/引擎中编译它们。即仓库根文件夹中的所有文件(`imgui*.cpp`、`imgui*.h`)。**不需要特定的构建过程**:您可以将所有文件添加到您现有的项目中。 [backends/](https://github.com/ocornut/imgui/tree/master/backends) 文件夹中提供了**适用于各种图形 API 和渲染平台的后端**,[examples/](https://github.com/ocornut/imgui/tree/master/examples) 文件夹中还提供了示例应用程序。您也可以创建自己的后端。任何可以渲染带纹理三角形的地方,都可以渲染 Dear ImGui。 希望使用 module 的 C++20 用户可以使用第三方扩展 [stripe2933/imgui-module](https://github.com/stripe2933/imgui-module)。 有关更多详细信息,请参阅本文档的 [入门与集成](#getting-started--integration) 部分。 在您的应用程序中设置好 Dear ImGui 后,您可以在程序循环的\_任何地方\_使用它: ``` 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); ``` sample code output (dark) sample code output (light) ``` // 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 floats ImGui::ColorEdit4("Color", my_color); // Generate samples and plot them 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); // Display contents in a scrolling region 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](https://github.com/user-attachments/assets/6c76658c-302f-403b-af26-d517e2bfb0d4) Dear ImGui 允许您**创建复杂的工具**以及非常短命的工具。在短期使用的极端情况下:利用现代编译器的 Edit&Continue(热代码重载)功能,您可以在应用程序运行时添加一些小部件来调整变量,并在一分钟后删除该代码!Dear ImGui 不仅仅用于调整数值。您可以通过仅发出文本命令来使用它跟踪正在运行的算法。您可以将它与您自己的反射数据一起使用,以实时浏览数据集。您可以用它来暴露引擎中子系统的内部结构,以创建日志记录器、检查工具、分析器、调试器,甚至是整个游戏制作编辑器/框架等。 ### 工作原理 IMGUI 范式通过其 API 试图从用户的角度最大限度地减少多余的状态复制、状态同步和状态保留。它比传统的保留模式接口更不易出错(代码更少,bug 更少),并且适合创建动态用户界面。请查阅 Wiki 的 [About the IMGUI paradigm](https://github.com/ocornut/imgui/wiki#about-the-imgui-paradigm) 部分以了解更多详情。 Dear ImGui 输出顶点缓冲区和命令列表,您可以轻松地在应用程序中渲染它们。渲染它们所需的 draw call 和状态更改次数相当少。因为 Dear ImGui 不知道也不直接接触图形状态,您可以在代码的任何地方调用其函数(例如,在运行算法的中间,或在您自己的渲染过程中)。请参阅 examples/ 文件夹中的示例应用程序,获取有关如何将 Dear ImGui 与您现有代码库集成的说明。 _一个常见的误解是将即时模式 GUI 与即时模式渲染混为一谈,后者通常意味着在调用 GUI 函数时用一堆低效的 draw call 和状态更改来轰炸您的驱动程序/GPU。这**不是** Dear ImGui 所做的。Dear ImGui 输出顶点缓冲区和一小组 draw call 批次。它从不直接接触您的 GPU。draw call 批次相当优化,您可以稍后在您的应用程序中甚至远程渲染它们。_ ### 版本与更新日志 有关带装饰的更新日志,请参阅 [Releases](https://github.com/ocornut/imgui/releases) 页面。 阅读更新日志是了解 Dear ImGui 所提供功能的好方法,也许还能给您带来一些关于您一直忽略的功能的灵感! ### 演示 调用 `ImGui::ShowDemoWindow()` 函数将创建一个展示各种功能和示例的演示窗口。该代码始终可在 `imgui_demo.cpp` 中找到以供参考。 - [Demo 的 Web 版本](https://pthom.github.io/imgui_manual_online/manual/imgui_manual.html)(含源代码浏览器),由 [@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, built 2026/02/25, master) 或 [旧版二进制文件](https://www.dearimgui.com/binaries)。 ### 作品展示 使用 Dear ImGui 的示例项目:[Tracy](https://github.com/wolfpld/tracy) (profiler)、[ImHex](https://github.com/WerWolv/ImHex) (十六进制编辑器/数据分析)、[RemedyBG](https://remedybg.itch.io/remedybg) (debugger) 以及[数百个其他项目](https://github.com/ocornut/imgui/wiki/Software-using-Dear-ImGui)。 有关更多用户提交的使用 Dear ImGui 的项目截图,请查看 [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agallery)! 有关第三方小部件和扩展的列表,请查看 [Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions) wiki 页面。 | | | |--|--| | 自定义引擎 [erhe](https://github.com/tksuoran/erhe) (docking 分支)
[![erhe](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/80149774e8144203.jpg)](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://static.pigsec.cn/wp-content/uploads/repos/2026/03/4432e8bfd1144204.jpg)](https://cloud.githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png) | | 自定义引擎 (无标题)
[![editor white](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/c35cbc82ba144205.jpg)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) | Tracy Profiler ([github](https://github.com/wolfpld/tracy))
[![tracy profiler](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/39f24f8b52144206.jpg)](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 集成到您现有的代码库中应该不需要一个小时。如果您仔细阅读,时间会更短。 - [Backends](https://github.com/ocornut/imgui/blob/master/docs/BACKENDS.md) 指南解释了后端正在做什么,并提供了实现自定义后端的说明。您也可以参考我们约 20 个后端的源代码来了解它们是如何工作的。 - 通常,**请务必花时间阅读 [FAQ](https://www.dearimgui.com/faq)、注释和示例应用程序!** 官方维护的后端(位于仓库中): - 渲染器:DirectX9, DirectX10, DirectX11, DirectX12, Metal, 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) 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 (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) 生成),您可以使用它们的元数据输出为其他语言生成绑定。 Useful extensions [实用扩展/小部件](https://github.com/ocornut/imgui/wiki/Useful-Extensions) wiki 页面: - 自动化/测试、文本编辑器、节点编辑器、时间轴编辑器、绘图、软件渲染器、远程网络访问、内存编辑器、gizmo 等。著名且维护良好的扩展 [ImPlot](https://github.com/epezent/implot) 和 [Dear ImGui Test Engine](https://github.com/ocornut/imgui_test_engine)。 另请参阅 [Wiki](https://github.com/ocornut/imgui/wiki) 获取更多链接和想法。 ### 支持,常见问题解答 (FAQ) 请参阅:[常见问题解答 (FAQ)](https://github.com/ocornut/imgui/blob/master/docs/FAQ.md),其中回答了常见问题。 请参阅:[入门指南](https://github.com/ocornut/imgui/wiki/Getting-Started) 和 [Wiki](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) 了解自动化与测试。 为了让搜索引擎抓取 wiki,这里有一个 [可抓取 Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki) 的链接(非人类阅读用,[原因在此](https://github-wiki-see.page/))。 刚入门?对于遇到编译/链接/运行问题或字体加载问题的首次用户,请使用 [GitHub Discussions](https://github.com/ocornut/imgui/discussions)。对于任何其他问题、bug 报告、请求、反馈,请在 [GitHub Issues](https://github.com/ocornut/imgui/issues) 上发帖。请仔细阅读并填写 New Issue 模板。 付费企业客户可获得私人支持(电子邮件:_contact @ dearimgui dot com_)。 **我应该使用哪个版本?** 我们偶尔会标记 [Releases](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` 分支。该分支定期与 master 保持同步。 **谁在使用 Dear ImGui?** 请参阅 [Quotes](https://github.com/ocornut/imgui/wiki/Quotes)、[Funding & Sponsors](https://github.com/ocornut/imgui/wiki/Funding) 和 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) Wiki 页面,了解谁在使用 Dear ImGui。如果可以的话,请添加您的游戏/软件!另外,请查看 [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agallery)! ## 如何帮助 **我能帮什么忙?** - 请参阅 [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues)。 - 您可以帮助开发并提交 pull request!请理解,提交 PR 意味着您也在请求维护者审查您的代码,然后永远接手其维护工作。PR 的制作应既符合最终用户的利益,也有助于维护者理解和接受它。 - 在 [Wiki](https://github.com/ocornut/imgui/wiki/) 上查看 [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) 以获取更多想法。 - 成为一名[资助支持者](https://github.com/ocornut/imgui/wiki/Funding)!让您的公司通过开具发票的赞助/维护或购买 [Dear ImGui Test Engine](https://github.com/ocornut/imgui_test_engine) 的许可证来为该项目提供资金支持(请联系:contact AT dearimgui DOT com)。 ## 许可证 Dear ImGui 根据 MIT 许可证授权,有关更多信息,请参阅 [LICENSE.txt](https://github.com/ocornut/imgui/blob/master/LICENSE.txt)。
标签:C++, Dear ImGui, Direct3D, DirectX, GUI, LangChain, Metal, Mutation, OpenGL, UI框架, Vulkan, 即时模式, 可视化, 图形用户界面, 嵌入式GUI, 工具开发, 开源库, 搜索引擎爬虫, 数据擦除, 无依赖, 渲染, 游戏开发, 游戏引擎, 轻量级