vka 0.0.5

A minimal vulkan wrapper
Documentation
#![allow(unused)]
use ash::vk;
pub use vka::*;

pub fn main() {
    env_logger::init();
    let rd = RenderingDevice::new(&RenderingDeviceDesc::default().with_gpu_validation()).unwrap();
    let pixels = rd.new_image(
        &ImageDesc::new_2d(vk::Format::R8G8B8A8_UNORM, 1024, 1024)
            .tiling(vk::ImageTiling::OPTIMAL)
            .usage(vk::ImageUsageFlags::TRANSFER_SRC | vk::ImageUsageFlags::TRANSFER_DST | vk::ImageUsageFlags::SAMPLED)
            .location(MemoryLocation::GpuOnly),
    );

    rd.record(|cmd| {
        cmd.image_barrier_begin(&pixels, vk::ImageLayout::TRANSFER_DST_OPTIMAL);
        cmd.clear_color_image(&pixels, vk::ClearColorValue {
                float32: [1.0, 1.0, 0.0, 1.0]
        }, &[pixels.full_range()]);
        cmd.image_barrier_end(&pixels);
    });
    rd.submit();
    rd.wait_queue();

    let mut data = vec![0u8; 32 * 32 * 4];
    rd.read_image(
        &pixels,
        &mut data,
        vk::Offset3D::default(),
        vk::Extent3D { width: 32, height: 32, depth: 1 },
        4,
        vk::ImageSubresourceLayers {
            aspect_mask: vk::ImageAspectFlags::COLOR,
            mip_level: 0,
            base_array_layer: 0,
            layer_count: 1,
        },
    );
    let mut native_img = image::ImageBuffer::<image::Rgba<u8>, _>::from_raw(32, 32, data.as_mut()).unwrap();
    native_img.save("examples/pixels.png").unwrap();
    println!("Saved pixels.png");
}