feat(scoreboard): it ticks — the marquee is the design, not an option

Creator, plainly: "the entire point of a ticker is to tick… so, tick." The static strip was my
reading of an earlier exchange; it is gone.

How it ticks without becoming the compositor's most expensive layer:
- `ScoreboardRenderer.RenderRun` rasterises the run ONCE per value change at its natural width plus
  a gap.
- `ScoreboardPresenter` crops a 1920-wide window at a moving offset each tick — a row-wise byte
  copy, no text layout, no re-raster.
- `TickScoreboard` runs on the existing 30 Hz meter clock and only while the strip is shown, so a
  hidden or disabled scoreboard costs nothing.

The dev simulation uses the same path, so what is previewed is what ships.

Test updated to the real contract: no tick → identical pixels; a tick → different pixels; a value
change → re-rasterised run. (The old test asserted frame-instance identity, which a cropped window
can never satisfy.)
This commit is contained in:
2026-10-30 15:17:55 -07:00
parent 882b8551d9
commit 460b36204d
5 changed files with 141 additions and 14 deletions
+1
View File
@@ -31,6 +31,7 @@ public partial class MainViewModel
RaiseMasterReadouts();
UpdateDuckState();
CheckTraxSilence();
TickScoreboard();
}
/// <summary>One honest diagnostic: "playing" with a flat player meter means the samples never