17 个重大版本发布
0.27.0 | 2023 年 12 月 15 日 |
---|---|
0.26.0 | 2023 年 11 月 19 日 |
0.25.0 | 2023 年 9 月 28 日 |
0.24.0 | 2023 年 4 月 3 日 |
0.13.0 | 2021 年 11 月 17 日 |
#135 in GUI
381 每月下载量
用于 9 个 crate(8 个直接使用)
245KB
1K SLoC
egui_winit_vulkano
这是为 egui、winit 和 vulkano 提供的集成。
您需要一个 Vulkano 目标图像作为输入,UI 将在此图像上绘制。这样做的目的是允许一个足够简单的 API 来将 UI 从渲染器中分离出来,并使您能够使用 Egui 简单地构建立即模式 UI。
用法
- 使用 Vulkano 创建自己的渲染器,并允许访问 Vulkano 的 gfx 队列
Arc<Queue>
和 Vulkano 的 winit 表面Arc<Surface<Window>>
- 使用表面和 gfx 队列创建 Gui 集成
// Has its own renderpass. Modify GuiConfig to determine image clear behavior etc.
let mut gui = Gui::new(&event_loop, renderer.surface(), renderer.queue(), renderer.swapchain_format(), GuiConfig::default());
// Or with subpass. This means that you must create the renderpass yourself. Egui subpass will then draw on your
// image.
let mut gui = Gui::new_with_subpass(&event_loop, renderer.surface(), renderer.queue(), renderer.swapchain_format(), subpass, GuiConfig::default());
- 在事件循环内部,使用
WindowEvent
更新gui
集成
gui.update(&event);
- 在渲染之前,通过集成在
Event::RedrawRequested
中填充立即模式 UI
gui.immediate_ui(|gui| {
let ctx = gui.context();
// Fill egui UI layout here
});
// Or
gui.begin_frame();
// fill egui layout...
// And when you render with `gui.draw_on_image(..)`, this will finish the egui frame
- 通过您的渲染器在任何图像或更可能是交换链图像上渲染 gui
// Acquire swapchain future
let before_future = renderer.acquire().unwrap();
// Render gui by passing the acquire future (or any) and render target image (swapchain image view)
let after_future = gui.draw_on_image(before_future, renderer.swapchain_image_view());
// Present swapchain
renderer.present(after_future, true);
// ----------------------------------
// Or if you created the integration with subpass
let cb = gui.draw_on_subpass_image(framebuffer_dimensions);
draw_pass.execute(cb);
注意,Egui 偏好 UNORM 渲染目标。使用带有 sRGB 的输出格式需要设置 GuiConfig::allow_srgb_render_target
,以确认使用 sRGB 将导致 UI 元素因在线性颜色空间中混合而不是 sRGB 而发生轻微失真。
请参阅示例目录以获取更好的使用说明。
记住,在 Linux 上,您需要安装以下软件才能运行 Egui
sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev
示例
./run_all_examples.sh
备注
如果没有 vulkano-examples 或 egui_winit_ash_vk_mem 的示例,则此集成将无法实现。
依赖关系
~64MB
~1M SLoC