diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 11:24:35 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 11:24:35 +0300 |
| commit | f4fd8f4fce8ea3eda8780ddb09339b52ea784b27 (patch) | |
| tree | aaf31a8035bf0625669d17618b872196a14b307d /crates/fparkan-assets/src | |
| parent | bcf1ce99719bb455d47e716951a7d3943dd41b33 (diff) | |
| download | fparkan-f4fd8f4fce8ea3eda8780ddb09339b52ea784b27.tar.xz fparkan-f4fd8f4fce8ea3eda8780ddb09339b52ea784b27.zip | |
perf(assets): cache visual graph anchors
Diffstat (limited to 'crates/fparkan-assets/src')
| -rw-r--r-- | crates/fparkan-assets/src/lib.rs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/crates/fparkan-assets/src/lib.rs b/crates/fparkan-assets/src/lib.rs index ac64648..d133574 100644 --- a/crates/fparkan-assets/src/lib.rs +++ b/crates/fparkan-assets/src/lib.rs @@ -1205,19 +1205,29 @@ pub fn extend_graph_report_with_visual_dependencies_with_progress<R: ResourceRep let mut wear_requests = 0usize; let mut material_requests = 0usize; let mut texture_requests = 0usize; + // Capture all base-graph anchors before this traversal appends visual + // resources and edges. Looking them up again from the growing graph would + // make each later prototype scan an ever larger collection. + let prototype_mesh_anchors: Vec<_> = (0..prototypes.len()) + .map(|prototype_index| { + let prototype_node_id = prototype_node_id(graph, prototype_index)?; + let mesh_node_id = prototype_mesh_node_id(graph, prototype_node_id)?; + Some((mesh_node_id, mesh_edge_id(graph, prototype_node_id))) + }) + .collect(); for (prototype_index, prototype) in prototypes.iter().enumerate() { let PrototypeGeometry::Mesh(mesh) = &prototype.geometry else { continue; }; report.wear_request_count += 1; - let Some(prototype_node_id) = prototype_node_id(graph, prototype_index) else { - continue; - }; - let Some(mesh_node_id) = prototype_mesh_node_id(graph, prototype_node_id) else { + let Some((mesh_node_id, mesh_parent_edge)) = prototype_mesh_anchors + .get(prototype_index) + .copied() + .flatten() + else { continue; }; - let mesh_parent_edge = mesh_edge_id(graph, prototype_node_id); let root_index = root_index_for_prototype(graph, prototype_index); wear_requests = wear_requests.saturating_add(1); |
