Files
LlamaCasty/TASKS/task-16-kill-infinity-display.md
T
gramps 87509bcf99 docs: restructure TASKS.md into a catalog — one file per task in TASKS/
TASKS.md is now the index (status table, open items, research pointer).
33 files: 32 task files + 1 research facts file. The full take-saga
narrative and all design decisions are preserved verbatim; the catalog
makes the queue readable without opening every task body. Schema and
AGENTS.md updated to reflect the new layout.
2026-09-05 16:31:46 -07:00

1.5 KiB

TASK 16 — Kill infinity display (no-game backdrop fallback)

Catalog: TASKS.md — status and requirements live here.

Goal: when no full-screen game is detected, show a static branded placeholder instead of capturing the primary display (which causes the infinity mirror effect).

Status: ✅ Shipped

Changes:

  1. ResolveAutoCaptureKey() returns null when no full-screen game is detected (was: primary monitor)
  2. ReacquireScreenCaptures() — clears stale CaptureKey when auto == null (handles DB upgrades); skips AcquireAsync when no keys are set
  3. SeedLiveBackdropAsset() — sets AssetId on the backdrop element itself (NOT a Background source); called from ReacquireScreenCaptures() after EnsureBackdrop() guarantees the element exists
  4. Source.DisplaySource falls back to _imageSource when VideoImageSource is null for live captures
  5. Assets/live-backdrop.jpg — user-provided image, added as <Resource> in csproj
  6. ResolveOutputFrame() in compositor — Source { IsLiveCapture: true, CaptureKey: not null } already skips null keys; fallback pattern Source { AssetId: not null } picks up the static image

Rendering flow:

Scenario Preview Compositor
Game detected Live capture (opaque, covers static asset on backdrop) ScreenCaptureManager.GetLatestFrame
No game Static image via DisplaySource → _imageSource on backdrop StaticPixelCache.Get(assetId)
Manual capture pick Live capture Live frame