There appears to be a bug in the windows version of the emulator that causes glGetError to return a error code even when no error ought to have occurred. The demo actually runs perfectly fine if glGetError checks are removed.
This only occurs when running OpenGL ES 3.1.
This code triggers the issue:
GLenum e0 = glGetError(); // e0 == GL_NO_ERROR
GLuint handle = glCreateProgram(); // handle is valid
GLenum e1 = glGetError(); // e1 == GL_INVALID_OPERATION