#sfml #im-gui #后端 #移植 #图形 #渲染器 #平台

imgui-sfml-support

为Rust的ImGui移植提供的SFML后端

1 个不稳定发布

0.1.3 2023年12月27日
0.1.2 2023年12月27日
0.1.1 2023年12月27日
0.1.0 2023年12月26日

#391图形API

MIT 许可证

13KB
197

ImGui-SFML-Support

为Rust的ImGui移植提供的SFML后端

代码示例

use imgui::Context;
use imgui_sfml_support::*;
use sfml::{graphics::{RenderWindow, RenderTarget, Color}, window::{Style, ContextSettings, Event}};

fn main() {
    let mut wnd = RenderWindow::new((800, 800), "Rust: SFML-ImGui", Style::CLOSE, &ContextSettings::default());

    let mut imgui = Context::create();
    let mut renderer = SFMLRenderer::init(&mut imgui);
    let mut platform = SFMLPlatform::init(&mut imgui, &wnd);


    while wnd.is_open() {
        while let Some(event) = wnd.poll_event() {
            platform.handle_event(&mut imgui, event);
            match event {
                Event::Closed => wnd.close(),
                _ => (),
            }


            platform.prepare_frame(&mut imgui);
            let ui = imgui.new_frame();
            // do your imgui work here
            ui.show_demo_window(&mut true);

            wnd.clear(Color::BLACK);
            wnd.reset_gl_states();

            renderer.render(&mut imgui, &mut wnd);

            wnd.display();
        }
    }
}

安装说明

重要提示:此软件包无法直接使用!

由于crates.io处理版本的方式,您应该使用以下指定的解决方案才能使其正常工作。
为了修复此问题,请在您的crate的Cargo.toml文件中的[dependencies]

# change these lines
sfml = "0.21.0"
imgui-sfml-support = "0.1.1"
# to these lines
sfml = { git = "https://github.com/jeremyletang/rust-sfml.git" }
imgui-sfml-support = { git = "https://github.com/truenotzero/imgui-sfml-support.git", branch = "workaround" }

我已经提交了一个pull request以修复此问题,它已被接受!
然而,由于cargo处理依赖项和版本的方式,在rust-sfml更新到0.22.0之前,需要此解决方案。
这是因为rust-sfml版本0.21.0没有提供所需的渲染器所需的sf::Context::getFunction()

鸣谢

imgui-opengl-renderer: 提供渲染器
imgui-sfml: 一个执行相同功能的C++库

许可证

代码遵循MIT许可证

依赖项

~14–19MB
~261K SLoC