diff options
author | metamuffin <metamuffin@disroot.org> | 2025-03-26 16:07:20 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-03-26 16:07:20 +0100 |
commit | 4e8beb2270223bb3b6232773d82f18cc0e224435 (patch) | |
tree | 23fa130c2046a6bde74a50dbbcf9774a6df3ecb8 /src/classes/texture.rs | |
parent | 6bdc402597ade997d1ceb69062b11248d32e9a6f (diff) | |
download | unity-tools-4e8beb2270223bb3b6232773d82f18cc0e224435.tar unity-tools-4e8beb2270223bb3b6232773d82f18cc0e224435.tar.bz2 unity-tools-4e8beb2270223bb3b6232773d82f18cc0e224435.tar.zst |
support texture arrays and cubemaps
Diffstat (limited to 'src/classes/texture.rs')
-rw-r--r-- | src/classes/texture.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/classes/texture.rs b/src/classes/texture.rs new file mode 100644 index 0000000..6d1c102 --- /dev/null +++ b/src/classes/texture.rs @@ -0,0 +1,29 @@ +use super::{cubemap::Cubemap, texture2d::Texture2D}; +use crate::object::{Value, parser::FromValue}; +use anyhow::Result; +use serde::Serialize; + +#[derive(Debug, Serialize)] +pub enum AnyTexture { + Cubemap(Cubemap), + Texture2D(Texture2D), +} + +impl FromValue for AnyTexture { + fn from_value(v: Value) -> Result<Self> { + match v.class_name().unwrap().as_str() { + "Cubemap" => Ok(Self::Cubemap(v.parse()?)), + "Texture2D" => Ok(Self::Texture2D(v.parse()?)), + x => unreachable!("{x}"), + } + } +} +impl AnyTexture { + pub fn as_texture2d(self) -> Option<Texture2D> { + if let AnyTexture::Texture2D(x) = self { + Some(x) + } else { + None + } + } +} |