#immediate-mode #immediate #egui-integration #imgui #portable #gamedev

egui_winit_vulkano

Egui 立即模式 GUI 与 winit 和 Vulkano 集成

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

Download history 46/week @ 2024-04-22 40/week @ 2024-04-29 22/week @ 2024-05-06 26/week @ 2024-05-13 72/week @ 2024-05-20 50/week @ 2024-05-27 62/week @ 2024-06-03 49/week @ 2024-06-10 68/week @ 2024-06-17 75/week @ 2024-06-24 43/week @ 2024-07-01 31/week @ 2024-07-08 71/week @ 2024-07-15 68/week @ 2024-07-22 181/week @ 2024-07-29 56/week @ 2024-08-05

381 每月下载量
用于 9 个 crate(8 个直接使用)

Apache-2.0

245KB
1K SLoC

egui_winit_vulkano

Crates.io Apache CI

这是为 eguiwinitvulkano 提供的集成。

您需要一个 Vulkano 目标图像作为输入,UI 将在此图像上绘制。这样做的目的是允许一个足够简单的 API 来将 UI 从渲染器中分离出来,并使您能够使用 Egui 简单地构建立即模式 UI。

用法

  1. 使用 Vulkano 创建自己的渲染器,并允许访问 Vulkano 的 gfx 队列 Arc<Queue> 和 Vulkano 的 winit 表面 Arc<Surface<Window>>
  2. 使用表面和 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());
  1. 在事件循环内部,使用 WindowEvent 更新 gui 集成
gui.update(&event);
  1. 在渲染之前,通过集成在 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
  1. 通过您的渲染器在任何图像或更可能是交换链图像上渲染 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-examplesegui_winit_ash_vk_mem 的示例,则此集成将无法实现。

依赖关系

~64MB
~1M SLoC