Add image modifier to cube map generation

This commit is contained in:
Michael Huebner 2025-03-10 12:07:03 +01:00
parent 71ddeee80c
commit 7115f199c1

View file

@ -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<u8>),
@ -699,16 +708,34 @@ impl Image {
/// # Arguments
///
/// * `array` - Source images
pub fn cube_map(array: [AssetPath; 6]) -> Result<ImageBuilder> {
let images = array
pub fn cube_map(array: [(AssetPath, ImageModifier); 6]) -> Result<ImageBuilder> {
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::<Result<Vec<_>>>()?;
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::<Vec<_>>();
let width = images[0].width();
let height = images[0].height();