机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
Dear ImGui
(这个库在一个自由和宽松的许可下可用,但需要财务支持以维持其持续改进。除了维护和稳定性之外,还有许多理想的功能尚未添加。如果您的公司正在使用 Dear ImGui,请考虑联系。)
企业:通过开具发票的赞助/支持合同支持持续开发和维护:
电子邮件:contact @ dearimgui dot com
个人:在 这里 支持持续开发和维护。另请参阅 Funding 页面。
| 提案 - 使用方法 - 工作原理 - 版本发布与更新日志 - 演示 - 入门指南与集成 |
|---|
| 画廊 - 支持,常见问题 - 如何帮助 - 资金与赞助 - 鸣谢 - 许可证 |
| 维基 - 扩展 - 语言绑定与框架后端 - 使用 Dear ImGui 的软件 - 用户引用 |
球场
Dear ImGui 是一个**无臃肿的C 语言图形用户界面库。它输出优化顶点缓冲区,你可以随时在支持3D流水线的应用中渲染。它快速、便携、不依赖渲染器且自成体系(无外部依赖)。
亲爱的 ImGui 旨在实现快速迭代,并赋能程序员创建内容创建工具和可视化/调试工具(而非面向普通终端用户的用户界面)。它偏重简洁和高效,缺乏一些高级库常见的功能。其中包括不支持完全国际化(从右到左的文本、双向文本、文本形状等)和无障碍功能。
Dear ImGui 特别适合集成到游戏引擎(用于工具)、实时3D应用、全屏应用、嵌入式应用,或任何操作系统功能非标准的主机平台上的应用中。
- 尽量减少状态同步。
- 尽量减少用户端的UI相关状态存储。
- 尽量减少安装和维护。
- 很容易用来创建动态UI,这些UI是动态数据集的反映。
- 易于使用,用于创建基于代码和数据驱动的工具。
- 易于使用,既可创建临时短寿命工具,也用于创建长寿命、更复杂的工具。
- 很容易被修改和改进。
- 便携,尽量减少依赖,运行目标(主机、手机等)。
- 高效的运行时间和内存消耗。
- 经过实战考验,被游戏行业的许多主要参与者使用。
用途
Dear ImGui 的核心是自包含在少数几个与平台无关的文件中,你可以轻松地将它们编译到你的应用程序/引擎中。它们都是存储库根文件夹中的文件(imgui*.cpp,imgui*.h)。不需要特定的构建过程:你可以将所有文件添加到你现有的项目中。
为各种图形 API 和渲染平台提供的后端 位于 backends/ 文件夹中,示例应用程序则位于 examples/ 文件夹中。你也可以创建自己的后端。只要你能渲染带纹理的三角形,就可以渲染 Dear ImGui。
C 20 个希望使用某个模块的用户可以使用 stripe2933/imgui-module 第三方扩展。
有关更多详细信息,请参见本文档的 入门与集成 部分。
在您的应用程序中设置 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);
// 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();
Dear ImGui 允许你创建复杂的工具,也允许非常短命的工具。短命的极端部分:利用现代编译器的 Edit&Continue(热代码重载)功能,你可以添加几个控件,在应用运行时调整变量,然后一分钟后删除代码!亲爱的 ImGui 不仅仅是用来调整数值。你可以通过发送文本命令来追踪运行中的算法。你可以结合你自己的反射数据实时浏览数据集。你可以用它来暴露引擎子系统的内部结构,创建日志器、检查工具、分析器、调试器、完整的游戏编辑器/框架等。
工作原理
IMGUI 范式通过其 API 尝试从用户的角度最小化多余的状态复制、状态同步和状态保留。它比传统的保留式接口更不容易出错(代码更少,错误更少),并且适合创建动态用户界面。有关更多详细信息,请查看 Wiki 的 关于 IMGUI 范式 部分。
Dear ImGui 输出顶点缓冲区和命令列表,你可以在应用中轻松渲染。渲染它们所需的绘制调用和状态变化数量相当少。因为 Dear ImGui 不直接知道或触及图形状态,你可以在代码中的任何位置调用它的函数(例如在运行算法中,或在你自己的渲染过程中)。请参阅示例/文件夹中的示例应用,了解如何将 Dear ImGui 与现有代码库集成。
_A常见的误解是把即时模式GUI误认为即时模式渲染,这通常意味着在调用GUI函数时,给驱动或GPU大量低效的绘制调用和状态变化。这不是Dear ImGui做的。Dear ImGui输出顶点缓冲区和一小串绘图调用批处理。它从不直接接触你的GPU。绘图调用批处理相当优化,你可以在应用里甚至在remotely._渲染
发布与更新日志
请参阅 Releases 页面以查看精美的更新日志。阅读更新日志是了解 Dear ImGui 提供内容的好方法,也可能会给你一些启发,让你注意到之前一直忽略的一些功能!
演示
调用 ImGui::ShowDemoWindow() 函数将创建一个演示窗口,展示各种功能和示例。代码始终可以在 imgui_demo.cpp 中参考。
- imgui_explorer:带源码浏览器的演示网页版,感谢 @pthom 提供。
你应该能够从源代码中构建这些示例。如果不行,请告诉我们!如果你想快速浏览一些 Dear ImGui 的功能,可以在这里下载演示应用的 Windows 二进制文件:
- imgui-demo-binaries-20260225.zip(Windows,1.92.6,构建于 2026/02/25,master 分支)或 较早的二进制文件。
画廊
使用 Dear ImGui 的示例项目:Tracy(性能分析器)、ImHex(十六进制编辑器/数据分析)、RemedyBG(调试器)以及 数百个其他项目。
想查看更多用户提交的使用 Dear ImGui 的项目截图,请查看 画廊主题!
有关第三方控件和扩展的列表,请查看 有用的扩展/控件 维基页面。
| 自定义引擎 erhe(对接分支) |
用于 魔域奇兵:龙之陷阱(2017)的自定义引擎 |
| 自定义引擎(未命名) |
Tracy 分析器 (github) |
入门与整合
请参阅 入门指南 了解详细信息。
在大多数平台上,并且使用 C 时,你应该能够使用组合的 imgui_impl_xxxx 后端而无需修改(例如 imgui_impl_win32.cpp 和 imgui_impl_dx11.cpp)。如果你的引擎支持多平台,考虑使用更多的 imgui_impl_xxxx 文件而不是重写它们:这将为你节省工作量,并且可以立即运行 Dear ImGui。如果你愿意,你可以在之后决定使用自定义引擎函数重写一个自定义后端。
将Dear ImGui集成到你的自定义引擎中,主要是1)接线鼠标/键盘/游戏手柄输入 2)上传贴图到GPU/渲染引擎 3)提供一个渲染函数,可以创建/更新贴图并渲染纹理三角形。这正是后端正在做的事情。
- examples/ 文件夹包含了设置窗口并使用标准后端的应用程序。
- Getting Started 指南提供了使用标准后端将 imgui 集成到现有应用程序中的说明。理论上,如果支持库已经链接,将 Dear ImGui 集成到现有代码库中应该不到一小时。如果你仔细阅读,则所需时间会更少。
- Backends 指南解释了后端的作用,并提供了实现自定义后端的说明。你也可以参考我们约 20 个后端的源代码来了解它们的工作原理。
- 通常,一定要花时间阅读常见问题、评论和示例应用程序!
官方维护的后端(仓库中):
- 渲染器:DirectX9、DirectX10、DirectX11、DirectX12、Metal 3/4、OpenGL/ES/ES2、SDL_GPU、SDL_Renderer2/3、Vulkan、WebGPU。
- 平台:GLFW、SDL2/SDL3、Win32、Glut、OSX、Android。
- Framework: Allegro5, Emscripten.
第三方后端/绑定 维基页面:
- 语言: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......
- Frameworks: 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),你可以使用它们的元数据输出为其他语言生成绑定。
有用的扩展/小部件 维基页面:
- 自动化/测试,文本编辑器,节点编辑器,时间线编辑器,绘图,软件渲染器,远程网络访问,内存编辑器,小工具等。值得注意且支持良好的扩展包括 ImPlot、ImPlot3d 和 Dear ImGui 测试引擎。
另请参见 Wiki 获取更多链接和想法。
支持,常见问题解答(FAQ)
参见:常见问题解答 (FAQ),这里回答了常见问题。
参见:关于IMGUI范式的文章 以阅读/学习即时模式GUI(Immediate Mode GUI)范式。
查看:即将到来的变化。
请参阅:Dear ImGui 测试引擎 测试套件 用于自动化和测试。
为了使搜索引擎能够抓取维基,这里有一个 可抓取的维基 链接(不是给人类看的,原因如下)。
刚开始使用?对于首次使用的用户,如果在编译/链接/运行或加载字体时遇到问题,请使用 GitHub 讨论。对于任何其他问题、错误报告、请求或反馈,请在 GitHub 问题 上发布。请仔细阅读并填写新问题模板。
私人支持可用于支付商业客户(电子邮件:contact @ dearimgui dot com)。
我应该获取哪个版本?
我们偶尔会标记 发布(附带详细的发布说明),但通常同步到最新的 master 或 docking 分支是安全且推荐的。该库相当稳定,回归问题在报告后通常会很快修复。高级用户可能希望使用带有 多视口 和 停靠 功能的 docking 分支。此分支会定期与 master 同步。
谁在使用 Dear ImGui?
请参阅 Quotes、Funding & Sponsors 和 Software using Dear ImGui 维基页面,以了解谁在使用 Dear ImGui。如果可以,请添加您的游戏/软件!另外,请查看 Gallery Threads!
如何帮助
我能帮您什么吗?
- 请参阅 GitHub 论坛/问题。
- 您可以帮助开发并提交拉取请求!请理解,提交 PR 也意味着您请求维护者审查您的代码,然后永久接管其维护。PR 应该既考虑最终用户的利益,也便于维护者理解并接受它。
- 请参阅 Wiki 上的 需要帮助 页面,获取更多想法。
- 成为 资金支持者!让您的公司通过开具发票的赞助/维护费或购买 Dear ImGui 测试引擎 的许可来为该项目提供经济支持(请联系:contact AT dearimgui DOT com)。
赞助商
持续的 Dear ImGui 开发一直由用户和私人赞助者提供财政支持。
详情请参见 当前和过去 Dear ImGui 资助支持者和赞助商的详细列表。
从2014年11月到2019年12月,持续的开发也得到了 Patreon 用户和个人捐款的财政支持。
感谢所有过去和现在的支持者帮助保持这个项目的活力和发展!
Dear ImGui 使用为开源项目免费提供的软件和服务:
- PVS-Studio 用于静态分析(支持 C/C++/C#/Java)。
- GitHub actions 用于持续集成系统。
- OpenCppCoverage 用于代码覆盖率分析。
致谢
由 Omar Cornut 以及所有直接或间接的 贡献者 在 GitHub 上开发。该库的早期版本在 Media Molecule 的支持下开发,并首次在游戏 Tearaway(PS Vita)中内部使用。
常规贡献者包括 Rokas Kupstys @rokups (2020-2022):对自动化系统和回归测试贡献了大量工作,这些现在可以在 Dear ImGui Test Engine 中使用。
维护/支持合同、赞助发票和其他 B2B 交易由 Disco Hello 托管和处理。
Omar: "我第一次发现 IMGUI 范式是在 Q-Games,当时 Atman Binstock 在代码库中放入了他自己的简单实现,我花了相当多的时间改进和思考它。事实证明,Atman 是通过与 Casey 的合作直接接触到这个概念的。当我搬到 Media Molecule 时,我重写了一个新库,试图克服我之前使用的第一个库的缺陷和局限性。它就变成了这个库,从那时起,我花了大量时间进行反复迭代和改进。"
嵌入了 Tristan Grimmer 的 ProggyClean 字体(MIT 许可证)。
嵌入了 Disco Hello、Tristan Grimmer 的 ProggyForever 字体(MIT 许可证)。
嵌入了 Sean Barrett 的 stb_textedit.h, stb_truetype.h, stb_rect_pack.h(公共领域)。
早期版本的灵感、反馈和测试来自:Casey Muratori、Atman Binstock、Mikko Mononen、Emmanuel Briney、Stefan Kamoda、Anton Mikhailov、Matt Willis。特别感谢 Alex Evans、Patrick Doane、Marco Koegler 的热心协助。同时感谢所有在 GitHub 上提供反馈、问题和补丁的人。
许可证
Dear ImGui 使用 MIT 许可协议,更多信息请参阅 LICENSE.txt。
- 本文标题:imgui - Dear ImGui:面向 C 的无臃肿图形用户界面
- 本文链接:https://www.cn121.com/gameengine/ocornut-imgui.html
- 原项目:ocornut/imgui 版权归原作者 ocornut 及贡献者所有
- 收录信息:本站于 2026-10-05 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 ocornut/imgui。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。