re: the TITLE's blend states, the menu replicated twice, and the sweeps are on screen

Two more emulator runs close two of the three reach limits on the blend page.

THE TITLE (entries 4 + 2 composited). Everything alpha-over except the two
rotated sweep strips and -- the finding -- ptbtn00f, the PRESS (A) plate's
focused variant, which is ADDITIVE while its own base ptbtn00 is not. That is
what the documented plate pulse is made of, and a port drawing both alpha-over
cannot reach the pulse's peak by any pacing.

And ptlogo_back2 / ptlogo_back2eff are ALPHA-OVER. They are frame-shaped, large,
dark and 94 %/87 % transparent -- every surface property the menu's ptframe* have
-- so 'frame-shaped and mostly transparent implies additive' is refuted on the
one screen that could test it.

THE MENU replicates draw for draw in two further sessions; the one-session
caveat is retired.

THE VERTEX CAP was 8 = two quads, so a batched draw reported its first two
elements and dropped the rest. Raised to 64. This is why ptframe4, pteff21,
pteff22 and pteff23 looked like elements the game never draws: EXTRAS' 24-index
additive draw holds six quads and the log printed two.

THE SWEEPS are on screen on the main menu in every captured frame, stepping
~0.03 NDC per frame in opposite directions with their vertex alpha ramping, at
different phases in two sessions. The leaf group runs on the menu. What that
does not say is how much they contribute.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
This commit is contained in:
sylph-decoder
2026-08-31 06:42:05 +00:00
parent 1ce4eca706
commit 529cf13f2a
6 changed files with 472 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
# Are the rotated sweep strips ON SCREEN on the MAIN MENU, or parked? 2026-08-31.
#
# tools/re-capture/sweep_positions.py <draw log>
#
# The question is sylpheed-port's, and it is a good one: the blend map reports a
# quad's SIZE, which names an element and says nothing about visibility. A quad
# parked off screen is still a draw call, and their authored/rendering.json
# scopes the leaf loop to the TITLE only, on the evidence that a menu render with
# the sweeps visible matches the capture worse.
#
# NDC x and y are in [-1,+1] across the surface, so a quad overlaps the screen
# iff its x range crosses that box and its y range does too.
#
# ANSWER: on the main menu both strips are ON SCREEN in every captured frame, and
# they MOVE between frames -- x steps by about 0.03 NDC (~19 px) per frame in
# OPPOSITE directions, and the per-vertex alpha ramps with it (EF->F0->F2 and
# 9A->9C->9D). Two independent sessions, at different phases, so they free-run.
# The leaf group runs on the menu; it is not parked there.
#
# ⚠️ What this does NOT say: that the strips CONTRIBUTE much. They are additive
# with vertex alpha 0.60-0.95 over a texture that is overwhelmingly low-alpha.
# "Submitted, on screen and moving" is what is measured here. How much light they
# add is not.
=== main menu, session 1 ===
=== /sylph-home/re/blendcap/xenia_re_ui_draws_01.log ===
frame draw quad NDC x range NDC y range col on screen?
0 2 0 0.69 .. 2.08 -1.57 .. 1.58 EFFFFFFF ON SCREEN
0 2 1 -0.61 .. 1.42 -1.81 .. 1.81 9AFFFFFF ON SCREEN
0 5 0 -0.64 .. 0.64 -1.00 .. 1.00 C0FFFFFF ON SCREEN
0 6 0 -0.54 .. 0.54 -1.00 .. 1.00 FFFFFFFF ON SCREEN
0 7 0 -0.31 .. 0.07 -0.08 .. 0.70 FFFFFFFF ON SCREEN
0 7 1 -0.09 .. 0.31 -0.60 .. 0.26 FFFFFFFF ON SCREEN
4 14 0 0.72 .. 2.11 -1.57 .. 1.58 F0FFFFFF ON SCREEN
4 14 1 -0.64 .. 1.39 -1.81 .. 1.81 9CFFFFFF ON SCREEN
4 17 0 -0.64 .. 0.64 -1.00 .. 1.00 C0FFFFFF ON SCREEN
4 18 0 -0.54 .. 0.54 -1.00 .. 1.00 FFFFFFFF ON SCREEN
4 19 0 -0.31 .. 0.07 -0.08 .. 0.70 FFFFFFFF ON SCREEN
4 19 1 -0.09 .. 0.31 -0.60 .. 0.26 FFFFFFFF ON SCREEN
5 26 0 0.76 .. 2.15 -1.57 .. 1.58 F2FFFFFF ON SCREEN
5 26 1 -0.68 .. 1.35 -1.81 .. 1.81 9DFFFFFF ON SCREEN
5 29 0 -0.64 .. 0.64 -1.00 .. 1.00 C0FFFFFF ON SCREEN
5 30 0 -0.54 .. 0.54 -1.00 .. 1.00 FFFFFFFF ON SCREEN
5 31 0 -0.31 .. 0.07 -0.08 .. 0.70 FFFFFFFF ON SCREEN
5 31 1 -0.09 .. 0.31 -0.60 .. 0.26 FFFFFFFF ON SCREEN
=== main menu, session 2 (a different boot, hours later) ===
=== /sylph-home/re/titleblend/xenia_re_ui_draws_02.log ===
frame draw quad NDC x range NDC y range col on screen?
0 2 0 0.24 .. 1.62 -1.57 .. 1.58 D7FFFFFF ON SCREEN
0 2 1 -1.67 .. 0.36 -1.81 .. 1.81 C7FFFFFF ON SCREEN
0 5 0 -0.64 .. 0.64 -1.00 .. 1.00 C0FFFFFF ON SCREEN
0 6 0 -0.54 .. 0.54 -1.00 .. 1.00 FFFFFFFF ON SCREEN
0 7 0 -0.31 .. 0.07 -0.08 .. 0.70 FFFFFFFF ON SCREEN
0 7 1 -0.09 .. 0.31 -0.60 .. 0.26 FFFFFFFF ON SCREEN
4 14 0 0.27 .. 1.65 -1.57 .. 1.58 D9FFFFFF ON SCREEN
4 14 1 -1.71 .. 0.32 -1.81 .. 1.81 C8FFFFFF ON SCREEN
4 17 0 -0.64 .. 0.64 -1.00 .. 1.00 C0FFFFFF ON SCREEN
4 18 0 -0.54 .. 0.54 -1.00 .. 1.00 FFFFFFFF ON SCREEN
4 19 0 -0.31 .. 0.07 -0.08 .. 0.70 FFFFFFFF ON SCREEN
4 19 1 -0.09 .. 0.31 -0.60 .. 0.26 FFFFFFFF ON SCREEN
5 26 0 0.30 .. 1.68 -1.57 .. 1.58 DAFFFFFF ON SCREEN
5 26 1 -1.73 .. 0.30 -1.81 .. 1.81 C9FFFFFF ON SCREEN
5 29 0 -0.64 .. 0.64 -1.00 .. 1.00 C0FFFFFF ON SCREEN
5 30 0 -0.54 .. 0.54 -1.00 .. 1.00 FFFFFFFF ON SCREEN
5 31 0 -0.31 .. 0.07 -0.08 .. 0.70 FFFFFFFF ON SCREEN
5 31 1 -0.09 .. 0.31 -0.60 .. 0.26 FFFFFFFF ON SCREEN

