#vulkano #imgui #graphics #gui #rendering

imgui-vulkano-renderer

A renderer for imgui-rs using Vulkano

9 releases (5 breaking)

0.7.3 Jul 5, 2021
0.7.1 Jun 1, 2021
0.7.0 Feb 22, 2021
0.5.0 Dec 28, 2020
0.1.0 Jul 28, 2020

#111 in GUI

Download history 11/week @ 2021-05-26 14/week @ 2021-06-02 12/week @ 2021-06-09 7/week @ 2021-06-16 4/week @ 2021-06-23 37/week @ 2021-06-30 7/week @ 2021-07-07 13/week @ 2021-07-14 5/week @ 2021-07-21 28/week @ 2021-07-28 21/week @ 2021-08-04 20/week @ 2021-08-11 3/week @ 2021-08-18 2/week @ 2021-08-25 8/week @ 2021-09-08

63 downloads per month

MIT license

1MB
293 lines

crates.io API Docs Liscense

imgui-vulkano-renderer

A vulkano-based renderer for imgui-rs.

Warning: I've only used this renderer in a few examples and a couple projects, so there are likely some issues, but it seems to work with basic ImGui usage.

Supports imgui-rs version 0.7.0 and vulkano version 0.23.0.

Note: Currently vulkano-win and imgui-winit-support, the vulkano and imgui-rs winit integrations, only support winit 0.24.0, even though the current winit version is 0.25.0.

Usage

The Renderer struct is designed to be a drop-in replacement for the equivalent in imgui-glium-renderer and imgui-gfx-renderer (from the imgui-rs repository), modulo the API-specific context arguments (the Vulkano Device and Queue structs).

Setup:

use imgui_vulkano_renderer::Renderer;

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

Rendering:

Use the Renderer::draw_commands function to update buffers and


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();

Misc.

The font altas texture can be reloaded with the following:

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

Textures used in your UI are looked up in an imgui::Textures struct, which can be accessed with Renderer::textures.

Examples

I rewrote a couple of examples from imgui-rs to show basic usage (most of them only needed setup changes to the System struct in examples/support/mod.rs). They can be run with:

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

Dependencies

~36MB
~788K SLoC