Work in progress utility crate for kickstarting vulkan development with shaderc, ash and the VMA allocator.
Center module is Vkinit, created from RawHandles and VkInitCreateInfo.
This is mostly a personal utility crate and no guarentees are made in terms of stability until 1.0.0.
```rust,norun use winit::window::WindowBuilder; use winit::eventloop::{EventLoop, EventLoopBuilder}; use winit::dpi::LogicalSize; use rawwindowhandle::{HasRawDisplayHandle, HasRawWindowHandle}; use vku::{VkInitCreateInfo, VkInit};
let eventloop: EventLoop<()> = EventLoopBuilder::default().build(); let size = [800u32, 600u32]; let window = WindowBuilder::new() .withinnersize(LogicalSize{width: size[0], height: size[1]}) .build(&eventloop).unwrap();
let displayh = window.rawdisplayhandle(); let windowh = window.rawwindowhandle();
let createinfo = VkInitCreateInfo::default(); let vkinit = VkInit::new(Some(&displayh), Some(&windowh), Some(size), create_info).unwrap(); ```
```rust,norun use rawwindow_handle::{RawDisplayHandle, RawWindowHandle}; use vku::VkInit;
let mut vkinit: VkInit = todo!(); let displayh: RawDisplayHandle = todo!(); let window_h: RawWindowHandle = todo!();
let newsize = [1200u32, 900_u32];
vkinit.onresize(&displayh, &windowh, new_size).unwrap(); ```
## VMA Image allocation and tracked layout transitions: ```rust,no_run use vku::{VkInit, CmdType}; use ash::vk::{Extent3D, Format, ImageAspectFlags, ImageLayout};
let vk_init: VkInit = todo!();
let setupcmdbufferpool = vkinit.createcmdpool(CmdType::Any).unwrap(); let setupcmdbuffer = vkinit.createcommandbuffers(&setupcmdbufferpool, 1).unwrap()[0]; let setupfence = vkinit.create_fence().unwrap();
vkinit.begincmdbuffer(&setupcmd_buffer).unwrap();
let extent = Extent3D{width: 100, height: 100, depth: 1}; let format = Format::R8G8B8A8UNORM; let aspectflags = ImageAspectFlags::COLOR; let mut image = vkinit.createemptyimage(extent, format, aspectflags).unwrap();
let imagebarrier = image.getimagelayouttransitionbarrier2( ImageLayout::TRANSFERDST_OPTIMAL, None, None).unwrap(); // No queue family ownership transfer
vkinit.cmdpipelinebarrier2( &setupcmdbuffer, &[imagebarrier], &[]); // Only this image barrier, no BufferMemoryBarriers
vkinit.endandsubmitcmdbuffer( &setupcmdbuffer, CmdType::Any, &setupfence, &[], &[], &[]).unwrap(); // Wait on setup fence, wait/signal no semaphores ```
```rust,norun let srcdirpath = std::path::Path::new("./assets/shaders/src/"); let targetdirpath = std::path::Path::new("./assets/shaders/compiledshaders/"); let debugtextresult = true;
vku::compileallshaders(&srcdirpath, &targetdirpath, debugtextresult).unwrap(); ```
For more examples check the examples repo.