View File

@@ -0,0 +1,90 @@
# The TITLE's blend states, and the main menu replicated in two more sessions.
# 2026-08-31, second and third emulator runs. Extends
# docs/re/structures/ui-blend-mode-measured.md, whose reach was two screens and
# ONE session and explicitly not the title.
#
# The live title is TWO builds composited -- entry 4 draws the art, entry 2 the
# PRESS (A) plate -- so the size table is built from both.
#
# CONTROL: the two rotated sweep strips, measured independently at 1134 and 1303
# px in data/title-sweep-drawn-at-rest.txt, are reproduced on every screen below.
=== TITLE (GP_TITLE entries 4 + 2), 33 draws over 4 frames ===
draw prim idx blend state quad px (w x h) best name match
1 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase2.t32 @2x
2 13 8 0x01010101 ADDITIVE 883.2 x 1134.0 (no match, nearest ptlogo_back2eff3.t32 @2x off 795)
2 13 8 0x01010101 ADDITIVE 1299.2 x 1303.2 (no match, nearest ptbase2.t32 @2x off 602)
3 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase2.t32 @2x
4 13 8 0x07010701 alpha-over(premul) 1132.8 x 280.8 ptlogo_back2eff.t32 @1x
4 13 8 0x07010701 alpha-over(premul) 1120.0 x 262.8 ptlogo_back2.t32 @1x
5 13 8 0x07010701 alpha-over(premul) 915.2 x 115.2 ptlogo1.t32 @1x
5 13 8 0x07010701 alpha-over(premul) 38.4 x 18.0 ptlogo_tm.t32 @1x
6 13 4 0x07010701 alpha-over(premul) 992.0 x 104.4 ptlogo2.t32 @1x
7 13 8 0x07010701 alpha-over(premul) 691.2 x 18.0 ptcopyright.t32 @1x
7 13 8 0x07010701 alpha-over(premul) 512.0 x 50.4 ptbtn00.t32 @1x
8 13 4 0x01010101 ADDITIVE 537.6 x 75.6 ptbtn00f.t32 @1x
12 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase2.t32 @2x
13 13 8 0x01010101 ADDITIVE 889.6 x 1134.0 (no match, nearest ptlogo_back2eff3.t32 @2x off 802)
13 13 8 0x01010101 ADDITIVE 1299.2 x 1303.2 (no match, nearest ptbase2.t32 @2x off 602)
14 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase2.t32 @2x
15 13 8 0x07010701 alpha-over(premul) 1132.8 x 280.8 ptlogo_back2eff.t32 @1x
15 13 8 0x07010701 alpha-over(premul) 1120.0 x 262.8 ptlogo_back2.t32 @1x
16 13 8 0x07010701 alpha-over(premul) 915.2 x 115.2 ptlogo1.t32 @1x
16 13 8 0x07010701 alpha-over(premul) 38.4 x 18.0 ptlogo_tm.t32 @1x
17 13 4 0x07010701 alpha-over(premul) 992.0 x 104.4 ptlogo2.t32 @1x
18 13 8 0x07010701 alpha-over(premul) 691.2 x 18.0 ptcopyright.t32 @1x
18 13 8 0x07010701 alpha-over(premul) 512.0 x 50.4 ptbtn00.t32 @1x
19 13 4 0x01010101 ADDITIVE 537.6 x 75.6 ptbtn00f.t32 @1x
23 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase2.t32 @2x
24 13 8 0x01010101 ADDITIVE 883.2 x 1134.0 (no match, nearest ptlogo_back2eff3.t32 @2x off 795)
24 13 8 0x01010101 ADDITIVE 1299.2 x 1303.2 (no match, nearest ptbase2.t32 @2x off 602)
25 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase2.t32 @2x
26 13 8 0x07010701 alpha-over(premul) 1132.8 x 280.8 ptlogo_back2eff.t32 @1x
26 13 8 0x07010701 alpha-over(premul) 1120.0 x 262.8 ptlogo_back2.t32 @1x
27 13 8 0x07010701 alpha-over(premul) 915.2 x 115.2 ptlogo1.t32 @1x
27 13 8 0x07010701 alpha-over(premul) 38.4 x 18.0 ptlogo_tm.t32 @1x
28 13 4 0x07010701 alpha-over(premul) 992.0 x 104.4 ptlogo2.t32 @1x
29 13 8 0x07010701 alpha-over(premul) 691.2 x 18.0 ptcopyright.t32 @1x
29 13 8 0x07010701 alpha-over(premul) 512.0 x 50.4 ptbtn00.t32 @1x
30 13 4 0x01010101 ADDITIVE 537.6 x 75.6 ptbtn00f.t32 @1x
CONTROL — the two rotated sweep strips measured independently at 1134 and 1303 px:
tall quads found: ['1134', '1303']
PASS
=== MAIN MENU, run 2 (a different session from ui-blend-mode-measured.txt) ===
draw prim idx blend state quad px (w x h) best name match
1 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase.t32 @2x
2 13 8 0x01010101 ADDITIVE 883.2 x 1134.0 (no match, nearest pteff12.t32 @2x off 603)
2 13 8 0x01010101 ADDITIVE 1299.2 x 1303.2 (no match, nearest ptbase.t32 @2x off 602)
3 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase.t32 @2x
4 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase.t32 @2x
5 13 4 0x01010101 ADDITIVE 819.2 x 720.0 (no match, nearest pteff12.t32 @2x off 125)
6 13 4 0x01010101 ADDITIVE 691.2 x 720.0 pteff12.t32 @2x
7 13 8 0x01010101 ADDITIVE 243.2 x 280.8 ptframe1.t32 @1x
7 13 8 0x01010101 ADDITIVE 256.0 x 309.6 ptframe2.t32 @1x
8 13 4 0x07010701 alpha-over(premul) 224.0 x 39.6 ptmsg.t32 @1x
9 13 24 0x07010701 alpha-over(premul) 44.8 x 46.8 ptbtneff01.t32 @1x
9 13 24 0x07010701 alpha-over(premul) 211.2 x 54.0 ptbtn01f.t32 @1x
13 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase.t32 @2x
=== MAIN MENU, run 3 -- with the vertex dump cap raised from 8 to 64, so the
=== 24-index button batch shows all SIX of its quads instead of the first two
draw prim idx blend state quad px (w x h) best name match
1 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase.t32 @2x
2 13 8 0x01010101 ADDITIVE 889.6 x 1134.0 (no match, nearest pteff12.t32 @2x off 610)
2 13 8 0x01010101 ADDITIVE 1299.2 x 1303.2 (no match, nearest ptbase.t32 @2x off 602)
3 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase.t32 @2x
4 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase.t32 @2x
5 13 4 0x01010101 ADDITIVE 819.2 x 720.0 (no match, nearest pteff12.t32 @2x off 125)
6 13 4 0x01010101 ADDITIVE 691.2 x 720.0 pteff12.t32 @2x
7 13 8 0x01010101 ADDITIVE 243.2 x 280.8 ptframe1.t32 @1x
7 13 8 0x01010101 ADDITIVE 256.0 x 309.6 ptframe2.t32 @1x
8 13 4 0x07010701 alpha-over(premul) 224.0 x 39.6 ptmsg.t32 @1x
9 13 24 0x07010701 alpha-over(premul) 64.0 x 61.2 (no match, nearest ptbtneff01.t32 @1x off 37)
9 13 24 0x07010701 alpha-over(premul) 211.2 x 54.0 ptbtn01f.t32 @1x
9 13 24 0x07010701 alpha-over(premul) 217.6 x 43.2 ptbtn02.t32 @1x
9 13 24 0x07010701 alpha-over(premul) 172.8 x 43.2 ptbtn03.t32 @1x
9 13 24 0x07010701 alpha-over(premul) 153.6 x 43.2 ptbtn05.t32 @1x
9 13 24 0x07010701 alpha-over(premul) 147.2 x 43.2 ptbtn05.t32 @1x
13 13 4 0x07010701 alpha-over(premul) 1280.0 x 720.0 ptbase.t32 @2x