31 个版本 (17 个稳定版)
新 1.14.0 | 2024年8月21日 |
---|---|
1.13.0 | 2024年5月5日 |
1.12.0 | 2024年2月2日 |
1.10.0 | 2023年9月26日 |
0.3.1 | 2020年3月2日 |
在 图形API 中排名 37
每月下载量 119
83KB
1.5K SLoC
imgui-rs-vulkan-renderer
使用 imgui-rs 和 Ash 实现的 Vulkan 渲染器。
兼容性
crate | imgui | ash | gpu-allocator (功能) | vk-mem (功能) |
---|---|---|---|---|
1.14.0 | 0.12 | 0.38 | 0.27 | 0.4.0 |
1.13.0 | 0.12 | [0.34, 0.37] | 0.26 | 0.3.0 |
1.12.0 | 0.11 | [0.34, 0.37] | 0.25 | 0.3.0 |
1.11.0 | 0.11 | [0.34, 0.37] | 0.25 | 0.2.3 (分支) |
1.10.0 | 0.11 | [0.34, 0.37] | 0.23 | 0.2.3 (分支) |
1.9.0 | 0.11 | [0.34, 0.37] | 0.22 | 0.2.3 (分支) |
1.8.0 | 0.10 | [0.34, 0.37] | 0.22 | 0.2.3 (分支) |
1.7.0 | 0.10 | [0.34, 0.37] | [0.19, 0.21] | 0.2.3 (分支) |
1.6.x | 0.9 | [0.34, 0.37] | [0.19, 0.21] | 0.2.3 (分支) |
1.5.0 | 0.8 | [0.34, 0.37] | 0.19 | 0.2.3 (分支) |
1.4.0 | 0.8 | [0.34, 0.37] | 0.18 | 0.2.3 (分支) |
1.3.0 | 0.8 | [0.34, 0.37] | 0.18 | 0.2.3 (分支) |
1.2.0 | 0.8 | 0.36 | 0.17 | 0.2.3 (分支) |
1.1.x | 0.8 | 0.35 | 0.15 | 0.2.3 (分支) |
1.0.0 | 0.8 | 0.35 | 0.14 | 0.2.3 (分支) |
工作原理
渲染器将绘图命令记录到应用程序提供的命令缓冲区中。以下是此crate的功能及其工作方式的简要概述。
- 顶点/索引缓冲区
渲染器创建一个顶点缓冲区和索引缓冲区,每次调用 Renderer::cmd_draw
时都会更新这些缓冲区。如果顶点/索引计数超过缓冲区实际能容纳的数量,则缓冲区会进行缩放(实际上是销毁后重新创建)。
- 飞行帧
渲染器支持具有多个飞行帧。您需要在初始化渲染器期间指定帧的数量。渲染器为每帧管理一个顶点缓冲区和索引缓冲区。
- 不执行绘图调用
Renderer::cmd_draw
只会将命令记录到应用程序提供的命令缓冲区中。它不会将任何内容提交到GPU。
- 自定义纹理
渲染器支持自定义纹理。有关详细信息,请参阅 Renderer::textures
。
- 自定义Vulkan分配器
目前不支持自定义Vulkan分配器。
功能
gpu-allocator
此功能增加了对gpu-allocator的支持。它添加了Renderer::with_gpu_allocator
,它接受一个Arc<Mutex<gpu_allocator::vulkan::Allocator>>
。然后所有内部分配器都使用此分配器完成。
vk-mem
此功能增加了对vk-mem-rs的支持。它添加了Renderer::with_vk_mem_allocator
,它接受一个Arc<Mutex<vk_mem::Allocator>>
。然后所有内部分配器都使用此分配器完成。
我对
Arc<Mutex<...>>
的东西还不太确定。它对我工作得很好,但我不确定这是否是最好的方法。欢迎提出建议。
dynamic-rendering
如果您想将库集成到一个使用Vulkan动态渲染的应用程序中,此功能非常有用。启用后,通常接受vk::RenderPass
作为参数的函数现在将接受一个DynamicRendering
,它包含UI将要绘制的颜色附件的格式以及可选的深度附件格式。
集成
您可以在示例的common模块中找到集成示例。
// Example with default allocator
let renderer = Renderer::with_default_allocator(
&instance,
physical_device,
device.clone(),
graphics_queue,
command_pool,
render_pass,
&mut imgui,
Some(Options {
in_flight_frames: 1,
..Default::default()
}),
).unwrap();
示例
您可以通过运行以下命令来运行一组示例
# If you want to enable validation layers
export VK_LAYER_PATH=$VULKAN_SDK/Bin
export VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation
# Or with Powershell
$env:VK_LAYER_PATH = "$env:VULKAN_SDK\Bin"
$env:VK_INSTANCE_LAYERS = "VK_LAYER_KHRONOS_validation"
# If you changed the shader code (you'll need glslangValidator on you PATH)
# There is also a PowerShell version (compile_shaders.ps1)
./compile_shaders.sh
# Run an example
cargo run --example <example>
# Example can be one of the following value:
# - collapsing_header
# - color_button
# - creating_windows
# - custom_textures
# - disablement
# - draw_list
# - hello_world
# - id_wrangling
# - keyboard
# - long_list
# - long_table
# - multiple_fonts
# - progress_bar
# - radio_button
# - slider
# - tables_api
# - test_drawing_channels_split
# - test_window_impl
# - test_window
# - text_callbacks
# - text_input
依赖关系
~26MB
~419K SLoC