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 = (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 { + let Some((mesh_node_id, mesh_parent_edge)) = prototype_mesh_anchors + .get(prototype_index) + .copied() + .flatten() + else { continue; }; - let Some(mesh_node_id) = prototype_mesh_node_id(graph, prototype_node_id) 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); diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index 1acb056..520361c 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -1110,6 +1110,14 @@ before the first TEXM progress marker. The differing checkpoints rule out the previous overly narrow claim that TEXM is the sole remaining target. Profiling must compare WEAR, MAT0, TEXM, graph allocation and archive I/O quantitatively. +Visual expansion now snapshots each prototype's base-graph `Prototype→MSH` +anchor before it appends any WEAR/MAT0/TEXM nodes and edges. The subsequent +traversal reads this immutable vector rather than repeatedly linearly searching +the growing graph; graph content, node/edge IDs and provenance remain +unchanged. The same controlled 180-second Part 2 probe still ended at +`GraphVisualMaterials`, so this is a complexity/correctness improvement rather +than measured evidence of a startup checkpoint advance. + Mission loading now raises the decoded-payload cache entry budget from 64 to 256 while retaining its 64 MiB byte budget. This avoids premature entry-count eviction during resource-rich loads without making memory unbounded. The same