vka 0.0.4

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

pub fn main() -> vka::Result<()> {
    env_logger::init();
    let rd = RenderingDevice::new(&RenderingDeviceDesc::default().with_gpu_validation())?;
    let pixels = rd.image_create(
        &ImageDesc::new_2d(vk::Format::R8G8B8A8_UNORM, 1024, 1024)
            .tiling(vk::ImageTiling::OPTIMAL)
            .usage(vk::ImageUsageFlags::TRANSFER_SRC | vk::ImageUsageFlags::TRANSFER_DST)
            .location(MemoryLocation::GpuOnly),
    )?;
    pixels.set_name("pixels buffer image");

    rd.clear_color_image(&pixels, vk::ClearColorValue { float32: [0.0, 1.0, 0.0, 1.0] }, pixels.full_range());
    rd.submit_wait()?;

    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")?;
    println!("Saved pixels.png");
    Ok(())
}