简介 您所在的位置:网站首页 imgui是什么意思 简介

简介

2023-08-10 09:40| 来源: 网络整理| 查看: 265

亲爱的 imgui

Build Status Static Analysis Status

(这库是在一个自由和许可的许可下可用的,但需要财政支持来维持其持续的改进。除了维护和稳定性外,还有许多理想的功能尚待添加。如果你的公司正在使用 Dear imgui ,请考虑联系。

业务:通过开具发票的技术支持、维护、赞助合同支持持续开发和维护: 电子邮件:contact@dearimgui dot com

个人:支持继续开发和维护 这里。

另见 赞助商 页。

Dear imgui 是一个 C++ 的无膨胀的图形用户界面库。它输出优化的顶点缓冲区,你可以在你的 3D 管道启用的应用程序中随时呈现这些缓冲区。它是快速的、可移植的、与渲染器无关的和自包含的(没有外部依赖)。

Dear imgui 旨在支持快速迭代,并使程序员能够创建内容创建工具和可视化 / 调试工具(而不是普通最终用户的 UI)。它支持实现这一目标的简单性和工作效率,并且缺乏通常在更高级的库中发现的某些特性。

亲爱的 imgui 特别适合于集成在游戏引擎(用于工具)、实时 3D 应用程序、全屏应用程序、嵌入式应用程序,或在操作系统功能是非标准的控制台平台上的任何应用程序。

用法 - 它是如何工作的 - 发布和更改日志 - 演示 - 集成 即将发生的变化 - 画廊 - 支持,常见问题解答 - 如何提供帮助 - 赞助商 - 学分 - 许可证 维基 - 语言和框架的后端 / 绑定 - Software using Dear ImGui - 用户报价 用法

Dear imgui 的核心是在几个与平台无关的文件中自包含的,你可以在应用程序 / 引擎中轻松地对这些文件进行编译。它们都是库( imgui )根文件夹中的文件。CPP, imgui 。(h)。

不需要特定的构建过程。你可以加上。CPP 文件到你现有的项目.

你需要一个后端来将 Dear imgui 集成到你的应用程序中。后端将鼠标 / 键盘 / 游戏手柄的输入和各种设置传递给 Dear imgui ,并负责呈现生成的顶点。

在 后端 / 文件夹中提供了用于各种图形 API 和呈现平台的后端,以及 实例 / 文件夹中的示例应用程序。有关详细信息,请参见本文档的 Integration 部分。你也可以创建自己的后端。在任何可以渲染纹理三角形的地方,都可以渲染 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);

结果: 示例代码输出(暗) 示例代码输出(光) (设置:深色风格(左)、浅色风格(右)/ 字体:Roboto-Medium,16px)

代码:

// 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); // Plot some values const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f }; ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values)); // 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();

结果: 示例代码输出

亲爱的 imgui 允许你创建复杂的工具,以及非常短期的工具。在短命的极端方面:使用现代编译器的 Edit&Continue(热代码重新加载)特性,你可以在应用程序运行时添加一些小部件来调整变量,并在一分钟后删除代码!亲爱的不只是为了调整价值观。你可以使用它通过发送文本命令来跟踪正在运行的算法。你可以将它与你自己的反射数据一起使用,以实时浏览你的数据集。你可以使用它来公开引擎中某个子系统的内部信息,创建一个记录器、一个检查工具、一个探查器、一个调试器、一个完整的游戏制作编辑器 / 框架,等等。

它是如何工作的

如果你想了解 imgui 范例背后的核心原则,请查看 Wiki 的 About the IMGUI paradigm 部分。 imgui 试图从用户的角度最小化多余的状态复制、状态同步和状态保留。与传统的保留模式界面相比,它更不容易出错(代码更少,bug 更少),并且有助于创建动态的用户界面。

亲爱的 imgui 输出顶点缓冲区和命令列表,你可以在你的应用程序中轻松地呈现它们。绘制调用和呈现它们所需的状态更改的数量相当少。因为 Dear imgui 不知道或不直接触摸图形状态,所以你可以在代码中的任何地方调用它的函数(例如,在运行算法的中间,或者在你自己的渲染过程的中间)。有关如何将 Dear imgui 与你现有的代码库集成的说明,请参阅示例 / 文件夹中的示例应用程序。

一个常见的误解是将即时模式 GUI 误认为是即时模式呈现,这通常意味着在调用 GUI函数时,通过一系列低效的 Draw 调用和状态更改来锤击你的驱动程序 /GPU。这不是亲爱的 imgui 所做的。亲爱的 imgui 输出顶点缓冲区和一小批 DRAW 调用列表。它永远不会直接触及你的 GPU。Draw Call 批处理是相当理想的,你可以稍后在应用程序中甚至远程呈现它们。

