1. 项目概览
1.1 基本信息
| 维度 | 信息 |
|---|---|
| 项目名称 | Dear ImGui (Immediate Mode Graphical User interface) |
| 组织/作者 | ocornut / Omar Cornut(法国独立开发者,前 Media Molecule 工程师) |
| GitHub | https://github.com/ocornut/imgui |
| 开源协议 | MIT——极宽松,允许闭源商用,几乎无限制(仅需保留版权声明) |
| 主要语言 | C++(C++11 起;另有 C++20 模块支持) |
| Star 数 | 75,000+(2026-07 查询,GitHub C++ GUI 类目第一) |
| 累计提交 | 10,000+ Commits |
| Release 数 | 155 Tags,约 40+ 个正式 Release(v1.0 ~ v1.92.6) |
| 贡献者 | 400+ |
| 创建时间 | 2014 年 7 月(原型始于 2012 年,最初在 Media Molecule 内部用于游戏 Tearaway) |
| 最近更新 | 2026-07-24(持续每日活跃开发) |
| 官网 | https://www.dearimgui.com |
| 语言生态 | 第三方绑定覆盖 40+ 语言:C、C#、Python、Rust、Go、Java、Lua、Zig、Swift 等 |
| 框架集成 | 可嵌入 Unity、Unreal Engine 4/5、Godot、Blender、Qt、Cocos2d-x、Defold、Photoshop 等 |
1.2 项目定位
Dear ImGui 不是传统的"桌面应用 GUI 框架"(如 Qt、GTK)。它定位于一个极简、高性能、渲染器无关的即时模式 GUI 库,专为以下场景设计:
- 游戏引擎内的开发工具(材质编辑器、关卡编辑器、动画蓝图调试)
- 实时 3D 应用的调试/HUD 叠加层(性能分析器、状态监控面板)
- 内容创作工具的 UI(3D 建模器、动画编辑器的内部面板)
- 嵌入式/主机平台的非标准 UI(Nintendo Switch、PlayStation、Android 等)
- 科学计算/数据可视化的参数调节面板
- 快速原型与临时工具(Hot Reload 期间就地加按钮调试变量)
项目的核心哲学浓缩为一句话:"代码即 UI"——没有 UI 设计器、没有 XML/JSON 布局文件、没有样式表,开发者直接用 C++ 函数调用描述每一帧的 UI 结构,UI 逻辑与业务逻辑天然融合。
1.3 发展历程
| 阶段 | 时间 | 关键事件 |
|---|---|---|
| 原型期 | 2012 年 | Omar Cornut 在 Media Molecule 期间构思并原型化 ImGui 概念,首次用于 PS Vita 游戏 Tearaway |
| 开源发布 | 2014 年 7 月 | 首个公开版本在 GitHub 发布(MIT 协议),迅速在游戏开发者社区获得关注 |
| 社区爆发 | 2014-2017 年 | 凭借极简集成体验,在游戏行业中快速传播;大量第三方绑定和扩展涌现;Omar 业余维护 |
| 全职投入 | 2017 年底 | Omar 离开雇主,全职投入 Dear ImGui 开发维护,依靠企业赞助和商业支持合同维持 |
| Docking 分支 | 2018 年 | 推出 docking 分支,引入 Docking(停靠面板) 与 Multi-Viewport(多视口) 两大旗舰功能 |
| Tables API | 2021 年 | v1.83 引入完整的 Tables API,媲美专业表格控件的列排序/筛选/冻结等能力 |
| Test Engine | 2021 年 | 发布闭源商业产品 Dear ImGui Test Engine,为企业提供自动化测试套件 |
| 十年里程碑 | 2024 年 | 发布 v1.91,回顾十年历程:从内部工具到 75,000+ Stars 的全球性基础设施级项目 |
| 当前 | 2024-2026 年 | 持续高频迭代(v1.92.x),重点在 Metal 4 后端、WebGPU、性能优化和社区治理 |
2. 核心能力
2.1 即时模式 GUI 范式(Immediate Mode GUI)
Dear ImGui 的核心创新在于即时模式编程范式,与 Qt/MFC/GTK 等保留模式(Retained Mode)形成根本性区别:
保留模式(传统):创建持久化的 UI 对象树 → 注册事件回调 → 框架管理生命周期和状态同步 → 数据变更时手动更新 UI 对象。
即时模式(ImGui):每帧都在主循环中直接调用 UI 函数 → 函数立即返回交互结果 → 无持久化 UI 对象、无事件回调、无状态同步。
// 典型 ImGui 使用模式——代码即 UI,无回调地狱
ImGui::Begin("Inspector");
ImGui::SliderFloat("Speed", &speed, 0.0f, 10.0f);
if (ImGui::Button("Reset")) { speed = 1.0f; } // 按钮点击直接内联处理
ImGui::End();
开发效率跃升:将"创建 UI → 连接信号槽 → 管理生命周期 → 处理事件"的 4 步流程压缩为"写函数调用"1 步。
2.2 窗口与布局系统
- 多窗口管理:支持拖拽、缩放、折叠、滚动、子窗口嵌套
- Docking(停靠面板):类似 Visual Studio 的 IDE 式布局,可将窗口停靠/分离/标签化(docking 分支)
- Multi-Viewport(多视口):将 ImGui 窗口拖出主窗口到独立的操作系统窗口中(多显示器支持)
- Columns / Tables:列布局和完整的数据表格控件(排序、筛选、固定列、行选择)
- Menu Bar:完整菜单栏/上下文菜单/弹出菜单支持
2.3 内置控件库
| 类别 | 控件 |
|---|---|
| 文本 | Text, TextColored, TextWrapped, LabelText, BulletText, SeparatorText |
| 按钮 | Button, SmallButton, ArrowButton, InvisibleButton, ImageButton, RadioButton |
| 输入 | InputText(单行/多行/密码/数字), InputInt, InputFloat, InputDouble |
| 滑动条 | SliderFloat, SliderInt, SliderAngle, VSliderFloat, SliderScalar |
| 拖拽 | DragFloat, DragInt, DragScalar(精度可控拖拽调整) |
| 选择器 | Checkbox, Combo, ListBox, Selectable(支持多选) |
| 颜色 | ColorEdit3/4(RGB/HSV 颜色编辑器+拾色器) |
| 日期时间 | DatePicker, TimePicker(第三方扩展,ImGui 源生支持自定义) |
| 树形控件 | TreeNode, TreeNodeEx, CollapsingHeader |
| 表格 | BeginTable / EndTable(排序、列宽调整、固定行列、筛选、跨单元格) |
| Tab 页 | TabBar / TabItem |
| 弹窗 | OpenPopup, BeginPopup, BeginPopupContextItem, BeginPopupModal |
| 提示 | Tooltip, BeginTooltip, SetTooltip |
| 进度与图表 | ProgressBar, PlotLines, PlotHistograms |
| 子窗口 | BeginChild(独立滚动区域) |
| 无边框绘制 | ImDrawList API:直接绘制线、矩形、圆、多边形、贝塞尔曲线、文本、图像 |
2.4 扩展生态系统(核心扩展)
| 扩展 | 说明 |
|---|---|
| ImPlot | 即时模式 2D 图表库(折线、散点、柱状、饼图、热力图等),6,500+ Stars |
| ImPlot3D | 即时模式 3D 图表库 |
| ImGuizmo | 3D 空间变换组件(平移/旋转/缩放,类似 Unity 编辑器) |
| ImNodes | 节点编辑器(蓝图/材质编辑器风格) |
| Dear ImGui Test Engine | 官方闭源自动化测试引擎(商业授权) |
| imnodes | 交互式节点图编辑器 |
| ImGuiColorTextEdit | 语法高亮文本编辑器 |
| imgui_markdown | Markdown 渲染器 |
2.5 渲染器与平台后端
Dear ImGui 通过"核心 + 后端"分离架构,实现了与几乎所有图形 API 和平台框架的对接。
官方维护的后端(随仓库发布):
| 类型 | 支持列表 |
|---|---|
| 图形 API | DirectX 9/10/11/12、OpenGL 2/3/ES2/ES3、Vulkan、Metal 3/4、WebGPU、SDL_GPU、SDL_Renderer2/3 |
| 平台层 | Win32、GLFW、SDL2/SDL3、OSX (Cocoa)、Android、Glut |
| 框架 | Allegro5、Emscripten (WebAssembly) |
第三方框架绑定(约 50+):Unity、Unreal Engine 4/5、Godot、Qt/QtDirect3D、Cocos2d-x、Defold、Blender、Photoshop、raylib、SFML、Sokol、Ogre3D、Nintendo Switch/WiiU/3DS (homebrew) 等。
3. 技术架构
3.1 整体架构
Dear ImGui 采用三层解耦架构,将平台无关核心逻辑与平台特定后端彻底分离:
┌──────────────────────────────────────────────┐
│ 用户代码 │
│ (ImGui::Text/Button/Slider/Window 等 API) │
├──────────────────────────────────────────────┤
│ 核心库(平台无关) │
│ imgui.cpp → UI 逻辑、布局引擎、ID 系统 │
│ imgui_draw.cpp → 几何生成、顶点缓冲输出 │
│ imgui_widgets.cpp → 内置控件实现 │
│ imgui_tables.cpp → 表格系统 │
│ imgui.h → 公共 API 头文件 │
│ imgui_internal.h → 内部 API(高级定制用) │
│ imgui_demo.cpp → 完整 Demo 窗口(文档+示例) │
├──────────────────────────────────────────────┤
│ 平台/渲染器后端 │
│ 平台后端: imgui_impl_win32/glfw/sdl/... │
│ → 处理键盘/鼠标/游戏手柄/剪贴板/IME 输入 │
│ 渲染后端: imgui_impl_dx11/vulkan/opengl3/... │
│ → 上传字体纹理、渲染 ImDrawData 到 GPU │
├──────────────────────────────────────────────┤
│ GPU / 操作系统 │
└──────────────────────────────────────────────┘
核心数据流:
- Input Phase:平台后端采集键盘/鼠标/触摸/手柄事件,写入
ImGuiIO结构体 - New Frame:
ImGui::NewFrame()重置内部状态,准备新一帧的 UI 构建 - UI Construction:用户代码调用
ImGui::Begin/Button/Slider/End等构建 UI,框架即时计算布局 - Render:
ImGui::Render()生成ImDrawData(顶点缓冲 + 绘制命令列表) - GPU Submission:渲染后端将
ImDrawData转换为 GPU 绘制调用
3.2 关键设计原理
即时模式 ≠ 即时渲染:Dear ImGui 每帧构建 UI 逻辑树,但不立即向 GPU 发送绘制调用。它在 Render() 阶段将整个 UI 批处理为一组优化的顶点缓冲和绘制命令——这与传统即时模式渲染有本质区别,避免了大量零散的 draw call。
ID 堆栈系统:ImGui 通过 ID 堆栈(PushID/PopID)为每个控件分配唯一标识符,以此追踪哪些控件在帧间保持一致(用于保留焦点、滚动位置等少量 UI 状态)。这是一种强制性的"受控状态保留"——框架接管了极少但必要的 UI 状态管理。
零外部依赖:核心库仅引用 3 个内置的 STB 单头文件库(stb_rectpack.h、stb_textedit.h、stb_truetype.h),所有字体光栅化、文本编辑逻辑均在仓库内自行实现,真正做到"clone 即用"。
4. 市场定位与竞品分析
4.1 竞争格局
Dear ImGui 的竞争对手可按下述三类划分:
A. 传统保留模式 GUI 框架(不同赛道,但部分场景重叠)
| 维度 | Dear ImGui | Qt | GTK/gtkmm | wxWidgets |
|---|---|---|---|---|
| 编程范式 | 即时模式 | 保留模式(信号槽) | 保留模式(信号) | 保留模式(事件表) |
| 学习成本 | 极低(几行代码入门) | 高(MOC 预编译、元对象系统) | 中高 | 中 |
| 运行时开销 | 极低(~1MB 核心) | 高(~50MB+ 基础库) | 中 | 中 |
| 渲染方式 | 输出顶点缓冲→用户渲染 | 自绘/平台原生控件 | 平台原生控件 | 平台原生控件 |
| 面向用户 | 开发者/内部工具 | 终端用户 | 终端用户 | 终端用户 |
| 跨平台 | 依赖图形 API | 完善(含移动端) | 完善 | 完善 |
| 主题/样式 | 编程式定制 | QSS(类 CSS) | CSS | 平台原生 |
| 国际化 | 基础(无 RTL/双向文本) | 完善 | 完善 | 完善 |
| 许可证 | MIT | LGPL/商用 | LGPL | wxWindows License |
| Star 数 | 75,000+ | — | — | — |
B. 同赛道即时模式 GUI 库
| 维度 | Dear ImGui | Nuklear | RmlUi | NanoGUI |
|---|---|---|---|---|
| Stars | 75,000+ | ~9,000 | ~3,300 | ~1,100 |
| 范式 | 即时模式纯代码 | 即时模式纯代码 | HTML/CSS 声明式 | 保留式 + NanoVG |
| 语言 | C++ | C (ANSI) | C++ | C++ |
| 许可证 | MIT | MIT/Public Domain | MIT | BSD |
| 依赖 | 零外部依赖 | 零外部依赖 | 少量依赖 | NanoVG + GLFW |
| 成熟度 | 极高(10年+,400+贡献者) | 中(维护不活跃) | 中 | 低 |
| 社区生态 | 极丰富(40+语言绑定,数百扩展) | 一般 | 一般 | 弱 |
| 内置控件 | 极丰富(表格/Docking/Tab/菜单等) | 基础 | 基于HTML/CSS控件集 | 基础 |
| 图形 API | DX9-12/GL/Vulkan/Metal/WebGPU | GL/Vulkan/DX | 自定义渲染后端 | GL / Metal |
| 特色 | Docking/Multi-Viewport | 纯 C 实现,极简 | 设计师友好(类 CSS) | Retina 支持 |
C. 游戏引擎内置 UI 系统
| 引擎 | 方案 | 与 Dear ImGui 关系 |
|---|---|---|
| Unreal Engine | UMG (Unreal Motion Graphics) / Slate | ImGui 常用于编辑器内调试面板,大量插件将其嵌入 UE |
| Unity | UGUI / UI Toolkit / IMGUI(遗留) | Unity 编辑器中 IMGUI 系统正是受 Dear ImGui 启发 |
| Godot | 内置 Control 节点系统 | 第三方集成 ImGui 用于编辑器扩展 |
4.2 差异化优势
- 集成速度无人能及:10 分钟内集成到任意 C++ 3D 应用(复制 3 个 .cpp + 3 个 .h 到工程,编译,在主循环加 5 行代码)
- 渲染器不可知论:不绑定任何图形 API,"只要能画纹理三角形就能渲染 ImGui",适配所有主流 API 且可自定义
- 社区规模断层领先:75,000+ Stars,远超所有竞品之和;40+ 语言绑定生态,形成正反馈循环
- 性能极致优化:核心 ~1MB,帧成本极低(通常 < 0.5ms),适合嵌入到对帧预算敏感的 3A 游戏和主机平台
- 工业级验证:被 Blizzard、Ubisoft、Epic、Sony、EA、Nintendo 等一线游戏公司的内部引擎和工具链使用
- MIT 协议零摩擦:无商用顾虑,无传染性条款,无需开源衍生代码
4.3 目标用户群
| 用户群体 | 典型场景 | 使用动机 |
|---|---|---|
| 游戏开发者 | 游戏内调试面板、关卡编辑器、材质/动画编辑器、性能 Profiler、AI 行为树调试 | 极低集成成本,不影响游戏渲染管线 |
| 引擎/中间件开发者 | 引擎内置工具 GUI、渲染参数调节面板、场景检查器 | 为引擎用户提供轻量工具界面 |
| 实时 3D/VR/AR 开发者 | 渲染参数调节、场景编辑、空间标注 | 支持自定义渲染后端,可嵌入任意 3D 环境 |
| 科学计算/仿真工程师 | 参数扫描面板、仿真状态监控、实时数据可视化 | 快速搭建参数调节界面,配合 ImPlot 绘图 |
| 嵌入式/主机开发者 | 设备配置界面、诊断工具、现场调试面板 | 零依赖,可运行在资源受限平台 |
| 独立开发者/Hobbyist | 快速 UI 原型、游戏修改工具、Mod 编辑器 | 无需学习复杂框架,几行代码出界面 |
| 企业级工具开发者 | 内部开发工具、数据管道监控、自动化脚本面板 | 相比 Qt 部署轻量,学习曲线平缓 |
5. 商业模式
Dear ImGui 并非传统商业公司,其运营模式为"开源核心 + 企业赞助 + 闭源增值产品":
| 模式 | 说明 |
|---|---|
| 核心库 MIT 开源 | Dear ImGui 核心完全免费、MIT 协议,任何个人/企业可无限制使用 |
| 企业赞助合同 | 企业通过 invoice-based sponsorship 支持项目持续开发(联系 contact@dearimgui.com),Omar 全职维护 |
| Dear ImGui Test Engine | 闭源商业产品,提供自动化测试引擎和测试套件,面向需要质量保证的企业客户(独立授权,需联系获取) |
| 个人捐赠 | 通过 PayPal 接受个人开发者捐赠 |
| 咨询/支持服务 | 为企业提供私有支持、定制开发咨询(付费) |
关键数据:
- 2020 年投入 ~2500 小时 R&D
- 2021 年投入 ~1600 小时 R&D
- 商业赞助方(公开):Blizzard、Ubisoft、Epic Games、Sony、Activision、NVIDIA、Google、Adobe、Autodesk、Microsoft 等(详见 Funding Wiki)
- 核心维护者 Omar Cornut 自 2017 年底起全职投入,为该项目持续超过 7 年的全职开发
商业启示:Dear ImGui 是开源可持续发展的成功案例——通过为游戏/工具行业的头部企业提供不可替代的基础设施级价值,换取这些企业自愿性的财务支持。这与 Red Hat 模式不同(不卖订阅),而是靠核心维护者的全职投入 + 头部企业自觉赞助的精英式单点维护模式。
6. 售前切入点
6.1 为什么客户需要它?
问题场景 1:游戏/引擎团队需要为内部工具构建 UI,但又不想引入 Qt 的重量级依赖
一个游戏引擎团队需要为关卡编辑器、材质编辑器、动画状态机等内部工具构建功能齐全的 UI。传统方案是使用 Qt、HTML/CEF 或自研 UI 系统——前者引入数百 MB 依赖和额外构建配置(需要 Qt 维护团队),后者需要投入巨大工程资源且难以维护。Dear ImGui 提供第三种选择:复制几个文件到工程,用写 C++ 函数的方式在几天内搭出功能齐全的工具界面,运行时仅 ~1MB 内存开销,不干扰引擎渲染管线。
问题场景 2:实时 3D/VR 应用中需要叠加调试面板或参数调节 UI
在 Vulkan/DirectX/Metal 等底层图形 API 上运行的实时 3D 应用(仿真训练、数字孪生、自动驾驶可视化),原生 GUI 方案极其稀缺。Dear ImGui 作为渲染器无关的即时模式 UI,可以完美嵌入任何图形管线,开发者可在渲染循环的任意位置插入 UI 调用,无需适配操作系统原生窗口系统。
问题场景 3:嵌入式/主机平台需要开发诊断/配置界面
Nintendo Switch、PlayStation、Xbox 或嵌入式 Linux 设备上,传统 GUI 框架要么不存在,要么资源占用过大。Dear ImGui 的零依赖特性使其可以运行在任何能渲染纹理三角形的平台上,从 Android 到裸机嵌入式均可。
问题场景 4:快速迭代期需要一个"用完即扔"的参数调节界面
开发者在调参(Shader 参数、物理引擎参数、AI 行为权重)时,每次改代码重新编译周期太长。使用 Dear ImGui,可以直接在主循环中加几行 Slider/Input 代码,利用 C++ 的 Edit & Continue (Hot Reload) 即时调参,调好后删掉 UI 代码即可——这种"临时 UI"需求没有任何其他框架能满足。
6.2 售前话术
| 客户角色 | 话术建议 |
|---|---|
| 技术总监/架构师 | "Dear ImGui 不是又一个大而全的 GUI 框架——它是一个极致的点解决方案:为开发工具和调试面板而生。集成成本为 O(复制文件) 而非 O(引入框架),零运行时负担,MIT 协议无法律风险。Blizzard、Ubisoft、Epic 都在用——这是游戏行业的'基础设施共识'。" |
| 图形/引擎工程师 | "你可以把 ImGui 看作一个'顶点缓冲工厂'——你的渲染后端只需接收它输出的 ImDrawData 来画纹理三角形,剩下的 UI 交互逻辑框架全包。它不碰你的图形状态,不会打乱你的渲染管线。" |
| 工具链开发者 | "不用写 XML 布局文件,不用连接信号槽,不用管理窗口生命周期。你需要的每个按钮、滑块、表格,都是一行 C++ 函数调用,在运行时实时构建。Docking 分支让你轻松拼出 Visual Studio 级别的复杂工具界面。" |
| 项目经理/采购决策者 | "社区 75,000+ Stars 证明这不是玩具项目,而是经过 10 年打磨的生产级基础设施。MIT 协议意味着零许可证费用和零法律顾虑。如果需要企业级支持和自动化测试,官方有商业 Test Engine 和服务合同可用。" |
| 嵌入式/主机开发者 | "在 Switch、PS5、嵌入式 Linux 上跑 Qt 几乎不可能,但 Dear ImGui 可以——它核心只有几个 .cpp 文件,零外部依赖,内存占用极低,只要你的平台能画纹理三角形就行。" |
7. 风险与挑战
| 风险 | 严重程度 | 描述 | 缓解措施 |
|---|---|---|---|
| 单点维护者风险(Bus Factor=1) | 🔴 高 | Omar Cornut 是唯一核心维护者,若他无法继续维护,项目可能面临停滞 | 项目已建立完善的 CI/CD 和测试体系;社区贡献者基础广泛(400+);企业可考虑与 Omar 建立商业关系获取 SLA 保障 |
| 不适合终端用户应用程序 | 🟡 中(需正确选型) | 无原生操作系统控件(文件对话框、系统托盘等)、无辅助功能、无真正 RTL/国际化支持、无面向消费者的 UI/UX | 对内部工具/调试面板场景影响很小;可与 Qt 等传统框架混合使用(Qt 做主体 UI,ImGui 做内嵌工具面板) |
| Docking 分支与 master 分支分离 | 🟡 中 | Docking/Multi-Viewport 功能在 docking 分支长期开发,尚未合并 master(虽已高度可用) | 分支定期与 master 同步;生产项目中大量用户已直接使用 docking 分支 |
| 主题/样式定制为编程式 | 🟢 低(对目标用户而言) | 无可视化主题编辑器、无 CSS 式样式表,定制外观需写 C++ 代码操作 ImGuiStyle 结构体 | 对开发者工具场景可接受;第三方主题库(ImThemes)提供丰富预设 |
| 高 DPI / 多分辨率适配需手动处理 | 🟢 低 | 无自动布局管理器(如 Qt Layout),复杂布局需手动计算坐标和尺寸 | 对于工具 UI 场景,相对坐标计算可接受;GetContentRegionAvail() 等辅助函数简化适配 |
| 企业支持非标准化 | 🟡 中 | 不像 Red Hat 或 Qt Company 提供 SLA 保障的企业支持计划 | 可通过直接联系 Omar 获取商业支持合同;社区 GitHub Issues/Discussions 响应速度通常很快 |
| 学习范式转换成本 | 🟢 低 | 习惯保留模式(Qt/MFC)的开发者需要适应"每帧重建 UI"的思维模式 | 上手极快(几小时内可产出功能 UI);丰富的 Demo 窗口和文档降低了转换成本 |
8. 一句话结论
Dear ImGui 是面向 C++ 开发者工具和调试 UI 的"瑞士军刀"——它不是 Qt 的替代品,而是填补了一个 Qt 永远无法填满的生态位:在 3D 管线应用中用最小摩擦、最低成本、最快速度构建功能齐全的内部工具界面。对游戏工作室、引擎团队、嵌入式开发者、实时 3D 应用开发者而言,引入 Dear ImGui 是低风险、高回报的基础设施级决策——10 分钟集成换来数年效率提升,MIT 许可证零成本零风险,75,000+ Stars 的社区认可度和 Ubisoft/Blizzard/Epic/Sony 等头部用户的背书已充分验证其生产级可靠性。