CNA-VGAP-057: EasyGL Task 933 (a full-backbuffer SpriteBatch draw breaking that frame's 3D rendering) rests on one recorded sample run: no test reproduces the reported scene, and the migration guide still lists it as open

CNA snapshot 3b43bd86  ·  Known Issues › Verification gaps  ·  source links pinned to 3b43bd86

✓

Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 3b43bd86; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.

CNA's graphics plan closed Task 933 on its 2026-08-23 run of the original sample (SAMPLE-005) after two synthetic investigations never reproduced the symptom; the plan is deleted, no checked-in test covers that scene, and docs/migration-guide.md and a test comment still call the finding open.

Identifier
CNA-VGAP-057
Category
Verification gap
Subsystem
Testing & evidence
Status
Narrowed (partially fixed; describes only what survives)
Verified against
CNA 3b43bd86 (3b43bd8687ed46523d873f9bec4b32bd8481dcb5)
Evidence basis
Source-verified: read at TARGET, not executed
Tests touching this area
Yes: see Current tests
Affected contract
docs/migration-guide.md's open EasyGL caveat (Task 933): a full-backbuffer SpriteBatch draw before the first 3D draw of a frame

Expected behaviour

A defect that CNA's own migration guide lists as a currently open caveat is either reproduced by a test that fails, or closed with evidence that covers the reported conditions, and the documentation and the test work-around follow that outcome.

Actual behaviour at TARGET

migration-guide.md still lists 'EasyGL: a full-backbuffer SpriteBatch draw before any 3D draw in the same frame breaks that frame's 3D rendering (Task 933) - investigated, root cause not yet isolated' among its open caveats, and easygl_spritebatch_blendstate_leak_test.cpp still avoids the case by drawing a corner sprite (“the separate, unrelated, still-open Task 933 finding”). The plan that tracked the task, plans/plan_graphics.md, was deleted by f279a845e with every row done, withdrawn or superseded (plans/README.md). Its row 933, last present at c6dec91f, recorded two synthetic investigations that never reproduced the symptom (four isolated variants on 2026-07-10; on 2026-07-16 a 480x800 window, a three-frame Game::Run loop with Present, file-decoded textures, the original camera and EnvironmentMapEffect) and a resolution on 2026-08-23 (SAMPLE-005): the re-ported ReachGraphicsDemo EnvmapDemo, with its full-backbuffer SpriteBatch background restored and no workaround, rendered correctly on OPENGLES3 and on WEBGL2 in Chrome. The same record says that this does not show which change removed the 2026-07 symptom. The fixture left in the tree, fullscreen_spritebatch_then_3d_test.cpp (EasyGL_FullscreenSpriteThen3D, and FullscreenSpriteThen3D on SDL_GPU), draws one frame per leg with an opaque BasicEffect quad and no render target, so no test reproduces the reported scene.

Source locations

Evidence

Read at 3b43bd86; nothing executed. The pass results are CNA's own recorded runs, not reproduced here. The viewport-reset suspect that row 933 recorded is not present as described: EasyGLSpriteBatchRenderer::FlushBatch now keeps a custom viewport and re-asserts the presentation rectangle or bound target's viewport (REMED-GFX-072).

Narrowed at 3b43bd86: f279a845e deleted the plan. Its row 933 as last present (read with git show c6dec91f:plans/plan_graphics.md) was already marked done, with the 2026-07-16 investigation and the SAMPLE-005 resolution after the four variants; this entry's earlier text named only the first investigation and its three untested conditions, which the second one tried (file-decoded textures, Present-separated frames) or found inapplicable to the reported scene (a bound render target). The migration guide changed only in a plan reference. The SAMPLE-005 run is CNA's record; nothing was executed here.

Focused reproduction

No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.

Current tests

The renderer-neutral fixture fullscreen_spritebatch_then_3d_test.cpp (EasyGL_FullscreenSpriteThen3D and the SDL_GPU cross-family program FullscreenSpriteThen3D) passes with one frame per leg, an opaque BasicEffect quad and no render target. The 2026-07-16 investigation program that combined the reported conditions was deleted after its run, and the sample run of 2026-08-23 is not a test in this tree.

Regression test

A checked-in test that replays the reported scene (a 480x800 back buffer, a full-backbuffer sprite and a small title sprite before an EnvironmentMapEffect draw, file-decoded textures, several Present-separated frames); with it passing, the migration guide's caveat and the test work-around can be closed with evidence.

Blast radius

Readers of the migration guide, who are told to avoid a case CNA's own record shows working, and EasyGL games in the reported conditions, for which no test guards against the symptom returning.

Workaround

The migration guide's own advice; the EasyGL blend-state test avoids the case by drawing a corner sprite.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.