#imgui #add-on #bindings #dear #arcdps #api-bindings #high-level

arcdps-imgui

为Dear ImGui提供的Rust高级绑定;为arcdps插件而分支

1个不稳定版本

0.8.0 2022年2月27日

#901GUI

Download history 21/week @ 2024-04-08 57/week @ 2024-04-15 42/week @ 2024-04-22 55/week @ 2024-04-29 29/week @ 2024-05-06 20/week @ 2024-05-13 39/week @ 2024-05-20 30/week @ 2024-05-27 36/week @ 2024-06-03 65/week @ 2024-06-10 23/week @ 2024-06-17 25/week @ 2024-06-24 15/week @ 2024-07-01 79/week @ 2024-07-08 77/week @ 2024-07-15 95/week @ 2024-07-22

268 每月下载量
用于 arcdps

MIT/Apache

2.5MB
48K SLoC

C++ 28K SLoC // 0.1% comments Rust 19K SLoC // 0.0% comments Shell 8 SLoC

imgui-rs:为arcdps插件提供的Dear ImGui 1.80 Rust绑定

Wrapped Dear ImGui Version

这是一个分支

arcdps的插件仅限于使用较旧的Dear ImGui版本。这是一个与Dear ImGui 1.80兼容的imgui-rs 0.8.0分支,旨在供arcdps插件使用。

变更

  • 允许从上下文中创建用于arcdps rust包装器的Ui对象
  • 降级到Dear ImGui 1.80(arcdps当前使用的版本)
    • 移除了需要ImGui新版本的API(主要是禁用API)
  • 从imgui-rs >0.8.0中挑选了一些重要的修复,主要与input_text小部件未正确调整缓冲区大小和段错误有关。
  • 文本输入回调API(字符过滤器)已更改为支持16位字符,因为arcdps ImGui版本没有启用32位字符支持。

原始README

Hello world

Window::new("Hello world")
    .size([300.0, 100.0], Condition::FirstUseEver)
    .build(&ui, || {
        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:高级安全API
  • imgui-winit-support:使用winit crate的后端平台实现(默认使用最新版本,但通过功能标志支持早期版本)
  • imgui-glow-renderer:使用imgui crate的渲染器实现
  • imgui-glium-renderer:使用glium crate的渲染器实现
  • imgui-sys:低级非安全API(自动生成)

此外,以下不再维护,但可能仍然有效

  • imgui-gfx-renderer:使用gfx crate的渲染器实现(不是新的gfx-hal crate

功能

  • 用于与安全Rust一起使用的Dear ImGui绑定。注意:API覆盖率不是100%,但会随着时间的推移不断改进。
  • 用于原始C++库使用可选函数参数的场景的Builder结构体
  • 轻松与glow / glium集成
  • 轻松与winit(后端平台)集成
  • 可选支持freetype字体光栅化器

最小支持Rust版本(MSRV)

imgui-rs和所有后端Crates的MSRV是1.54。我们定期更新我们的MSRV,并为其发布小版本更新。

选择后端平台和渲染器

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

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

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

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

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

最常测试的平台/渲染器组合是 imgui-glium-renderer + glium + imgui-winit-support + winit,但这并不是唯一可能的组合。还有 imgui-glow-renderer,它将越来越多地取代 glium,并且你可以找到提供更广泛库支持的第三方包(例如原始 OpenGL、SDL2)。如果你有更复杂的使用案例,你也可以编写自己的支持代码,因为 imgui-rs 并不绑定到任何特定的图形/操作系统 API

编译和运行演示

git clone https://github.com/imgui-rs/imgui-rs
cd imgui-rs
git submodule update --init --recursive

主要示例位于 imgui-examples 目录。

# At the reposity root
cd imgui-examples
cargo test

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

gfx 后端示例位于 imgui-gfx-examples 目录。

cd imgui-gfx-examples
cargo test

cargo run --example gfx_hello_world
cargo run --example gfx_test_window

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

如何贡献

  1. 更改或添加某些内容

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

  3. 运行 rustfmt 以确保代码风格一致性

    rustup component add rustfmt
    cargo fmt
    
  4. 在 Github 上打开一个 pull request

许可协议

根据您的选择,许可协议为以下之一:

使用 Dear ImGuicimgui

贡献

除非您明确说明,否则任何您有意提交以包含在作品中的贡献,根据 Apache-2.0 许可协议定义,应作为上述双重许可,不附加任何额外条款或条件。

依赖项