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 init = VkInit::new(Some(&displayh), Some(&windowh), Some(size), createinfo).unwrap(); ```
```rust,no_run
let mut init = VkInit::new(Some(&displayh), Some(&windowh), Some(size), createinfo).unwrap();
let newsize = [1200u32, 900u32];
init.recreateswapchain(newsize).unwrap();
## VMA Image allocation and layout transition:
rust,no_run
let init = VkInit::new(Some(&displayh), Some(&windowh), Some(size), create_info).unwrap();
let setupcmdbufferpool = init.createcmd_pool(CmdType::Any).unwrap();
let setupcmdbuffer = init.createcommandbuffers(&setupcmdbuffer_pool, 1).unwrap()[0];
let setupfence = init.createfence().unwrap();
init.begincmdbuffer(&setupcmdbuffer).unwrap();
let extent = Extent3D{width: 100, height: 100, depth: 1}; let format = Format::R8G8B8A8UNORM; let aspectflags = ImageAspectFlags::COLOR; let mut image = init.createemptyimage(extent, format, aspect_flags).unwrap();
let imagebarrier = image.getimagelayouttransitionbarrier2( ImageLayout::TRANSFERDST_OPTIMAL, None, None).unwrap(); // No queue family ownership transfer
init.cmdpipelinebarrier2( &setupcmdbuffer, &[image_barrier], &[]); // Only this image barrier, no BufferMemoryBarriers
init.endandsubmitcmdbuffer( &setupcmdbuffer, CmdType::Any, &setup_fence, &[], &[], &[]).unwrap(); // Wait on setup fence, wait/signal no semaphores ```
```rust,no_run
let srcdirpath = Path::new("./assets/shaders/src/"); let targetdirpath = Path::new("./assets/shaders/compiledshaders/"); let debugtext_result = true;
vku::compileallshaders(&srcdirpath, &targetdirpath, debugtextresult).unwrap(); ```
For more examples check the examples folder.