docs: backlog — .prm decoded; the resting rule is the new blocker

This commit is contained in:
Sylpheed RE agent
2026-08-19 06:30:23 +00:00
parent 0ebbe9951b
commit 4e6ee57d64

View File

@@ -78,10 +78,25 @@ See [`structures/ui-composable-bundles.md`](structures/ui-composable-bundles.md)
**Opened by those two:**
* **`.prm` primitives are not decoded.** Every composite is missing them. On
the splash the measured order puts `palogo_eff0.prm` **first** — it is the
backdrop. Cheapest first step: dump the `.prm` child bytes of a bundle that has
exactly one and see whether it is a solid quad with a colour.
* **`.prm` primitives are decoded** (2026-08-19). Untextured full-screen
colour quads: 0 of 369 has a payload child, `kind & 0x10``.prm` with zero
exceptions in either direction, 361/369 are exactly 1280×720 at 100 % in the
corner, and the fill colour is the keyframe's `fade` ARGB — mostly black at
some alpha, i.e. the fade-to-black / dim / flash layers.
See [`structures/ui-prm-primitives.md`](structures/ui-prm-primitives.md).
**Still not composited**, for the reason below.
***`Element::rest()` picks the wrong pose for a fade group.** This is now the
blocker on drawing `.prm`. The title's `pteff00.prm` is opaque → transparent →
transparent → opaque, a screen transition; the screen sits at the transparent
plateau, but `rest()`'s longest-dwell rule lands on the opaque endpoint — and
that element paints **last**, so drawing it blacks out the title. Candidate
rule: the resting pose is the longest run of *consecutive keyframes with equal
values*, not the longest gap. It is **not** `.prm`-specific — it would change
`rest()` for every element on the disc — so the first step is to A/B it against
the title framebuffer capture and the two verified screens before it lands.
***Blend mode for the primitives.** Straight alpha is the assumption for the
black dim quads; the near-white flash (`0xf0ffffff`) and the coloured ones
(`0x60ff0000`, `0x0000ffd4`) may be additive. Nothing measured.
***What marks a focused state in the file.** The pairing rule that shipped is
a naming convention, not a decoded field. `kind = 0x3002` is a button record;
whether a bit of `kind` marks the focused variant is the cheapest probe.