前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每周一库】 imgui-rs - Rust下的Dear ImGui binding

【每周一库】 imgui-rs - Rust下的Dear ImGui binding

作者头像
MikeLoveRust
发布2020-03-17 15:36:19
1.2K0
发布2020-03-17 15:36:19
举报
文章被收录于专栏:Rust语言学习交流

本期的每周一库带来的是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上也给出了一段示例代码供大家理解:

代码语言:javascript
复制
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)。你甚至可以根据需要自己实现一些渲染方法。

编译和运行例子

代码语言:javascript
复制
git clone https://github.com/Gekkio/imgui-rs
cd imgui-rs
git submodule update --init --recursive

imgui-examples目录中提供了一些例子

代码语言:javascript
复制
# 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目录下

代码语言:javascript
复制
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运行结果:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档