aboutsummaryrefslogtreecommitdiff
path: root/src/classes/texture.rs
diff options
context:
space:
mode:
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
+ }
+ }
+}