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 • Rust 包仓库 46/week @ 2024-04-22 • Rust 包仓库 40/week @ 2024-04-29 • Rust 包仓库 22/week @ 2024-05-06 • Rust 包仓库 26/week @ 2024-05-13 • Rust 包仓库 72/week @ 2024-05-20 • Rust 包仓库 50/week @ 2024-05-27 • Rust 包仓库 62/week @ 2024-06-03 • Rust 包仓库 49/week @ 2024-06-10 • Rust 包仓库 68/week @ 2024-06-17 • Rust 包仓库 75/week @ 2024-06-24 • Rust 包仓库 43/week @ 2024-07-01 • Rust 包仓库 31/week @ 2024-07-08 • Rust 包仓库 71/week @ 2024-07-15 • Rust 包仓库 68/week @ 2024-07-22 • Rust 包仓库 181/week @ 2024-07-29 • Rust 包仓库 56/week @ 2024-08-05 • Rust 包仓库

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