(该库可在免费且宽松的许可证下使用,但需要财务支持来维持其持续改进。除了维护和稳定性之外,还有许多理想的功能有待添加。如果您的公司正在使用 Dear ImGui,请考虑联系.)
企业:通过发票赞助/支持合同支持持续开发和维护:
电子邮件:联系@ Dearimgui dot com
个人:支持这里的持续开发和维护。另请参阅资金页面。
推介 - 使用 - 工作原理 - 发布和变更日志 - 演示 - 入门和集成 |
---|
图库 - 支持、常见问题解答 - 如何提供帮助 -资金和赞助商- 鸣谢 - 许可证 |
Wiki - 扩展 - 语言绑定和框架后端 - 使用 Dear ImGui 的软件 - 用户引用 |
Dear ImGui 是一个用于 C++ 的无膨胀图形用户界面库。它输出优化的顶点缓冲区,您可以随时在支持 3D 管道的应用程序中进行渲染。它快速、可移植、与渲染器无关并且独立(无外部依赖项)。
Dear ImGui 旨在实现快速迭代,并使程序员能够创建内容创建工具和可视化/调试工具(而不是普通最终用户的 UI)。它有利于实现这一目标的简单性和生产力,并且缺乏更高级库中常见的某些功能。除此之外,不支持完全国际化(从右到左文本、双向文本、文本整形等)和辅助功能。
Dear ImGui 特别适合集成到游戏引擎(用于工具)、实时 3D 应用程序、全屏应用程序、嵌入式应用程序或操作系统功能非标准的控制台平台上的任何应用程序。
Dear ImGui 的核心独立于一些与平台无关的文件中,您可以轻松地在应用程序/引擎中编译这些文件。它们是存储库根文件夹中的所有文件(imgui*.cpp、imgui*.h)。不需要特定的构建过程。您可以将 .cpp 文件添加到现有项目中。
backends/ 文件夹中提供了各种图形 API 和渲染平台的后端,以及 Examples/ 文件夹中的示例应用程序。您还可以创建自己的后端。任何可以渲染纹理三角形的地方,都可以渲染 Dear ImGui。
有关更多详细信息,请参阅本文档的入门和集成部分。
在您的应用程序中设置 Dear ImGui 后,您可以在程序循环中的_任何地方_使用它:
ImGui::Text ( " Hello, world %d " , 123 );
if (ImGui::Button( " Save " ))
MySaveFunction ();
ImGui::InputText ( " string " , buf, IM_ARRAYSIZE(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 允许您创建复杂的工具以及非常短暂的工具。在短暂性的极端方面:使用现代编译器的编辑和继续(热代码重新加载)功能,您可以添加一些小部件来在应用程序运行时调整变量,并在一分钟后删除代码! Dear ImGui 不仅仅用于调整值。您只需发出文本命令即可使用它来跟踪正在运行的算法。您可以将其与您自己的反射数据一起使用来实时浏览数据集。您可以使用它来公开引擎中子系统的内部结构,创建记录器、检查工具、分析器、调试器、整个游戏制作编辑器/框架等。
从用户的角度来看,IMGUI 范例通过其 API 尝试最大限度地减少多余的状态重复、状态同步和状态保留。与传统的保留模式界面相比,它更不容易出错(更少的代码和错误),并且适合创建动态用户界面。查看 Wiki 的关于 IMGUI 范例部分了解更多详细信息。
Dear ImGui 输出顶点缓冲区和命令列表,您可以轻松在应用程序中渲染它们。渲染它们所需的绘制调用和状态更改的数量相当小。因为 Dear ImGui 不直接知道或接触图形状态,所以您可以在代码中的任何位置调用它的函数(例如,在运行算法的中间,或在您自己的渲染过程的中间)。请参阅示例/文件夹中的示例应用程序,了解如何将 Dear ImGui 与现有代码库集成的说明。
一个常见的误解是将立即模式 GUI 误认为是立即模式渲染,这通常意味着在调用 GUI 函数时使用一堆低效的绘制调用和状态更改来打击您的驱动程序/GPU。这不是 Dear ImGui 所做的。 Dear ImGui 输出顶点缓冲区和一小部分绘制调用批次。它永远不会直接接触您的 GPU。绘制调用批次是相当理想的,您可以稍后在您的应用程序中甚至远程渲染它们。
有关修饰的变更日志,请参阅发布页面。阅读变更日志是了解 Dear ImGui 所提供的最新内容的好方法,并且也许会给您一些到目前为止一直忽略的功能的想法!
调用ImGui::ShowDemoWindow()
函数将创建一个演示窗口,展示各种功能和示例。该代码始终可在imgui_demo.cpp
中供参考。这是演示的样子。
您应该能够从源代码构建示例。如果您不这样做,请告诉我们!如果您想快速了解 Dear ImGui 的一些功能,您可以在此处下载演示应用程序的 Windows 二进制文件:
演示应用程序不支持 DPI,因此预计 4K 屏幕上会出现一些模糊情况。对于应用程序中的 DPI 感知,您可以以不同的比例加载/重新加载字体,并使用style.ScaleAllSizes()
缩放样式(请参阅常见问题解答)。
有关详细信息,请参阅入门指南。
在大多数平台上以及使用 C++ 时,您应该能够使用 imgui_impl_xxxx 后端的组合而无需修改(例如imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
)。如果您的引擎支持多个平台,请考虑使用更多的 imgui_impl_xxxx 文件而不是重写它们:这对您来说会减少工作量,并且您可以立即运行 Dear ImGui。如果您愿意,您稍后可以决定使用自定义引擎功能重写自定义后端。
将 Dear ImGui 集成到您的自定义引擎中需要执行以下操作:1) 连接鼠标/键盘/游戏手柄输入 2) 将纹理上传到 GPU/渲染引擎 3) 提供可以绑定纹理并渲染纹理三角形的渲染函数,这本质上就是后端正在做。 example/ 文件夹中填充了执行此操作的应用程序:设置窗口并使用后端。如果您遵循入门指南,理论上您应该花费不到一个小时的时间来集成 Dear ImGui。请务必花时间阅读常见问题解答、评论和示例应用程序!
官方维护的后端/绑定(在存储库中):
第三方后端/绑定 wiki 页面:
有用的扩展/小部件 wiki 页面:
另请参阅 Wiki 以获取更多链接和想法。
使用 Dear ImGui 的示例项目:Tracy(分析器)、ImHex(十六进制编辑器/数据分析)、RemedyBG(调试器)和数百个其他项目。
如需更多用户提交的使用 Dear ImGui 的项目屏幕截图,请查看 Gallery Threads!
有关第三方小部件和扩展的列表,请查看有用的扩展/小部件 wiki 页面。
定制引擎二合(对接分支) | 神奇男孩:龙之陷阱 (2017) 的定制引擎 |
定制引擎(未命名) | 特雷西分析器 (github) |
请参阅:常见问题解答 (FAQ),其中解答了常见问题。
请参阅:入门和 Wiki,获取许多链接、参考资料和文章。
请参阅:有关 IMGUI 范例的文章,以阅读/了解立即模式 GUI 范例。
请参阅:即将发生的变化。
请参阅:亲爱的 ImGui 测试引擎 + 用于自动化和测试的测试套件。
为了让搜索引擎抓取维基,这里有一个可抓取维基的链接(不适合人类,原因如下)。
入门?对于遇到编译/链接/运行问题或加载字体问题的首次用户,请使用 GitHub 讨论。对于任何其他问题、错误报告、请求、反馈,请在 GitHub 问题上发布。请仔细阅读并填写新股模板。
付费企业客户可以享受私人支持(电子邮件: contact@dearimgui dot com )。
我应该获取哪个版本?
我们偶尔会标记版本(带有很好的版本注释),但通常是安全的,建议同步到最新的master
或docking
分支。该库相当稳定,并且在报告后回归往往会快速修复。高级用户可能希望使用具有多视口和对接功能的docking
分支。该分支定期与主分支保持同步。
谁使用 Dear ImGui?
请参阅使用 Dear ImGui Wiki 页面的报价、资金和赞助商以及软件,了解谁在使用 Dear ImGui。如果可以的话,请添加您的游戏/软件!另外,请参阅图库主题!
我能提供什么帮助吗?
Dear ImGui 的持续开发得到了用户和私人赞助商的经济支持。
详情请参阅当前和过去的 Dear ImGui 资助支持者和赞助商的详细列表。
从 2014 年 11 月到 2019 年 12 月,持续的开发也得到了 Patreon 用户和个人捐赠的财政支持。
感谢所有过去和现在的支持者帮助使这个项目保持活力和蓬勃发展!
Dear ImGui 正在使用开源项目免费提供的软件和服务:
由 Omar Cornut 和 GitHub 的所有直接或间接贡献者开发。该库的早期版本是在 Media Molecule 的支持下开发的,并首先在 Tearaway (PS Vita) 游戏内部使用。
经常性贡献者包括 Rokas Kupstys @rokups (2020-2022):自动化系统和回归测试的很大一部分工作现在可以在 Dear ImGui 测试引擎中找到。
维护/支持合同、赞助发票和其他 B2B 交易由 Disco Hello 托管和处理。
Omar:“我第一次发现 IMGUI 范式是在 Q-Games,Atman Binstock 在代码库中放弃了他自己的简单实现,我花了相当多的时间对其进行改进和思考。事实证明,Atman 通过工作直接接触到了这个概念。当我转到 Media Molecule 时,我重写了一个新库,试图克服我使用过的第一个库的缺陷和限制,它成为了这个库,从那时起,我花了大量的时间进行迭代和更新。改进它。”
嵌入 Tristan Grimmer 的 ProggyClean.ttf 字体(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。还要感谢大家在 GitHub 上发布反馈、问题和补丁。
Dear ImGui 根据 MIT 许可证获得许可,请参阅 LICENSE.txt 了解更多信息。