From cb1e800279550d125f02c1487f231132caef0fcc Mon Sep 17 00:00:00 2001 From: Sergiusz Bazanski Date: Sat, 4 Apr 2020 22:18:37 +0200 Subject: [PATCH] engine: image loading --- engine/BUILD | 3 +++ engine/src/render/vulkan/images.rs | 32 ++++++++++++++++++++++++++++++ engine/src/render/vulkan/mod.rs | 1 + 3 files changed, 36 insertions(+) create mode 100644 engine/src/render/vulkan/images.rs diff --git a/engine/BUILD b/engine/BUILD index 9082cd1..dc1ce44 100644 --- a/engine/BUILD +++ b/engine/BUILD @@ -13,6 +13,7 @@ rust_binary( "src/render/mod.rs", "src/render/renderable.rs", "src/render/vulkan/data.rs", + "src/render/vulkan/images.rs", "src/render/vulkan/mod.rs", "src/render/vulkan/pipeline.rs", "src/render/vulkan/qfi.rs", @@ -21,10 +22,12 @@ rust_binary( "src/render/vulkan/swapchain_binding.rs", "src/render/vulkan/worker.rs", "src/util/counter.rs", + "src/util/file.rs", "src/util/mod.rs", ], deps = [ "//third_party/cargo:cgmath", + "//third_party/cargo:image", "//third_party/cargo:winit", "//third_party/cargo:log", "//third_party/cargo:env_logger", diff --git a/engine/src/render/vulkan/images.rs b/engine/src/render/vulkan/images.rs new file mode 100644 index 0000000..7d6553d --- /dev/null +++ b/engine/src/render/vulkan/images.rs @@ -0,0 +1,32 @@ +use std::sync::Arc; + +use image; +use image::GenericImageView; + +use vulkano::image as vm; +use vulkano::format as vf; +use vulkano::sync::GpuFuture; + +pub fn load_texture( + surface_binding: &super::surface_binding::SurfaceBinding, + name: String, +) -> Arc> { + let path = &crate::util::file::resource_path(name); + + let image = image::open(path).unwrap(); + let width = image.width(); + let height = image.height(); + + let image_rgba = image.to_rgba(); + let (image_view, future) = vm::ImmutableImage::from_iter( + image_rgba.into_raw().iter().cloned(), + vm::Dimensions::Dim2d{ width, height }, + vf::Format::R8G8B8A8Unorm, + surface_binding.graphics_queue.clone() + ).unwrap(); + + future.flush().unwrap(); + + image_view +} + diff --git a/engine/src/render/vulkan/mod.rs b/engine/src/render/vulkan/mod.rs index a9853dd..a987b75 100644 --- a/engine/src/render/vulkan/mod.rs +++ b/engine/src/render/vulkan/mod.rs @@ -18,6 +18,7 @@ mod qfi; mod shaders; mod swapchain_binding; mod worker; +pub mod images; use crate::render::renderable;