CNA-GAP-018: EasyGL does not register Texture3D with its context-loss recovery, so volume texture contents are lost after a real WebGL/GLES context loss
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.
EasyGLTexture3DRenderer is not a RecoverableResource, unlike EasyGL's 2D textures, cube textures, render targets, buffers and queries.
- Identifier
CNA-GAP-018- Category
- Functional gap
- Subsystem
- Graphics & renderers
- 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
- Texture3D on EasyGL profiles with context loss (WebGL2, GLES)
Expected behaviour
EasyGL restores GPU resources after a context loss through ::easygl::RecoverableResource; every resource type that holds data should take part.
Actual behaviour at TARGET
In EasyGLRenderer.hpp, EasyGLTextureRenderer, EasyGLTextureCubeRenderer, EasyGLRenderTargetRenderer, the buffers, queries and the sprite renderer derive from RecoverableResource; EasyGLTexture3DRenderer derives only from ITexture3DRenderer, so after a lost/restored context its GL name refers to nothing and its contents are gone.
Source locations
modules/renderers/easygl/include/CNA/Internal/Renderers/EasyGL/EasyGLRenderer.hpp— EasyGLTexture3DRenderer class declaration (no RecoverableResource base)modules/renderers/easygl/src/EasyGLRenderer.cpp— EasyGLRenderer::CreateTexture3D
Evidence
Checked by reading the named sources at 009d40f5; nothing was built or executed for this entry. What sampling a lost volume texture shows after restoration was not observed.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
EasyGL context-loss tests exercise 2D and cube textures; none covers Texture3D.
Regression test
Add Texture3D to the simulated context-loss fixture and assert its contents after restoration.
Blast radius
Browser and mobile games that use volume textures and survive a context loss.
Workaround
Recreate Texture3D contents in a DeviceReset handler.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- Deep dives
- EasyGL semantics: recovery
- Known issues
- Functional gap index