refactor(M03): extract ADT water scene finalizer
This commit is contained in:
@@ -38,8 +38,9 @@ flowchart LR
|
||||
State --> Result[Parsed ADT result]
|
||||
Result --> Loader
|
||||
Loader --> Budget[WATER_FINALIZE permit]
|
||||
Loader --> Builder[ADTBuilder water scene]
|
||||
Builder --> Scene[Main-thread tile Node attach]
|
||||
Loader --> Finalizer[AdtWaterSceneFinalizer]
|
||||
Finalizer --> Builder[ADTBuilder water scene]
|
||||
Finalizer --> Scene[Main-thread tile Node attach]
|
||||
```
|
||||
|
||||
Allowed dependencies are RefCounted, Dictionary/Array/String and one Godot
|
||||
@@ -127,7 +128,7 @@ sequenceDiagram
|
||||
participant State as AdtWaterLoadPipelineState
|
||||
participant Worker as WorkerThreadPool task
|
||||
participant Budget as RenderBudgetScheduler
|
||||
participant Builder as ADTBuilder
|
||||
participant Finalizer as AdtWaterSceneFinalizer
|
||||
Loader->>State: enqueue_request(tile key, ADT path)
|
||||
Loader->>State: take_next_request()
|
||||
Loader->>Worker: add_task(parse binding)
|
||||
@@ -140,8 +141,8 @@ sequenceDiagram
|
||||
Loader->>Worker: wait_for_task_completion(task ID)
|
||||
Loader->>State: complete_active_task(key)
|
||||
Loader->>Loader: reject stale tile/path/root
|
||||
Loader->>Builder: build_tile_water_scene(data, origin)
|
||||
Loader->>Loader: attach Node and mark water_loaded
|
||||
Loader->>Finalizer: attach_water_scene(data, origin, tile root, editor owner)
|
||||
Loader->>Loader: mark water_loaded
|
||||
```
|
||||
|
||||
## Dependency diagram
|
||||
@@ -151,10 +152,11 @@ flowchart TB
|
||||
Loader[StreamingWorldLoader] --> State[AdtWaterLoadPipelineState]
|
||||
Loader --> Scheduler[RenderBudgetScheduler]
|
||||
Loader --> Worker[WorkerThreadPool / ADTLoader]
|
||||
Loader --> Builder[ADTBuilder / SceneTree]
|
||||
Loader --> Finalizer[AdtWaterSceneFinalizer]
|
||||
Finalizer --> Builder[ADTBuilder / SceneTree]
|
||||
Worker -->|publish only| State
|
||||
State -. no dependency .-> Scheduler
|
||||
State -. no dependency .-> Builder
|
||||
State -. no dependency .-> Finalizer
|
||||
```
|
||||
|
||||
## Ownership, threading and resources
|
||||
@@ -163,7 +165,8 @@ flowchart TB
|
||||
- Worker threads may call only `publish_result`; result observe/pop/clear also lock.
|
||||
- Parsed water Dictionary identity is retained until main-thread pop.
|
||||
- Loader owns WorkerThreadPool task lifetime and must wait before orderly shutdown clear.
|
||||
- Loader owns tile states, ADTBuilder, water Nodes and every render resource.
|
||||
- Loader owns tile states and the tile subtree; `AdtWaterSceneFinalizer` performs
|
||||
the main-thread ADTBuilder call and attachment without retaining Nodes.
|
||||
- `clear` cannot cancel a worker; post-reset publication becomes a stale result
|
||||
and is discarded because no active task/tile ownership remains.
|
||||
|
||||
@@ -211,8 +214,8 @@ versions are unchanged; no migration or rebuild is required.
|
||||
## Extension points
|
||||
|
||||
- ADT parse execution can later move behind a parser/job adapter without changing state.
|
||||
- Water scene materialization can be extracted separately because it owns Nodes
|
||||
and main-thread effects rather than async bookkeeping.
|
||||
- Water scene materialization is now delegated to `AdtWaterSceneFinalizer`,
|
||||
independently of this async bookkeeping service.
|
||||
|
||||
## Capability status
|
||||
|
||||
@@ -220,7 +223,7 @@ versions are unchanged; no migration or rebuild is required.
|
||||
|---|---|---|---|
|
||||
| ADT water load pipeline state | Implemented extraction | FIFO/task/thread/source/timing verifier | Asset-backed traversal/leak evidence pending |
|
||||
| ADT liquid parsing | Existing/loader-owned adapter | Native ADTLoader and dry-run paths | MH2O/MCLQ fidelity fixtures pending |
|
||||
| Water scene finalization | Existing/loader-owned | Scheduler/material/shutdown regressions | Separate materialization extraction possible |
|
||||
| Water scene finalization | Implemented extraction | Dedicated synthetic scene/ownership verifier | Asset-backed traversal/hitch evidence pending |
|
||||
|
||||
## Known gaps and risks
|
||||
|
||||
@@ -235,13 +238,15 @@ versions are unchanged; no migration or rebuild is required.
|
||||
| Path | Responsibility |
|
||||
|---|---|
|
||||
| `src/render/liquid/adt_water_load_pipeline_state.gd` | Request/task/result bookkeeping and result mutex |
|
||||
| `src/scenes/streaming/streaming_world_loader.gd` | Parse task execution, permits, stale checks and Node finalization |
|
||||
| `src/render/liquid/adt_water_scene_finalizer.gd` | Main-thread ADTBuilder call, attach and optional editor ownership |
|
||||
| `src/scenes/streaming/streaming_world_loader.gd` | Parse task execution, permits, stale checks and tile loaded timing |
|
||||
| `addons/mpq_extractor/loaders/adt_builder.gd` | ADT liquid geometry/material construction |
|
||||
| `src/tools/verify_adt_water_load_pipeline_state.gd` | Lifecycle/thread/boundary/timing regression |
|
||||
|
||||
## Related decisions and references
|
||||
|
||||
- [`world-renderer.md`](world-renderer.md)
|
||||
- [`adt-water-scene-finalizer.md`](adt-water-scene-finalizer.md)
|
||||
- [`render-budget-scheduler.md`](render-budget-scheduler.md)
|
||||
- [`../../RENDER.md`](../../RENDER.md)
|
||||
- [`../../targets/roadmap/02-rendering-and-graphics.md`](../../targets/roadmap/02-rendering-and-graphics.md)
|
||||
|
||||
Reference in New Issue
Block a user