render: extract native M2 animation resource observer
This commit is contained in:
@@ -28,7 +28,7 @@ static Mesh and terminal missing-model state. The snapshot never owns engine lif
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
Native[StreamingWorldLoader native observation] --> Snapshot[M2BuildResourceSnapshot]
|
||||
Native[M2NativeAnimationResourceObserver] --> Snapshot[M2BuildResourceSnapshot]
|
||||
Cached[M2CachedAnimationResourceObserver] --> Snapshot
|
||||
Static[M2StaticBuildResourceObserver] --> Snapshot
|
||||
Snapshot --> Dispatch[M2BuildDispatchPlanner]
|
||||
@@ -112,7 +112,7 @@ sequenceDiagram
|
||||
participant B as M2BuildBatchPlanner
|
||||
participant D as M2BuildDispatchPlanner
|
||||
participant M as M2 materializer
|
||||
L->>L: resolve native animated prototype
|
||||
L->>L: delegate native animated prototype observation
|
||||
L->>S: construct native result
|
||||
opt no native prototype
|
||||
L->>L: delegate cached animation observer
|
||||
@@ -149,8 +149,8 @@ flowchart TB
|
||||
## Ownership, threading and resources
|
||||
|
||||
- Snapshot owns only copied scalar state and temporary references.
|
||||
- Prototype/cache services retain resource state; loader owns native-first
|
||||
observation order while cached/static observers own their phases.
|
||||
- Prototype/cache services retain resource state; the native observer owns its
|
||||
phase while loader owns native-first ordering among resource observers.
|
||||
- Scene roots remain loader/tile-owned; Mesh lifetime follows cache/resource refs.
|
||||
- Dispatch planner reads only snapshot accessors and never mutates the snapshot.
|
||||
- Current construction/adoption occurs on renderer main thread.
|
||||
@@ -195,8 +195,8 @@ queue/hitch metrics remain unchanged.
|
||||
## Extension points
|
||||
|
||||
`M2CachedAnimationResourceObserver` produces the cached animated phase and
|
||||
`M2StaticBuildResourceObserver` produces the static phase. Native animation
|
||||
observation remains loader-owned. The value contract stays independent of all
|
||||
`M2StaticBuildResourceObserver` produces the static phase. Native animation is
|
||||
produced by `M2NativeAnimationResourceObserver`. The value stays independent of all
|
||||
producers and of generic callback frameworks.
|
||||
|
||||
## Capability status
|
||||
@@ -207,14 +207,14 @@ producers and of generic callback frameworks.
|
||||
| Dispatch decision | Implemented separately | Dispatch planner verifier | Asset-backed traversal pending |
|
||||
| Static lookup/request execution | Implemented separately | Static observer verifier | Asset-backed traversal pending |
|
||||
| Cached animated lookup/request execution | Implemented separately | Cached observer verifier | Asset-backed traversal pending |
|
||||
| Native animated lookup/build execution | Loader-owned | Native renderer regression | Service extraction pending |
|
||||
| Native animated lookup/build execution | Implemented observer extraction | Native observer lifecycle/source verifier | Asset-backed traversal pending |
|
||||
| Engine lifetime/materialization | Loader/materializer-owned | Lifetime/materializer regressions | GPU/p95/p99 evidence pending |
|
||||
|
||||
## Known gaps and risks
|
||||
|
||||
- Static observation is mutable during its short two-phase construction.
|
||||
- Raw Node3D/Mesh references remain necessary for current materializer APIs.
|
||||
- Loader still owns synchronous native prototype attempts and terminal polling.
|
||||
- Native parsing/build remains synchronous; loader still owns terminal polling.
|
||||
- Synthetic timing does not measure resource, Node or GPU work.
|
||||
|
||||
## Source map
|
||||
@@ -225,7 +225,8 @@ producers and of generic callback frameworks.
|
||||
| `src/render/m2/m2_build_dispatch_planner.gd` | Snapshot-to-action planning |
|
||||
| `src/render/m2/m2_static_build_resource_observer.gd` | Static snapshot production and requests |
|
||||
| `src/render/m2/m2_cached_animation_resource_observer.gd` | Cached animated snapshot production and requests |
|
||||
| `src/scenes/streaming/streaming_world_loader.gd` | Native animation observation and materializer borrowing |
|
||||
| `src/render/m2/m2_native_animation_resource_observer.gd` | Native prototype observation producer |
|
||||
| `src/scenes/streaming/streaming_world_loader.gd` | Observer ordering and materializer borrowing |
|
||||
| `src/tools/verify_m2_build_resource_snapshot.gd` | Identity/adoption/lifetime/boundary/timing regression |
|
||||
|
||||
## Related decisions and references
|
||||
|
||||
Reference in New Issue
Block a user