Dear ImGui:73K Star 的 C++ 即时模式 GUI 库

Dear ImGui 在 GitHub 上拿到 73,821 Star,是 C++ 生态里最流行的即时模式图形界面库。

它干的事很简单:给程序员提供一套轻量 API,用来快速搭建调试工具、编辑器和可视化界面。不需要维护复杂的 UI 状态,调几行代码就能出一个带按钮、滑块、图表的面板。项目零外部依赖,MIT 协议开源。

1、 这是什么

Dear ImGui 是一个无依赖的 C++ GUI 库。它不直接操作 GPU,而是输出顶点缓冲和绘制命令列表,由你自己的渲染管线去画。

这套设计意味着它可以跑在任何能画三角形的地方:DirectX 9/10/11/12、OpenGL、Vulkan、Metal、WebGPU、SDL、GLFW……平台方面支持 Windows、macOS、Linux、Android,以及各种游戏主机。整个核心库就是根目录下几个 imgui*.cppimgui*.h 文件,不需要特殊构建流程,直接丢进项目编译即可。

正文顶部截图

2、 核心思路:即时模式

传统 GUI 框架是保留模式:你创建按钮对象,设置属性,框架在后台维护一整套状态树。状态一多,同步就容易出错,代码也越写越重。

Dear ImGui 用的是即时模式:每一帧你告诉它"画一个按钮",它画完就完事,不保留任何状态。好处是代码量极少,bug 也少。你可以在程序运行的任意位置插入几行代码,实时调参数,用完直接删掉。

用起来大概是这样:

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);

几行代码就能出一个带文本、按钮、输入框和滑块的界面。也可以做更复杂的工具:带菜单栏的窗口、颜色编辑器、实时波形图、带滚动区域的日志面板,README 里都有示例代码。

3、 生态和后端

README区域截图

项目仓库里自带约 20 个后端实现,覆盖 DirectX 9/10/11/12、OpenGL/ES、Vulkan、Metal、WebGPU 等主流图形 API,以及 Win32、GLFW、SDL2/SDL3、Android、macOS 等平台。大部分情况下直接组合现成的 imgui_impl_xxx 文件就能跑,不需要自己写后端。

第三方社区提供了 30 多种语言的绑定,包括 C#、Python、Rust、Go、Lua、Java、JavaScript 等。需要停靠窗口和多视口功能的话,可以切到 docking 分支,这个分支和主分支保持同步。

扩展方面也有不少成熟项目:图表库 ImPlot、3D 图表 ImPlot3d、自动化测试引擎 Dear ImGui Test Engine,还有节点编辑器、时间线编辑器、内存编辑器等各种第三方组件。

4、 谁在用

最典型的用户群是游戏引擎开发者。很多游戏工作室用 Dear ImGui 做关卡编辑器、资源浏览器、性能分析器、调试面板。项目 README 里引用了一句话:在游戏行业里有大量知名团队在使用它。

非游戏领域也有人用。十六进制编辑器 ImHex、性能分析器 Tracy、调试器 RemedyBG,都是基于 Dear ImGui 构建的工具。它的适用范围其实比"游戏开发"这个标签要宽,任何需要在 C++ 应用里快速加一层交互界面的场景都可以考虑。

5、 适合谁

写游戏引擎需要内建工具的开发者,做实时应用需要快速搭调试界面的人,或者在嵌入式、主机等平台上需要跨方案 GUI 的团队。

它不适合做面向终端用户的产品界面。没有国际化支持(从右到左文本、双向文本等都不支持),也没有无障碍功能。设计目标就是给程序员自己用的快速迭代工具,这一点从项目名里的 “Dear” 就能感觉到——它是写给开发者的。

计目标就是给程序员自己用的快速迭代工具,这一点从项目名里的 “Dear” 就能感觉到——它是写给开发者的。

更多推荐