engine: image loading

ecs
q3k 2020-04-04 22:18:37 +02:00
parent fab5855aaa
commit cb1e800279
3 changed files with 36 additions and 0 deletions

View File

@ -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",

View File

@ -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<WT: 'static + Send + Sync>(
surface_binding: &super::surface_binding::SurfaceBinding<WT>,
name: String,
) -> Arc<vm::ImmutableImage<vf::Format>> {
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
}

View File

@ -18,6 +18,7 @@ mod qfi;
mod shaders;
mod swapchain_binding;
mod worker;
pub mod images;
use crate::render::renderable;