CNA-VGAP-057: EasyGL: a full-backbuffer SpriteBatch draw before a frame's first 3D draw is listed as open (Task 933) but has never been reproduced, and the reported scene is untested
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 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
docs/migration-guide.md still lists Task 933 as a currently open EasyGL caveat. Four isolated repros and a dedicated fixture pass, so the original scene (bound target, file texture, real frame loop) is untested and the report is neither confirmed nor closed.
- Identifier
CNA-VGAP-057- Category
- Verification gap
- Subsystem
- Testing & evidence
- Status
- Open
- Verified against
- CNA
009d40f5(009d40f5dd085c4e674d3479675fac84b12b3e0a) - 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 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 real, currently open caveats, and easygl_spritebatch_blendstate_leak_test.cpp still avoids the case by drawing a corner sprite. plan_graphics.md row 933 records four isolated variants that all pass and names three untested conditions: a RenderTarget2D bound earlier in the frame, a texture decoded from a real file (the original scene's backbuffer is 480x800, not a power of two), and real Present-separated frames. The renderer-neutral fixture fullscreen_spritebatch_then_3d_test.cpp, registered as EasyGL_FullscreenSpriteThen3D and Vulkan_FullscreenSpriteThen3D, uses one frame per leg, an opaque BasicEffect quad and no render target; plan_vulkan.md VULKAN-400 records it passing on both renderers and states it does not establish that the finding is fixed. Nothing at the snapshot confirms or refutes the report for its original conditions.
Source locations
docs/migration-guide.md— the open-caveat bullet for Task 933plans/plan_graphics.md— row 933: four passing variants and three untested conditionsplans/plan_vulkan.md— VULKAN-400: fixture result, and what it does not establishmodules/graphics/examples/fullscreen_spritebatch_then_3d_test.cpp— the one-frame, BasicEffect, no-render-target fixturemodules/renderers/easygl/examples/easygl_spritebatch_blendstate_leak_test.cpp— corner-sprite work-around commentmodules/renderers/easygl/examples/CMakeLists.txt— EasyGL_FullscreenSpriteThen3D registration
Evidence
Read at 009d40f5; 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).
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 (registered as EasyGL_FullscreenSpriteThen3D and Vulkan_FullscreenSpriteThen3D) passes with one frame per leg, an opaque BasicEffect quad and no render target; CNA's own record states that it does not establish that the finding is fixed. The three conditions the plan names as untested remain untested.
Regression test
A test that reproduces the reported scene (a RenderTarget2D bound earlier in the frame, a texture decoded from a real file with a non-power-of-two backbuffer, real Present-separated frames): if it fails it is the defect's regression test; if it passes, the guide's caveat and the test work-around can be closed with evidence.
Blast radius
EasyGL renderers under the reported conditions only; nothing at the snapshot says whether the report still reproduces.
Workaround
The migration guide's own advice; the EasyGL blend-state test avoids the case by drawing a corner sprite.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- User guide
- Verification: renderers
- Internals
- EasyGL renderer internals
- Known issues
- Verification gap index