< 返回版块

西沉 发表于 2020-03-13 02:09

Tags:GUI

本期的每周一库带来的是imgui-rs,是一个Rust下的Dear ImGui binding,从名字不难看出,这是一个GUI框架的库

下面我们主要参考imgui-rs的Github内容开始本期的内容

按照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运行结果:

到这里就是本期每周一库的全部内容

评论区

写评论
tokyohuang123 2020-04-07 13:57

没看出shadow

phper-chen 2020-03-13 11:49

一库一库

1 共 2 条评论, 1 页