发布和更改日志

见 发行 页。阅读变更日志是跟上 Dear imgui 提供的内容的一个好方法,并且可能会让你了解一些你一直忽略的功能。

演示

调用 ImGui::ShowDemoWindow()函数将创建一个演示窗口,展示各种特性和示例。该代码在 imgui_demo.cpp 中始终可供参考。

屏幕截图演示

你应该能够从源代码构建示例(在 Windows/Mac/Linux 上进行了测试)。如果你不知道,就告诉我们!如果你想快速了解一些重要的 imgui 特性,可以在这里下载演示应用程序的 Windows 二进制文件:

imgui-demo-binaries-20210331.zip(Windows,1.83WIP,Build2021/03/31,Master Branch)或 较早的演示二进制文件。

演示应用程序没有 DPI 意识到,所以预计在 4K 屏幕上会有一些模糊。对于应用程序中的 DPI 感知,你可以以不同的比例加载 / 重新加载字体,并使用 style.ScaleAllSizes() 扩展样式(参见 常见问题)。

Integration

在大多数平台上和使用 C++ 时,你应该能够使用 imguiimplxxxx 后端的组合而不需要修改(例如 imguiimplwin32.cpp+imguiimpldx11.cpp)。如果你的引擎支持多个平台,可以考虑使用更多的 ImguiImplXXXX 文件,而不是重写它们:这对你来说工作量较小,而且你可以立即运行 Dear imgui 。如果你愿意的话,你可以稍后决定使用你的自定义引擎重写自定义后端函数。

将 Dear imgui 集成到你的自定义引擎中的问题是 1)连接鼠标 / 键盘 / 游戏手柄的输入 2)将一个纹理上传到你的 GPU/ 渲染引擎 3)提供一个渲染函数,该渲染函数可以绑定纹理并呈现纹理三角形。实例 / 文件夹中填充了这样做的应用程序。如果你是一位经验丰富的程序员,对这些概念很熟悉,那么你应该只需要不到两个小时就可以将 dear imgui 集成到你的自定义引擎中。一定要花时间阅读 常见问题、注释和一些示例 / 应用程序!

官方维护的后端 / 绑定(在库中):

渲染器:DirectX9、DirectX10、DirectX11、DirectX12、Metal、OpenGL/ES/ES2、SDL_Renderer、Vulkan、WebGPU。 平台:GLFW、SDL2、Win32、GLUT、OSX、Android。 框架:Allegro5,EmScripten。

第三方后台 / 绑定 维基页面:

语言:C,C# 和:Beef,Chaiscript,Crystal,D,Go,Haskell,Haxe/HXCPP,Java,JavaScript,Julia, Kotlin ,Lobster,Lua,Odin,Pascal,PureBasic,Python,Ruby,Rust, Swift ... 框架:AGS/Adventure Game Studio,Amethyst,Blender,BSF,Cinder,Cocos2D-X,Diligent Engine,Flexium,GML/Game Maker Studio2,Gleq,Godot,GTK3+OpenGL3,Irlicht Engine,Irllicht Engine,Löve+Lua,Magnum,Monogame,Nanort,NiM Game Lib,Nintendo3DS&Switch,Nintendo3DS&Switch,OSERE,OpenFramewores,OSG/OpenScenegraph,ORX,Photoshop,PxRender,QT/QTDirect3D,LRender,VulkanScenegraph,Win32GDI,wxWidgets。 注意,C 绑定是自动生成的,你可以使用它的 JSON/Lua 输出为其他语言生成绑定。

有用的扩展 / 部件 维基页面:

文本编辑器,节点编辑器,时间线编辑器,绘图,软件渲染器,远程网络访问,内存编辑器,小发明等.

有关更多链接和想法,请参见 维基。

即将发生的变化

2022 年的一些目标是:

