aboutsummaryrefslogtreecommitdiff
path: root/src/classes/texture.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-26 16:07:20 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-26 16:07:20 +0100
commit4e8beb2270223bb3b6232773d82f18cc0e224435 (patch)
tree23fa130c2046a6bde74a50dbbcf9774a6df3ecb8 /src/classes/texture.rs
parent6bdc402597ade997d1ceb69062b11248d32e9a6f (diff)
downloadunity-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.rs29
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
+ }
+ }
+}