From 7115f199c11c9c48a30ac9c40c67f8e74c878a61 Mon Sep 17 00:00:00 2001 From: Michael Huebner Date: Mon, 10 Mar 2025 12:07:03 +0100 Subject: [PATCH] Add image modifier to cube map generation --- vulkan-rs/src/image.rs | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/vulkan-rs/src/image.rs b/vulkan-rs/src/image.rs index 800dfdc..f95dabc 100644 --- a/vulkan-rs/src/image.rs +++ b/vulkan-rs/src/image.rs @@ -9,6 +9,15 @@ use std::path::Path; use std::sync::{Arc, Mutex}; use std::time::Duration; +pub enum ImageModifier { + None, + Rotate90, + Rotate180, + Rotate270, + FlipV, + FlipH, +} + enum ImageSourceType { Empty, Raw(Vec), @@ -699,16 +708,34 @@ impl Image { /// # Arguments /// /// * `array` - Source images - pub fn cube_map(array: [AssetPath; 6]) -> Result { - let images = array + pub fn cube_map(array: [(AssetPath, ImageModifier); 6]) -> Result { + let mut dyn_images = array .into_iter() - .map(|path| { - image::open(&path.full_path()) - .map(|i| i.to_rgba8()) - .map_err(|err| anyhow::Error::new(err).context(path.full_path())) + .map(|(path, modifier)| { + Ok(( + image::open(&path.full_path()) + .map_err(|err| anyhow::Error::new(err).context(path.full_path()))?, + modifier, + )) }) .collect::>>()?; + for (image, modifier) in dyn_images.iter_mut() { + match modifier { + ImageModifier::None => (), + ImageModifier::Rotate90 => *image = image.rotate90(), + ImageModifier::Rotate180 => *image = image.rotate180(), + ImageModifier::Rotate270 => *image = image.rotate270(), + ImageModifier::FlipV => *image = image.flipv(), + ImageModifier::FlipH => *image = image.fliph(), + } + } + + let images = dyn_images + .into_iter() + .map(|(image, _)| image.to_rgba8()) + .collect::>(); + let width = images[0].width(); let height = images[0].height();