diff options
| author | HampusM <hampus@hampusmat.com> | 2026-08-25 15:41:40 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-08-25 15:41:40 +0200 |
| commit | 4d011687e5e65b97168610659bc79330983cf59b (patch) | |
| tree | 69166d4ba315e0c749305dee1a1f851a557093ca /engine/src/model/asset.rs | |
| parent | e8df35e08e43b0fe4178267544bb0a0834267598 (diff) | |
perf(engine): optimize wavefront obj parsing
Diffstat (limited to 'engine/src/model/asset.rs')
| -rw-r--r-- | engine/src/model/asset.rs | 32 |
1 files changed, 7 insertions, 25 deletions
diff --git a/engine/src/model/asset.rs b/engine/src/model/asset.rs index 070200d..dd9e60b 100644 --- a/engine/src/model/asset.rs +++ b/engine/src/model/asset.rs @@ -1,4 +1,3 @@ -use std::collections::HashSet; use std::fs::read_to_string; use std::path::{Path, PathBuf}; @@ -30,41 +29,24 @@ fn import_wavefront_obj_asset( let mesh_asset = asset_submitter.submit_store_named("mesh", mesh); - let mut material_asset_map_assets = - Vec::with_capacity(obj.mtl_libs.iter().flatten().count()); + let mut material_asset_map_assets = Vec::with_capacity(obj.mtl_libs.iter().count()); - for mtl_lib_path in obj.mtl_libs.iter().flatten() { + for mtl_lib_path in &obj.mtl_libs { let mtl_lib_asset = asset_submitter.submit_load_other::<MaterialAssetMap>(mtl_lib_path.as_path()); material_asset_map_assets.push(mtl_lib_asset); } - let material_names = obj - .faces - .into_iter() - .map(|face| face.material_name) - .flatten() - .fold( - (HashSet::<String>::new(), Vec::<String>::new()), - |(mut pushed_mat_names, mut unique_mat_names), material_name| { - if pushed_mat_names.contains(&material_name) { - return (pushed_mat_names, unique_mat_names); - } - - unique_mat_names.push(material_name.clone()); - pushed_mat_names.insert(material_name); - - (pushed_mat_names, unique_mat_names) - }, - ) - .1; - asset_submitter.submit_store( Spec::builder() .mesh(mesh_asset) .materials(Materials::Maps(material_asset_map_assets)) - .material_names(material_names) + .material_names( + obj.unique_used_material_names + .into_iter() + .map(|material_name| material_name.into_string()), + ) .build(), ); |
