refactor(M03): extract M2 prototype cache state
This commit is contained in:
@@ -40,6 +40,7 @@ Paired run 2026-07-11 подтвердил крупный coordinate/placement g
|
||||
- `src/render/m2/m2_mesh_resource_cache_state.gd` - normalized-path prepared static M2 Mesh references with final-shutdown lifetime.
|
||||
- `src/render/m2/m2_mesh_resource_extractor.gd` - first-Mesh selection from direct/PackedScene/Node inputs with temporary instance cleanup.
|
||||
- `src/render/m2/m2_runtime_mesh_finalizer.gd` - refresh version, classifier lifetime, M2Builder rebuild and original-Mesh fallback.
|
||||
- `src/render/m2/m2_prototype_cache_state.gd` - shutdown-lifetime static/animated prototype Nodes and missing/static-only path outcomes.
|
||||
- `src/scenes/streaming/eastern_kingdoms_streaming.tscn` - текущая сцена для проверки Azeroth/Eastern Kingdoms.
|
||||
- `addons/mpq_extractor/loaders/adt_builder.gd` - сборка ADT terrain, control splat материалов и MH2O liquids.
|
||||
- `addons/mpq_extractor/loaders/m2_builder.gd` - сборка статического M2 mesh/material.
|
||||
@@ -1090,8 +1091,9 @@ $exe = Join-Path $env:TEMP 'godot-4.6.1-openwc\Godot_v4.6.1-stable_win64.exe'
|
||||
- The cache retains map-refresh lifetime and clears only at the existing final
|
||||
runtime-cache shutdown site after asynchronous work is drained.
|
||||
- `StreamingWorldLoader` still owns normalization, `.tscn`/`.glb` selection,
|
||||
ResourceLoader I/O, Mesh extraction, material refresh/rebuild, shared missing
|
||||
and prototype/animated caches, permits and MultiMesh materialization.
|
||||
ResourceLoader I/O, Mesh extraction, material refresh/rebuild, cache adoption
|
||||
decisions, permits and MultiMesh materialization. Prototype/negative state is
|
||||
now a sibling cache service.
|
||||
- Cache formats, refresh metadata, profiles and visible output are unchanged.
|
||||
Synthetic cache timing is not asset-backed memory/leak or p95/p99 evidence.
|
||||
|
||||
@@ -1115,8 +1117,8 @@ $exe = Join-Path $env:TEMP 'godot-4.6.1-openwc\Godot_v4.6.1-stable_win64.exe'
|
||||
FileAccess/ClassDB M2Loader I/O and supplies raw data through the loader only
|
||||
when the finalizer reports a stale Mesh; both historical clear sites persist.
|
||||
- Billboard/UV-rotation predicates, rebuild extraction, metadata key and failure
|
||||
fallback are unchanged. Cache adoption, missing state, permits and MultiMesh
|
||||
materialization remain loader-owned.
|
||||
fallback are unchanged. Cache adoption decisions, permits and MultiMesh
|
||||
materialization remain loader-owned; negative outcomes belong to prototype state.
|
||||
- Synthetic triangle rebuild/fallback timing is not asset-backed material,
|
||||
descriptor-pressure/leak or p95/p99 evidence.
|
||||
|
||||
@@ -1127,13 +1129,29 @@ $exe = Join-Path $env:TEMP 'godot-4.6.1-openwc\Godot_v4.6.1-stable_win64.exe'
|
||||
`load_m2_animated` raw Dictionaries.
|
||||
- `StreamingWorldLoader` delegates the stale-Mesh refresh, static prototype and
|
||||
native animated prototype reads. It retains normalization, `.tscn/.glb`
|
||||
fallback order, missing/prototype caches, builders, permits and Node/Mesh use.
|
||||
fallback order, builders, permits and Node/Mesh use; prototype/negative state
|
||||
is now isolated in `M2PrototypeCacheState`.
|
||||
- The repository retains no path, native object or parsed data. Empty paths,
|
||||
absent files/classes/methods and invalid results produce the same empty-value
|
||||
fallback contract; path join/globalization and native method names are exact.
|
||||
- No cache format, parser, material, geometry, animation or visible rule changed.
|
||||
Synthetic missing-input timing is not asset-backed I/O/p95/p99 or fidelity evidence.
|
||||
|
||||
## 2026-07-17 M2 Prototype Cache State
|
||||
|
||||
- `M2PrototypeCacheState` now owns the exact static and animated prototype Node
|
||||
references plus missing-model and static-animation negative path outcomes.
|
||||
- Sync static, native animated, threaded GLB animation, Mesh finalize and
|
||||
material-prototype paths delegate lookup/adoption/negative transitions to the
|
||||
service. First valid prototype remains canonical for each normalized path.
|
||||
- Map refresh still retains all four states. Final shutdown still occurs after
|
||||
asynchronous drain and now calls one idempotent release operation that frees
|
||||
detached prototypes, queues defensive in-tree Nodes and clears path outcomes.
|
||||
- `StreamingWorldLoader` retains normalization, ResourceLoader/native I/O,
|
||||
builders, animation policy, fallback order, permits and materialization.
|
||||
- No cache format, visible rule or profile changed. Synthetic ownership/timing
|
||||
evidence is not an asset-backed traversal/leak/p95/p99 or fidelity claim.
|
||||
|
||||
## 2026-07-17 WMO Placement Resolver Extraction
|
||||
|
||||
- `WmoPlacementResolver` now owns lowercase/slash cache-key normalization,
|
||||
|
||||
Reference in New Issue
Block a user