summaryrefslogtreecommitdiff
path: root/engine/src/model/asset.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-08-25 15:41:40 +0200
committerHampusM <hampus@hampusmat.com>2026-08-25 15:41:40 +0200
commit4d011687e5e65b97168610659bc79330983cf59b (patch)
tree69166d4ba315e0c749305dee1a1f851a557093ca /engine/src/model/asset.rs
parente8df35e08e43b0fe4178267544bb0a0834267598 (diff)
perf(engine): optimize wavefront obj parsing
Diffstat (limited to 'engine/src/model/asset.rs')
-rw-r--r--engine/src/model/asset.rs32
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(),
);