acdream/docs/research/2026-06-25-studio-dump-panel-sweep.md
Erik 2fe7b4a057 docs(studio): dump-panel render sweep — all 26 windows verified
Rendered all 26 dump windows through the studio's --screenshot mode + a
System.Drawing contact-sheet montage. The generic dump LayoutSource renders
every panel with no crash; fidelity tracks static-chrome (in the dump) vs
runtime content (slots/stats/appraise, not in the dump). Static-rich panels
(vitals/toolbar/character/map/radar/effects/chat…) render great; runtime-only
windows (examine) are correctly blank; inventory shows backdrop+frame but its
nested sub-window chrome is sparse (next investigation). screenshots gitignored.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 16:50:39 +02:00

3 KiB

UI Studio — dump-panel render sweep (2026-06-25)

All 26 windows in docs/research/2026-06-25-retail-ui-layout-dump.json were rendered through the studio's dump LayoutSource (AcDream.App ui-studio --dump <slug> --screenshot <png>) and read back as PNGs. Goal: verify the generic dump source renders every retail window, identify real render bugs vs. expected gaps.

Verdict

The generic dump source renders all 26 panels with no crash. Render fidelity tracks how much of a panel is static chrome (present in the dump, so it draws) vs runtime content (slots, stats, appraise text — NOT in the dump, so it can't draw). This is the dump's nature, not a studio bug.

Per-panel status (read from studio-shots/)

Status Panels
Full / great (frame + static content) vitals (3 bars + heart/glyphs), side_by_side_vitals, toolbar (all spell/combat icons + backpack), map, main_panel, radar (disc), character (frame+tabs+scrollbar), combat, powerbar, negative_effects, positive_effects, options, quests, social, spellbook, main_chat, floating_chat_1..4, environment_panel
Partial (chrome only; runtime content absent) inventory — stone backdrop + top frame render, but the nested sub-window chrome (gm3DItemsUI / gmBackpackUI / paperdoll) is sparse and the slots are runtime-filled. The one panel with a possible real gap — investigate the nested-layout / sub-window node handling.
Blank (runtime-only window, no static sprites in dump) examine (appraise window — populated only on examine), and likely the small indicators / smartbox / vitae

Tooling shipped this sweep

  • --screenshot <path> headless mode (f778b10): render the loaded panel (dump or dat) to a PNG off-screen via PanelFbo + glReadPixels + ImageSharp, then exit. Hidden window (IsVisible=false). The autonomous self-verification primitive.
  • Contact-sheet montage via PowerShell System.Drawing (one image, 26 thumbs) — the cheap per-sweep overview (studio-shots/_contact.png, gitignored).

Rect basis (confirmed in DumpLayout)

Dump rect fields are ABSOLUTE retail screen coords; DumpLayout converts to parent-relative (child.Left = child.Rect.X - parent.Rect.X) and places the root at (0,0). Verified correct by the toolbar (icons land precisely) + vitals.

Next (loop)

  1. Inventory nested chrome — determine whether the sub-window content is missing because (a) those nodes are Groups with no static sprite (expected), or (b) DumpLayout isn't expanding a base_layout_id sub-layout reference (a fixable bug). Dump the inventory panel's node widget_kind/rect/image_id list and compare to what rendered.
  2. Spot-confirm the remaining blanks (indicators/smartbox/vitae) are runtime-only.
  3. The dump source is functionally complete as a static previewer; richer (live-data) previews are the dat-import + fixture path (the parked Task 4 bags/equip), not the dump path.