21 个版本 (12 个重大更新)
0.12.0 | 2024年5月5日 |
---|---|
0.11.0 | 2023年4月5日 |
0.10.0 | 2023年1月16日 |
0.9.0 | 2022年11月30日 |
0.0.22 | 2019年2月5日 |
在 GUI 中排名第 890
每月下载量 2,653
在 31 个 Crates 中使用(28 个直接使用)
680KB
13K SLoC
此 crate 为 imgui-rs 提供 winit 基础后端平台。
后端平台处理窗口/输入设备事件并管理其状态。
使用库
要正确使用此库,您需要做五件事情
- 初始化一个
WinitPlatform
实例 - 将其附加到 winit
Window
- 将事件传递到平台(每帧一次)
- 调用帧准备回调(每帧一次)
- 调用渲染准备回调(每帧一次)
完整示例(无渲染器)
use imgui::Context;
use imgui_winit_support::{HiDpiMode, WinitPlatform};
use std::time::Instant;
use winit::event::{Event, WindowEvent};
use winit::event_loop::{ControlFlow, EventLoop};
use winit::window::Window;
let mut event_loop = EventLoop::new().expect("Failed to create EventLoop");
let mut window = Window::new(&event_loop).unwrap();
let mut imgui = Context::create();
// configure imgui-rs Context if necessary
let mut platform = WinitPlatform::init(&mut imgui); // step 1
platform.attach_window(imgui.io_mut(), &window, HiDpiMode::Default); // step 2
let mut last_frame = Instant::now();
let mut run = true;
event_loop.run(move |event, window_target| {
match event {
Event::NewEvents(_) => {
// other application-specific logic
let now = Instant::now();
imgui.io_mut().update_delta_time(now - last_frame);
last_frame = now;
},
Event::AboutToWait => {
// other application-specific logic
platform.prepare_frame(imgui.io_mut(), &window) // step 4
.expect("Failed to prepare frame");
window.request_redraw();
}
Event::WindowEvent { event: WindowEvent::RedrawRequested, .. } => {
let ui = imgui.frame();
// application-specific rendering *under the UI*
// construct the UI
platform.prepare_render(&ui, &window); // step 5
// render the UI with a renderer
let draw_data = imgui.render();
// renderer.render(..., draw_data).expect("UI rendering failed");
// application-specific rendering *over the UI*
},
Event::WindowEvent { event: WindowEvent::CloseRequested, .. } => {
window_target.exit();
}
// other application-specific event handling
event => {
platform.handle_event(imgui.io_mut(), &window, &event); // step 3
// other application-specific event handling
}
}
}).expect("EventLoop error");
依赖项
~14–27MB
~442K SLoC