Swift ImGui

macOS Linux Windows platform-compatibility
swift-version-compatibility license

swiftimgui-gif

这是一个轻量级自动生成精简的 Swift 封装,围绕着流行且优秀的 dear imgui 库构建。
它提供了一个 swifty 且 - 特别是 - 类型安全的 API。 由于它严重依赖于自动化代码生成,因此也很容易维护和更新。

库中还提供了可运行的 演示示例

🚀 快速上手

以下说明将帮助您在本地机器上启动并运行该项目,并提供一个代码示例。

📋 前提条件

💻 安装

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.82.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)

🆕 更新 SwiftImGui

SwiftImGui 使用多阶段过程更新到最新的 imgui 版本。 详情请参阅 HOWTO.md

💁 需要帮助

这个项目需要很多关爱。 如果您有兴趣贡献,请随时这样做!

需要完成的事情包括

🏷️ 版本控制

我们使用 SemVer 进行版本控制。 有关可用版本,请参阅 此存储库上的版本

✍️ 作者

另请参阅参与此项目的 贡献者 列表。

🔏 许可证

本项目根据 MIT 许可证授权 - 有关详细信息,请参阅 LICENSE 文件。

🙏 原始代码

由于 SwiftImGui 仅仅是 imgui 的一个封装,因此它显然依赖于它。
它还使用了出色的 c-api 封装 cimgui
如果可以,请支持他们!

imgui

来自 ocornut/imgui/docs/README.md

(此库在免费和宽松的许可下可用,但需要财政支持才能维持其持续改进。除了维护和稳定性之外,还有许多需要添加的理想功能。如果您的公司正在使用 dear imgui,请考虑联系我们。如果您是个人使用 dear imgui,请考虑通过 Patreon 或 PayPal 支持该项目。)

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

个人/业余爱好者:通过每月 Patreon 支持持续维护和开发
  Patreon

个人/业余爱好者:通过 PayPal 支持持续维护和开发
  PayPal


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

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

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

cimgui

来自 cimgui/cimgui/README.md

CImGui 是一个程序化生成的精简 c-api 封装,用于出色的 C++ 即时模式 gui Dear ImGui。 所有 imgui.h 函数都以编程方式封装。 生成的文件是:cimgui.cpp、cimgui.h 用于 C 编译。 此外,为了帮助创建绑定,definitions.lua 包含函数定义信息和 structs_and_enums.lua。 此库旨在作为中间层,以便能够从其他可以与 C 交互的语言中使用 Dear ImGui(例如 D - 请参阅 D-binding)

☮️ 替代方案