State caching do not account for implicitly unbound Buffer object
okuoku opened this issue · comments
at: f5dda93
Found by: wined3d (GLSL backend) + google/angle@4a4ae72 (Vulkan backend) on Win32
When the client called glDeleteBuffers
, target buffer might be implicitly unbound from any attach points. But since gl4es state cache do not handle such implicit unbinding of buffers, client can cause random crash. For example:
- Client generate buffer name with
glGenBuffers
(=> buffer name X) - Client attach X to array buffer
- gl4es caches X inside its state cache
- Client delete buffer X with
glDeleteBuffers
- Client generate buffer and server assigned same name X for the new object
- Client attach (newly created) buffer X
- gl4es ignores request since they thinks we have already attached buffer X
- Client try to draw something and server will crash since buffer is not bound to the binding point
Avoiding any use of caching okuoku@71ebbd6 fixes issue when ANGLE used as GLES backend of gl4es -- it seems (unfortunately) ANGLE quickly re-use object names.
Just for completeness sake, @okuoku implicit handling commit helps with #381