亲爱的ImGUI-C++的无膨胀图形用户界面库

2020-11-04 15:53:33

(该库是在免费许可下提供的,但需要财政支持才能保持其持续改进。除了维护和稳定之外,还有许多需要添加的功能。如果您的公司正在使用亲爱的ImGui,请考虑联系。)。

业务:通过开具发票的技术支持、维护、赞助合同支持持续开发和维护:电子邮件:[email protected]

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

亲爱的ImGUI旨在实现快速迭代,并使程序员能够创建内容创建工具和可视化/调试工具(而不是普通最终用户的UI)。为了实现这一目标,它更倾向于简单性和生产力,并且缺乏在更高级的库中通常可以找到的某些功能。

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

亲爱的ImGui的核心包含在几个平台无关的文件中,您可以很容易地在您的应用程序/引擎中编译这些文件。它们都是存储库根文件夹中的所有文件(imgui.cpp、imgui.h、imgui_demo.cpp、imgui_draw.cpp等)。

不需要特定的构建过程。您可以将.cpp文件添加到现有项目中。

您将需要一个后端集成到您的应用程序中亲爱的ImGui。后端将鼠标/键盘/游戏手柄输入和各种设置传递给亲爱的ImGUI,并负责渲染生成的顶点。

Backends/文件夹中提供了各种图形API和渲染平台的后端,Examples/文件夹中提供了示例应用程序。有关详细信息,请参阅本文档的集成部分。您也可以创建自己的后端。在任何可以渲染带纹理的三角形的地方,都可以渲染亲爱的ImGui。

在您的应用程序中设置了亲爱的ImGui之后,您可以在程序循环中从_Anywhere_使用它:

//创建一个名为";My First Tool";的带有菜单栏的窗口。ImGui::Begin(";My First Tool";,&;My_Tool_Active,ImGuiWindowFlags_Menubar);IF(ImGui::BeginMenuBar()){IF(ImGui::BeginMenu(";File";)){IF(ImGui::MenuItem(";Open.。";,";Ctrl+O";)){/*做东西*/}if(ImGui::MenuItem(";Save";,";Ctrl+S";){/*做东西*/}if(ImGui::MenuItem(";Close";,";Ctrl+W";)){My_Tool_Active=false;}imgui::EndMenu();}imGui::EndMenuBar();}//编辑颜色(存储为~4个浮点数)imGui::ColorEdit4(";Color";,my_color);//绘制一些值Const Float My_Values[]={0。2F,0。1层,1.0层,0层。5F,0。9f,2.2f};imGui::Plot Lines(";Frame Times";,MY_VALUES,IM_ARRAYSIZE(MY_VALUES));//在滚动区域中显示内容imGUI::TextColored(ImVec4(1,1,0,1),";);imGui::BeginChild(";SCROLING&34;);for(int n=0;n<;50;n++)imgui::text(&34;%04d:某些文本";);(int n=0;n<;50;n++)imgui::text(&34;%04d:某些文本";);,n);ImGui::EndChild();ImGui::End();

亲爱的ImGui允许您创建精致的工具以及非常短暂的工具。在短命的极端方面:使用现代编译器的Edit&;Continue(热代码重载)功能,您可以在应用程序运行时添加一些小部件来调整变量,并在一分钟后删除代码!亲爱的ImGui不仅仅是用来调整价值观的。您可以使用它来跟踪正在运行的算法,只需发出文本命令即可。您可以将其与您自己的反射数据一起使用,以实时浏览您的数据集。您可以使用它来暴露引擎中子系统的内部结构,创建记录器、检查工具、分析器、调试器、整个游戏制作编辑器/框架等。

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

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

一种常见的误解是将即时模式gui误认为即时模式渲染,这通常意味着在调用gui函数时会用一堆低效的绘制调用和状态更改来打击您的驱动程序/gpu。这不是亲爱的Imgui要做的。亲爱的ImGui输出顶点缓冲区和一个小的绘制调用批处理列表。它从不直接接触您的GPU。绘制调用批处理是非常优化的,您可以稍后在您的应用程序中甚至远程呈现它们。

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

您应该能够从源代码(在Windows/Mac/Linux上测试)构建示例。如果您没有,请让我们知道!如果您想快速了解一些亲爱的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)提供可以绑定纹理和渲染纹理三角形的渲染功能。Examples/文件夹中填充了执行此操作的应用程序。如果您是一个熟悉这些概念的有经验的程序员,那么将Dear ImGui集成到您的自定义引擎中应该不会超过两个小时。一定要花时间阅读常见问题解答、注释和一些示例/应用程序!

语言:C、C#和:Beans、ChaiScript、Crystal、D、Go、Haskell、Haxe/hxcpp、Java、JavaScript、Julia、Kotlin、Lua、ODIN、Pascal、PureBasic、Python、Ruby、Rust、Swift...。

框架:AGS/冒险游戏工作室,紫晶,BSF,Cinder,cocos2d-x,Diligent Engine,Flexium,GML/Game Maker Studio2,Godot,GTK3+OpenGL3,Irrlicht Engine,LöVE+Lua,Magnum,NanoRT,nCine,Nim游戏库,Ogre,openFrameworks,OSG/OpenSceneGraph,Orx,Photoshop,PX_Render,Qt/QtDirect3D,SFML,Sokol,Unity,Unreal Engine 4,vtk,Win32 GDI,WxWidgets。

注意,C绑定(Cimgui)是自动生成的,您可以使用它的json/lua输出为其他语言生成绑定。

使用新的表API(替换列)。(请参见#2957,在公共表分支中查找反馈)

在多视口/多操作系统窗口上工作。(请参见#1542,在公共对接分支中寻找反馈)。

致力于自动化和测试系统,以测试库和最终用户应用程序。(参见#435)。

使示例看起来更好,改进样式,改进字体支持,使示例能够识别hi-DPI和multiDPI。

如果您是新接触亲爱的imgui,并且在编译、链接、添加字体、连接输入、运行或显示方面有问题亲爱的imgui:您可以使用Discord服务器。

否则,对于任何其他问题、错误报告、请求和反馈,您可以在https://github.com/ocornut/imgui/issues.上发布。请仔细阅读并填写新问题模板。

我们偶尔会标记版本,但通常是安全的,建议同步到主/最新版本。该库相当稳定,当报告时,回归往往会很快得到修复。

高级用户可能希望使用具有多视口和固定功能的固定分支。此分支机构定期与MASTER保持同步。

查看报价、赞助商、使用亲爱的imgui的软件维基页面,了解谁在使用亲爱的imgui。如果可以,请添加您的游戏/软件!另请参阅“画廊线索”!

您可以帮助开发并提交拉取请求!请理解,通过提交PR,您也提交了一项请求,要求维护人员检查您的代码,然后永远接管它的维护工作。公关的制定既要符合最终用户的利益,又要使维护人员更容易理解和接受它。

从2014年11月到2019年12月,正在进行的开发也得到了Patreon上的用户和个人捐款的资金支持。请看亲爱的Imgui支持者的详细名单。

感谢所有过去和现在的支持者,感谢你们帮助保持这个项目的活力和繁荣!

尊敬的ImGui正在使用为开源项目免费提供的软件和服务:

由奥马尔·科纳特和GitHub的每一位直接或间接贡献者开发。这个库的早期版本是在媒体分子的支持下开发的,并首次在游戏Tearaway(PS VITA)中内部使用。

经常性贡献者(2020):Omar Corut@ocorut,Rokas Kupstys@rokups,Ben Carter@ShironekoBen.自动化系统、回归测试和其他功能的大部分工作目前尚未发表。

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

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