summaryrefslogtreecommitdiff
path: root/engine/src/model.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-03-20 14:22:19 +0100
committerHampusM <hampus@hampusmat.com>2026-03-20 14:22:19 +0100
commitf285f82072b491b1f3cc92db8e08485f26779d5a (patch)
treebf6c6c61cdfb3a12550e55966c8552957ade9e71 /engine/src/model.rs
parent0546d575c11d3668d0f95933697ae4f670fe2a55 (diff)
feat(engine): use slang for shadersHEADmaster
Diffstat (limited to 'engine/src/model.rs')
-rw-r--r--engine/src/model.rs41
1 files changed, 40 insertions, 1 deletions
diff --git a/engine/src/model.rs b/engine/src/model.rs
index 4c88f8f..ebf623f 100644
--- a/engine/src/model.rs
+++ b/engine/src/model.rs
@@ -3,7 +3,7 @@ use std::collections::HashMap;
use ecs::Component;
-use crate::asset::Handle as AssetHandle;
+use crate::asset::{Assets, Handle as AssetHandle};
use crate::material::Material;
use crate::material::asset::Map as MaterialAssetMap;
use crate::mesh::Mesh;
@@ -40,6 +40,38 @@ impl Spec
{
SpecBuilder::default()
}
+
+ pub fn find_first_material<'assets>(
+ &'assets self,
+ assets: &'assets Assets,
+ ) -> MaterialSearchResult<'assets>
+ {
+ let Some(material_name) = self.material_names.first() else {
+ return MaterialSearchResult::NoMaterials;
+ };
+
+ let material_asset = match &self.materials {
+ Materials::Maps(material_asset_map_assets) => material_asset_map_assets
+ .iter()
+ .find_map(|mat_asset_map_asset| {
+ let mat_asset_map = assets.get(mat_asset_map_asset)?;
+
+ mat_asset_map.assets.get(material_name)
+ }),
+ Materials::Direct(material_assets) => material_assets.get(material_name),
+ };
+
+ let Some(material_asset) = material_asset else {
+ return MaterialSearchResult::NotFound;
+ };
+
+ if assets.get(material_asset).is_none() {
+ tracing::trace!("Missing material asset");
+ return MaterialSearchResult::NotFound;
+ }
+
+ MaterialSearchResult::Found(material_asset)
+ }
}
#[derive(Debug, Default, Clone)]
@@ -152,3 +184,10 @@ impl Default for Materials
Self::Maps(Vec::new())
}
}
+
+pub enum MaterialSearchResult<'a>
+{
+ Found(&'a AssetHandle<Material>),
+ NotFound,
+ NoMaterials,
+}