diff options
Diffstat (limited to 'engine/src/rendering.rs')
| -rw-r--r-- | engine/src/rendering.rs | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/engine/src/rendering.rs b/engine/src/rendering.rs index 7a46b29..5219d0a 100644 --- a/engine/src/rendering.rs +++ b/engine/src/rendering.rs @@ -19,6 +19,7 @@ use crate::ecs::system::initializable::Initializable; use crate::ecs::system::observer::Observe; use crate::ecs::system::Into; use crate::ecs::{declare_entity, pair, Component, Query, Sole}; +use crate::image::{ColorType as ImageColorType, Image}; use crate::mesh::Mesh; use crate::rendering::blending::Config as BlendingConfig; use crate::rendering::object::{Id as ObjectId, Store as ObjectStore}; @@ -556,35 +557,35 @@ struct ActiveDrawProperties pub draw_properties: DrawProperties, } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[non_exhaustive] pub enum RgbTextureDataType { UnsignedByte, } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[non_exhaustive] pub enum RgbaTextureDataType { UnsignedByte, } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[non_exhaustive] pub enum SrgbTextureDataType { UnsignedByte, } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[non_exhaustive] pub enum SrgbaTextureDataType { UnsignedByte, } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[non_exhaustive] pub enum TexturePixelDataFormat { @@ -593,3 +594,27 @@ pub enum TexturePixelDataFormat Srgb(SrgbTextureDataType), Srgba(SrgbaTextureDataType), } + +impl TexturePixelDataFormat +{ + pub fn for_image(image: &Image) -> Option<Self> + { + let is_srgb = image.color_space_is_srgb(); + + match image.color_type() { + ImageColorType::Rgb8 if is_srgb => Some(TexturePixelDataFormat::Srgb( + SrgbTextureDataType::UnsignedByte, + )), + ImageColorType::Rgb8 => Some(TexturePixelDataFormat::Rgb( + RgbTextureDataType::UnsignedByte, + )), + ImageColorType::Rgba8 if is_srgb => Some(TexturePixelDataFormat::Srgba( + SrgbaTextureDataType::UnsignedByte, + )), + ImageColorType::Rgba8 => Some(TexturePixelDataFormat::Rgba( + RgbaTextureDataType::UnsignedByte, + )), + _ => None, + } + } +} |
