adjustments over frame composer contract - agnostic tile size
This commit is contained in:
parent
98d2d81882
commit
94c80e61ba
@ -26,6 +26,7 @@ Introduce `FrameComposer` as a first-class hardware-side subsystem and move cano
|
|||||||
- optional cache;
|
- optional cache;
|
||||||
- optional resolver;
|
- optional resolver;
|
||||||
- owned `SpriteController`.
|
- owned `SpriteController`.
|
||||||
|
- Preserve scene-layer metadata naming aligned with the world path contract, including `parallax_factor` as the canonical per-layer camera multiplier field.
|
||||||
- Aggregate `FrameComposer` inside `Hardware`.
|
- Aggregate `FrameComposer` inside `Hardware`.
|
||||||
- Expose the minimum driver-facing surface required for subsequent plans.
|
- Expose the minimum driver-facing surface required for subsequent plans.
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@ Implement the `FrameComposer` scene-binding contract, minimal camera state, and
|
|||||||
|
|
||||||
`DEC-0014` locks scene activation around `bind_scene(scene_bank_id)` with `SceneBankPoolAccess`, pointer-based access only, and `scene_bank_id + Arc<SceneBank>` retained inside `FrameComposer`.
|
`DEC-0014` locks scene activation around `bind_scene(scene_bank_id)` with `SceneBankPoolAccess`, pointer-based access only, and `scene_bank_id + Arc<SceneBank>` retained inside `FrameComposer`.
|
||||||
The same decision also requires `FrameComposer` to remain tile-size agnostic and to preserve canonical per-layer `tile_size`, including `8x8`.
|
The same decision also requires `FrameComposer` to remain tile-size agnostic and to preserve canonical per-layer `tile_size`, including `8x8`.
|
||||||
|
For the scene-layer motion contract, this plan treats `parallax_factor` as the canonical field name for the per-layer camera multiplier.
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|
||||||
@ -92,6 +93,7 @@ Align cache/resolver lifetime with the active scene contract.
|
|||||||
- On unbind:
|
- On unbind:
|
||||||
- discard cache/resolver and invalidate the world path.
|
- discard cache/resolver and invalidate the world path.
|
||||||
- Any initialization must derive layer math from the bound scene tile sizes instead of assuming `16x16`.
|
- Any initialization must derive layer math from the bound scene tile sizes instead of assuming `16x16`.
|
||||||
|
- Any layer-camera math or related contract references must use `parallax_factor` terminology rather than generic `motion` naming.
|
||||||
|
|
||||||
**File(s):**
|
**File(s):**
|
||||||
- `crates/console/prometeu-drivers/src/frame_composer.rs`
|
- `crates/console/prometeu-drivers/src/frame_composer.rs`
|
||||||
@ -104,6 +106,7 @@ Align cache/resolver lifetime with the active scene contract.
|
|||||||
- scene status reflects no-scene and active-scene states.
|
- scene status reflects no-scene and active-scene states.
|
||||||
- camera coordinates are stored as top-left pixel-space values.
|
- camera coordinates are stored as top-left pixel-space values.
|
||||||
- bind/unbind remains valid for scenes whose layers use `8x8` tiles.
|
- bind/unbind remains valid for scenes whose layers use `8x8` tiles.
|
||||||
|
- scene binding and camera-facing contracts preserve `parallax_factor` as the canonical layer field name.
|
||||||
|
|
||||||
### Integration Tests
|
### Integration Tests
|
||||||
- `FrameComposer` can resolve a scene from the pool and survive no-scene operation.
|
- `FrameComposer` can resolve a scene from the pool and survive no-scene operation.
|
||||||
@ -119,6 +122,7 @@ Align cache/resolver lifetime with the active scene contract.
|
|||||||
- [ ] Camera contract is implemented as `i32` top-left viewport coordinates.
|
- [ ] Camera contract is implemented as `i32` top-left viewport coordinates.
|
||||||
- [ ] Cache/resolver lifetime follows scene bind/unbind.
|
- [ ] Cache/resolver lifetime follows scene bind/unbind.
|
||||||
- [ ] Scene bind/cache/resolver setup preserves canonical per-layer tile sizes, including `8x8`.
|
- [ ] Scene bind/cache/resolver setup preserves canonical per-layer tile sizes, including `8x8`.
|
||||||
|
- [ ] Scene-layer camera multiplier naming is aligned on `parallax_factor`.
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@ Connect `FrameComposer` to `SceneViewportResolver`, apply cache refreshes inside
|
|||||||
|
|
||||||
`DEC-0014` requires that cache refresh policy remain inside `FrameComposer` and that `FrameComposer.render_frame()` become the canonical frame entry while `Gfx` remains only the low-level execution backend.
|
`DEC-0014` requires that cache refresh policy remain inside `FrameComposer` and that `FrameComposer.render_frame()` become the canonical frame entry while `Gfx` remains only the low-level execution backend.
|
||||||
`DEC-0014` also requires the world path to remain tile-size agnostic, with explicit support for `8x8`, `16x16`, and `32x32` scene-layer tile sizes.
|
`DEC-0014` also requires the world path to remain tile-size agnostic, with explicit support for `8x8`, `16x16`, and `32x32` scene-layer tile sizes.
|
||||||
|
For per-layer camera scaling, this plan treats `parallax_factor` as the canonical scene-layer field name.
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|
||||||
@ -43,6 +44,7 @@ Move cache-refresh orchestration fully into `FrameComposer`.
|
|||||||
- apply them to `SceneViewportCache`
|
- apply them to `SceneViewportCache`
|
||||||
- Keep `Gfx` unaware of refresh semantics.
|
- Keep `Gfx` unaware of refresh semantics.
|
||||||
- Ensure resolver and refresh math follow the bound layer `tile_size` values rather than any fixed `16x16` default.
|
- Ensure resolver and refresh math follow the bound layer `tile_size` values rather than any fixed `16x16` default.
|
||||||
|
- Ensure per-layer camera math is expressed through `parallax_factor` naming in the resolver/cache path.
|
||||||
|
|
||||||
**File(s):**
|
**File(s):**
|
||||||
- `crates/console/prometeu-drivers/src/frame_composer.rs`
|
- `crates/console/prometeu-drivers/src/frame_composer.rs`
|
||||||
@ -103,6 +105,7 @@ Protect the two canonical frame modes.
|
|||||||
- `render_frame()` with a scene applies resolver refreshes before composition.
|
- `render_frame()` with a scene applies resolver refreshes before composition.
|
||||||
- cache refresh requests are applied by `FrameComposer`, not `Gfx`.
|
- cache refresh requests are applied by `FrameComposer`, not `Gfx`.
|
||||||
- `render_frame()` with an `8x8` scene uses resolver/cache math derived from layer tile size rather than a `16x16` assumption.
|
- `render_frame()` with an `8x8` scene uses resolver/cache math derived from layer tile size rather than a `16x16` assumption.
|
||||||
|
- Resolver/cache-facing tests use `parallax_factor` terminology for per-layer camera scaling.
|
||||||
|
|
||||||
### Integration Tests
|
### Integration Tests
|
||||||
- scene bind + camera set + sprite emission + `render_frame()` produces the expected composed frame.
|
- scene bind + camera set + sprite emission + `render_frame()` produces the expected composed frame.
|
||||||
@ -119,6 +122,7 @@ Protect the two canonical frame modes.
|
|||||||
- [ ] No-scene `sprites + fades` behavior remains valid.
|
- [ ] No-scene `sprites + fades` behavior remains valid.
|
||||||
- [ ] `Gfx` remains backend-only for this path.
|
- [ ] `Gfx` remains backend-only for this path.
|
||||||
- [ ] The world path is explicitly covered for `8x8` scenes without `16x16`-specific assumptions.
|
- [ ] The world path is explicitly covered for `8x8` scenes without `16x16`-specific assumptions.
|
||||||
|
- [ ] Resolver/cache/frame-path terminology is aligned on `parallax_factor` for scene-layer camera scaling.
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user