本期的每周一库带来的是imgui-rs,是一个Rust下的Dear ImGui binding,从名字不难看出,这是一个GUI框架的库
下面我们主要参考imgui-rs的Github内容开始本期的内容
- Github: imgui-rs: Rust bindings for Dear ImGui
按照Github页面上的介绍,imgui-rs还是一个处于实验阶段的库,最小Rust版本需求为1.38
同时Github上也给出了一段示例代码供大家理解:
Window::new(im_str!("Hello world"))
.size([300.0, 100.0], Condition::FirstUseEver)
.build(&ui, || {
ui.text(im_str!("Hello world!"));
ui.text(im_str!("こんにちは世界!"));
ui.text(im_str!("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]
));
});
特性
- 绑定了Dear ImGui,从而可是在Rust下使用。
- Builder结构使用原始C++库中对于参数的处理办法
- 使用
&ImStr/ImString
类型和im_str
给Dear ImGui传递参数,不接受Rust下的&str/string
类型 - 更方便的和Glium/pre-ll gfx渲染器集成
- 更方便和winit后端集成
后端程序和渲染器的选择
基本上所有使用imgui-rs的应用需要另外两个附加的组件,一个是后端程序,一个是渲染器
后端程序负责集成imgui-rs到操作系统和窗口管理,它的职责包括:
- 处理输入事件(例如:键盘,鼠标),并根据时间来更新imgui-rs的状态
- 传递窗体信息(例如:尺寸,DPI)
- 更新操作系统测的光标
渲染器的职责主要是处理imgui-rs生成的draw list
,通过一些图形API把这些请求进行可视化处理,具体包含:
- 渲染多边形和顶点数据
- 处理DPI和scissor rects
- 贴图管理
最常用的经过测试的搭配是imgui-glium-renderer
+ glium
+ imgui-winit-support
+ winit
。但这并不是唯一的搭配方案。例如还可以使用imgui-gfx-renderer
。还有好多第三方的库也提供了支持(例如OpenGL, SDL2)。你甚至可以根据需要自己实现一些渲染方法。
编译和运行例子
git clone https://github.com/Gekkio/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 hello_world
cargo run --example test_window
实际运行效果
通过命令cargo run --example hello_world
运行结果:
通过命令cargo run --example test_window
运行结果:
通过命令cargo run --example test_window
运行结果:
到这里就是本期每周一库的全部内容