ptitSeb / gl4es

GL4ES is a OpenGL 2.1/1.5 to GL ES 2.0/1.1 translation library, with support for Pandora, ODroid, OrangePI, CHIP, Raspberry PI, Android, Emscripten and AmigaOS4.

Home Page:http://ptitseb.github.io/gl4es/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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:

  1. Client generate buffer name with glGenBuffers (=> buffer name X)
  2. Client attach X to array buffer
  3. gl4es caches X inside its state cache
  4. Client delete buffer X with glDeleteBuffers
  5. Client generate buffer and server assigned same name X for the new object
  6. Client attach (newly created) buffer X
  7. gl4es ignores request since they thinks we have already attached buffer X
  8. 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