#vulkano #imgui #graphics

imgui-vulkano-renderer-unsafe

imgui-rs 使用 Vulkano 开发的渲染器,也支持 UnsafeCommandBufferBuilder

3 个不稳定版本

0.6.1 2021年2月22日
0.5.1 2021年2月4日
0.5.0 2021年2月2日

#147 in 渲染


game_kernel 中使用

MIT 许可证

1MB
601

imgui-vulkano-renderer

基于 vulkanoimgui-rs 渲染器。

注意:我仅在几个示例和一些项目中使用过此渲染器,因此可能存在一些问题,但它似乎与基本的 ImGui 使用兼容。

支持 imgui-rs 版本 0.6.0vulkano 版本 0.19.0

注意:目前 vulkano-win,即 vulkanowinit 集成,仅支持 winit 0.22.2,而 imgui-winit-support 默认使用 winit 0.23.0。要使它们兼容,请在 imgui-winit-support 包中启用 winit-22 功能。

使用方法

Renderer 结构旨在作为 imgui-glium-rendererimgui-gfx-renderer(来自 imgui-rs 仓库)中相应功能的直接替换,除了 API 特定的上下文参数(Vulkano 的 DeviceQueue 结构)。

设置

use imgui_vulkano_renderer::Renderer;

let mut renderer = Renderer::init(
    &mut imgui_ctx,
    device.clone(),
    graphics_queue.clone(),
    Format::R8G8B8A8Srgb
).unwrap();

渲染

使用 Renderer::draw_commands 函数来更新缓冲区


let ui = imgui_ctx.frame();

// ... UI elements created here

let draw_data = ui.render();

let mut cmd_buf_builder = AutoCommandBufferBuilder::new(device.clone(), graphics_queue.family()).unwrap();

// add Vulkan commands to a command buffer. Here a new command buffer is used, but you can also append to an existing one.
renderer.draw_commands(&mut cmd_buf_builder, graphics_queue.clone(), target_image.clone(), draw_data).unwrap();

let cmd_buf = cmd_buf_builder.build().unwrap();

其他

字体图集纹理通过以下方式重新加载

renderer.reupload_font_texture(&mut imgui_ctx, device.clone(), queue.clone());

您 UI 中使用的纹理在 imgui::Textures 结构中查找,可以使用 Renderer::textures 访问。

示例

我将来自 imgui-rs 的几个示例进行了重写,以展示基本用法(其中大多数只需对 examples/support/mod.rs 中的 System 结构体进行设置更改)。它们可以用以下方式运行:

cargo run --example hello_world
cargo run --example custom_textures

依赖项

~48MB
~1M SLoC