这是一个轻量级、自动生成且精简的 Swift 封装,围绕着流行且卓越的 dear imgui 库。
它提供了一个 swifty 且特别 类型安全 的 API。由于它大量依赖于自动化代码生成,因此也很容易维护和更新。
库中还提供了可运行的 演示示例。
目前它基于 ImGui 的 v1.86 版本。
以下说明将使您的项目副本在本地机器上启动并运行,并提供一个代码示例。
Swift ImGui 适用于所有支持 Swift 5.3 及更高版本和 Swift Package Manager (SPM) 的平台。
在您的 Package.swift
文件中扩展以下行,或者使用它创建一个新项目。
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "YourPackageName",
dependencies: [
.package(url: "https://github.com/ctreffs/SwiftImGui.git", from: "1.86.0")
],
targets: [
.target(
name: "YourTargetName",
dependencies: ["ImGui"])
]
)
一个最小化的示例位于 Sources/Demos/Minimal/main.swift。
这是一个摘录
import ImGui
IMGUI_CHECKVERSION()
let ctx = ImGuiCreateContext(nil)
let io = ImGuiGetIO()!
/// Build font atlas
var pixels: UnsafeMutablePointer<UInt8>?
var width: Int32 = 0
var height: Int32 = 0
var bytesPerPixel: Int32 = 0
ImFontAtlas_GetTexDataAsRGBA32(io.pointee.Fonts, &pixels, &width, &height, &bytesPerPixel)
for n in 0..<20 {
io.pointee.DisplaySize = ImVec2(x: 1920, y: 1080)
io.pointee.DeltaTime = 1.0 / 60.0
ImGuiNewFrame()
var f: Float = 0.0
ImGuiTextV("Hello, world!")
ImGuiSliderFloat("float", &f, 0.0, 1.0, nil, 1)
ImGuiTextV("Application average %.3f ms/frame (%.1f FPS)", 1000.0 / io.pointee.Framerate, io.pointee.Framerate)
ImGuiShowDemoWindow(nil)
ImGuiRender()
}
ImGuiDestroyContext(ctx)
这是另一个演示示例,展示了位于 Sources/Demos/Metal 的 ImGui 演示窗口。
它提供了两个后端文件 (imgui_impl_metal.swift, imgui_impl_osx.swift)。 随意包含更多用于 GLFW、SDL2 等的后端。
SwiftImGui 使用多阶段过程更新到最新的 cimgui 和 imgui 版本。
有关如何贡献的步骤,请参阅 HOWTO.md。
这个项目需要大量的维护。如果您有兴趣贡献,请随时这样做!
需要完成的事情包括
Sources/AutoWrapper/Exceptions.swift
我们使用 SemVer 进行版本控制。 有关可用版本,请参阅此存储库中的发行版本。
另请参阅参与此项目的贡献者列表。
此项目已获得 MIT 许可证的许可 - 有关详细信息,请参阅 LICENSE 文件。
SwiftImGui 仅仅是 imgui 的一个封装。 它还使用了出色的 C-API 封装 cimgui。
如果可以,请支持他们!
Dear ImGui 是一个 无膨胀的 C++ 图形用户界面库。 它输出优化的顶点缓冲区,您可以在启用 3D 管道的应用程序中随时渲染。 它速度快、可移植、与渲染器无关且是自包含的(没有外部依赖项)。
Dear ImGui 旨在 实现快速迭代 并 使程序员能够 创建 内容创建工具和可视化/调试工具(而不是为普通最终用户提供 UI)。 它倾向于简单性和生产力,并且缺乏通常在更高级别库中找到的某些功能。
Dear ImGui 特别适合集成到游戏引擎(用于工具)、实时 3D 应用程序、全屏应用程序、嵌入式应用程序或控制台平台上操作系统功能非标准的任何应用程序中。
(此库在免费且宽松的许可下可用,但需要资金支持才能维持其持续改进。除了维护和稳定性之外,还有许多需要添加的理想功能。如果您的公司正在使用 dear imgui,请考虑联系。如果您是使用 dear imgui 的个人,请考虑通过 Patreon 或 PayPal 支持该项目。)
CImGui 是为出色的 C++ 即时模式 GUI Dear ImGui 编程生成的精简 C-API 封装。 所有 imgui.h 函数都是以编程方式封装的。 生成的文件是:cimgui.cpp、cimgui.h 用于 C 编译。 此外,为了帮助创建绑定,definitions.lua 包含函数定义信息和 structs_and_enums.lua。 此库旨在作为一个中间层,以便能够从可以与 C 接口的其他语言中使用 Dear ImGui(例如 D - 请参阅 D-binding)