40 个版本

0.12.0 2024年5月5日
0.11.0 2023年4月5日
0.10.0 2023年1月16日
0.9.0 2022年11月30日
0.0.5 2015年11月30日

#40 in GUI

Download history 2294/week @ 2024-05-03 2172/week @ 2024-05-10 2149/week @ 2024-05-17 2205/week @ 2024-05-24 2282/week @ 2024-05-31 1805/week @ 2024-06-07 2124/week @ 2024-06-14 1903/week @ 2024-06-21 1008/week @ 2024-06-28 894/week @ 2024-07-05 1561/week @ 2024-07-12 1594/week @ 2024-07-19 1688/week @ 2024-07-26 1432/week @ 2024-08-02 1982/week @ 2024-08-09 1147/week @ 2024-08-16

6,595 每月下载量
84 个 crates (81 直接) 中使用

MIT/Apache

12MB
224K SLoC

C++ 145K SLoC // 0.2% comments Rust 79K SLoC // 0.0% comments Shell 88 SLoC // 0.3% comments

imgui-rs:Dear ImGui 的 Rust 绑定

Build Status Latest release on crates.io Documentation on docs.rs Wrapped Dear ImGui Version

Hello world

ui.window("Hello world")
    .size([300.0, 100.0], Condition::FirstUseEver)
    .build(|| {
        ui.text("Hello world!");
        ui.text("こんにちは世界!");
        ui.text("This...is...imgui-rs!");
        ui.separator();
        let mouse_pos = ui.io().mouse_pos;
        ui.text(format!(
            "Mouse Position: ({:.1},{:.1})",
            mouse_pos[0], mouse_pos[1]
        ));
    });

主要库 crates

imgui-rs 的核心包括

  • imgui:高级安全 API
  • imgui-sys:低级不安全 API(自动生成)

接下来,我们提供了两个示例渲染器和两个示例后端平台实现

这些实现中都包含一个 examples 文件夹,展示了它们的用法。检查各自的 Cargo.toml 以找到兼容版本(例如,imgui-glow-renderer/Cargo.toml 中的 [dependencies] 描述了兼容的 glow 版本,而 [dev-dependencies] 描述了兼容的 glutin 版本)

最后,imgui-examples 文件夹包含了如何使用 imgui 包的示例 - 这包括如何显示文本、如何创建按钮等通用主题 - 并且适用于任何后端/渲染器的使用。

功能

  • 适用于安全 Rust 的 Dear ImGui 绑定。注意:API 覆盖率不是 100%,但会随着时间的推移而不断提高。
  • 用于原始 C++ 库使用可选函数参数的用例的构建器结构体
  • 易于与 glow / glium 集成
  • 易于与 winit 和 sdl2(后端平台)集成
  • 可选支持 freetype 字体光栅化和停靠分支

最小支持 Rust 版本 (MSRV)

imgui-rs 和所有后端包的 MSRV 是 1.70。我们定期更新我们的 MSRV,并对其进行小幅度升级。

选择后端平台和渲染器

几乎每个使用 imgui-rs 的应用程序除了主要的 imgui 包外,还需要两个额外的组件:后端平台和渲染器。

imgui-rs 与任何特定的渲染器或平台无关。

后端平台负责将 imgui-rs 集成到操作系统及其窗口管理中。其职责包括以下内容

  • 处理输入事件(例如键盘、鼠标)并根据需要更新 imgui-rs 状态
  • 将操作系统窗口的信息(例如大小、DPI 因子)传递给 imgui-rs
  • 当 imgui-rs 请求时更新操作系统端鼠标光标

渲染器负责将 imgui-rs 生成的通用、渲染器无关的 绘制列表 使用某些图形 API 进行渲染。其职责包括以下内容

  • 使用顶点/索引缓冲区和命令列表进行渲染
  • 处理 DPI 因子和剪裁矩形
  • 纹理管理

我们提供以下渲染器作为官方来源(即,它们将始终保持最新并正常工作):imgui-glow-rendererimgui-glium-renderer

此外,我们还提供以下后端作为官方来源(即,它们将始终保持最新并正常工作):imgui-winit-supportimgui-sdl2-support

最经过测试的平台/渲染器组合是 imgui-glium-renderer + glium + imgui-winit-support + winit,但这不是唯一可能的组合。还有 imgui-glow-renderer,它将越来越多地取代 glium

此外,还有其他库提供了其他类型的渲染器,它们可能与 imgui-rs 发布的版本不兼容,但可能适用于您的用例

  1. imgui-wgpu
  2. imgui-d3d12-renderer
  3. imgui-dx11-renderer
  4. imgui-gfx-renderer:已弃用(不再维护超过 imgui-rs v0.8)。使用 gfx 包的渲染器实现(不是新的 gfx-hal 包
  5. 还有更多可以在 crates.io 上找到,无论是通过搜索还是通过 “依赖”页面(“依赖于”文本表示包是否已针对 imgui-rs 的当前版本进行更新)

如果您有更高级的用例,也可以编写自己的支持代码,因为 imgui-rs 不依赖于任何特定的图形 / OS API

编译和运行演示

git clone https://github.com/imgui-rs/imgui-rs
cd imgui-rs

主要示例位于 imgui-examples 目录中。这些可以按以下方式运行

# At the reposity root
cargo test

cargo run --example hello_world
cargo run --example test_window
cargo run --example test_window_impl

Glow 渲染器的示例位于 imgui-glow-renderer/examples/ 目录下。这些可以像任何其他示例一样运行

cargo test

cargo run --example glow_01_basic

注意:Windows用户需要使用Rust编译器的MSVC ABI版本及其关联的依赖项来构建此库并运行示例。

如何贡献

  1. 更改或添加内容

  2. 确保您使用的是最新的稳定版Rust

  3. 运行rustfmt以确保代码风格符合规范

    rustup component add rustfmt
    cargo fmt
    
  4. 在Github上提交一个pull request

许可证

以下任一许可证下许可:

由您选择。

使用 Dear ImGuicimgui

贡献

除非您明确声明,否则您提交的任何旨在包含在作品中的贡献,如Apache-2.0许可证所述,应按照上述方式双重许可,不附加任何额外条款或条件。

依赖项