对接工作(见 #2109,公开场合 对接) 在多视口 / 多 OS 窗口上工作。(参见 #1542,在公共场合 对接 分支查找反馈) 处理游戏手柄 / 键盘控制。(见 #787) 开发自动化和测试系统,以测试库和终端用户应用程序。(见 #435) 使示例看起来更好,改进样式,改进字体支持,使示例 Hi-DPI 和 Multi-DPI 可感知。 画廊

有关使用 Dear imgui 的 Projects 的更多用户提交的屏幕截图,请查看 图库线程!

有关第三方部件和扩展的列表,请查看 有用的扩展 / 部件Wiki 页面。

自定义引擎 screenshot game

自定义引擎 screenshot tool

Tracy Profiler Tracy Profiler

支持,常见问题(常见问题)

参见:常见问题(常见问题),其中回答了常见的问题。

参见:维基 中的许多链接、引用、文章。

请参阅:Articles about the IMGUI paradigm 以阅读 / 了解直接模式 GUI 范例。

开始了吗?对于首次使用编译 / 链接 / 运行或加载字体有问题的用户,请使用 GitHub 讨论。

对于其他问题,错误报告,请求,反馈,你可以在 GitHub 问题 上发布。请仔细阅读和填写新的发行模板。

付费商业客户可获得私人支持(电子邮件:contact@dearimgui dot com)。

我应该选哪个版本?

我们偶尔会标记 发行,但它通常是安全的,建议同步到 master/latest。库是相当稳定的,并且在报告时回归倾向于快速固定。

高级用户可能希望使用具有 多视口 和 对接 功能的 docking 分支。这个分支经常与 Master 保持同步。

谁用亲爱的 imgui ?

参见 引语,赞助商,Software using dear imgui 维基页面,了解谁在使用 Dear imgui 。如果可以,请添加你的游戏 / 软件!另请参见 图库线程!

如何提供帮助

我能帮上什么忙吗?

见 GitHub 论坛 / 问题 和 GitHub 讨论。 你可以帮助开发和提交 pull 请求!请理解,通过提交一个 PR,你也提交了一个请求,要求维护者审查你的代码,然后接管其维护永远。公关的制定既要符合最终用户的利益,也要便于维护者理解和接受它。 有关更多的想法,请参见 需要帮助 上的 维基。 你的公司是否为这个项目提供了资金支持(请通过电子邮件联系)

我如何才能帮助为亲爱的 imgui 的进一步发展提供资金?

见 赞助商 页。

Sponsors

亲爱的 imgui 正在进行的开发目前由用户和私人赞助商提供财务支持:

白金巧克力赞助商

暴风雪

双巧克力赞助商

育碧, 超级电池

巧克力赞助商

动视, 土坯, Aras Pranckevi Ius , Arkane Studios , 史诗, 谷歌, NVIDIA 公司, RAD 游戏工具

咸焦糖赞助商

Framefield , 磨削齿轮游戏, Kylotonn , 下一级游戏, O-Net Communications(美国)

过去的赞助商请看 detailed list of Dear ImGui supporters。从 2014 年 11 月到 2019 年 12 月,正在进行的开发还得到了 Patreon 用户的财务支持和个人捐款。

感谢所有过去和现在的支持者帮助保持这个项目的活力和蓬勃发展!

亲爱的 imgui 正在使用开源免费提供的软件和服务 Projects :

PVS-Studio 用于静态分析。 GitHub 动作 用于连续集成系统。 OpenCPPCoverage 用于代码覆盖率分析。 学分

由 Omar Cornut 和每一个直接或间接 贡献者 开发的 Github。这个库的早期版本是在 介质分子 的支持下开发的,并首先在游戏 眼泪 的内部使用。

经常性贡献者(2020 年):Omar Cornut@ocornut ,Rokas Kupstys@rokups ,Ben Carter@Shironekoben 。自动化系统、回归测试和其他特性方面的大部分工作目前尚未发布。

赞助、支持合同和其他 B2B 事务由 蜥蜴方块 托管和处理。

Omar:“我第一次发现 imgui 范例是在 Q-游戏,在那里,Atman Binstock 放弃了他自己在代码库中的简单实现,我花了相当长的时间来改进和思考这个代码库。事实证明,通过与凯西合作,阿特曼直接接触到了这个概念。当我转到 MediaMolecule 时,我重写了一个新的库,试图克服与我合作过的第一个项目的缺陷和局限性。它变成了这样,从那以后,我花了不合理的时间来迭代和改进它。”

EmbedsProggyClean.tf font 由 Tristan Grimmer(麻省理工学院许可证)。

EmbedsSTBTExtEdit.H,STBTruetype.H,STBrectPack.H 由 Sean Barrett(公共领域)。

早期版本的灵感,反馈和测试:Casey Muratori,Atman Binstock,Mikko Mononen,Emmanuel Briney,Stefan Kamoda,Anton Mikhailov,Matt Willis。也感谢大家在 Github 上发布反馈、问题和补丁。

许可证

亲爱的 imgui 是根据 MIT 许可证授权的,有关更多信息,请参见 license.txt 。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有