Because the bugs keep piling up faster than I'm able to find solutions, sigh.
The original problem, as reported by @kleisauke: Pressing S and shooting the first sphere in the web Bullet example gives a Vertex buffer is not big enough for the draw call. WebGL error -- an ANGLE-specific bug where instanced attributes don't get bounds-checked properly with non-instanced glDraw*(). The workaround is to use glDraw*Instanced() unconditionally if instanced attributes are present.
I'm hesitant to do this unconditionally because who knows what other bugs or perf drops on other implementations / ANGLE backends this would uncover.
The workaround implementation is correct and was verified to work, however I'm stuck on crafting a regression test case to prevent this from resurfacing again in the future. Things left to do:
[x] fix MeshGLTest to actually produce something on ANGLE+D3D, currently it's all zeros (should I set gl_PointSize?!)
[x] the attempt to reproduce this problem in the test didn't really work (not leading to a GL error if workaround is not enabled), fix (was it due to the above issue? but i suppose the validation would still happen there, no?)
Because the bugs keep piling up faster than I'm able to find solutions, sigh.
The original problem, as reported by @kleisauke: Pressing S and shooting the first sphere in the web Bullet example gives a
Vertex buffer is not big enough for the draw call.
WebGL error -- an ANGLE-specific bug where instanced attributes don't get bounds-checked properly with non-instancedglDraw*()
. The workaround is to useglDraw*Instanced()
unconditionally if instanced attributes are present.I'm hesitant to do this unconditionally because who knows what other bugs or perf drops on other implementations / ANGLE backends this would uncover.
The workaround implementation is correct and was verified to work, however I'm stuck on crafting a regression test case to prevent this from resurfacing again in the future. Things left to do:
gl_PointSize
?!)