Impeller's OpenGLES backend tries to reuse buffers across different buffer targets (i.e. GL_ARRAY_BUFFER vs GL_ELEMENT_ARRAY_BUFFER). WebGL doesn't like this and rejects the call to glBindBuffer. See this section of the WebGL spec on buffer binding restrictions: https://registry.khronos.org/webgl/specs/latest/2.0/#BUFFER_OBJECT_BINDING