diff options
author | Mike Morris <mikemorris@users.noreply.github.com> | 2016-08-24 15:47:21 -0400 |
---|---|---|
committer | Mike Morris <mikemorris@users.noreply.github.com> | 2016-09-21 10:33:40 -0400 |
commit | 6fe621bbef43e6b73a53ca25a9df3d349cd84929 (patch) | |
tree | 64bf5220c10d43814f960575385305cff8811c87 /src/mbgl/gl/gl.cpp | |
parent | 658354ced1c90ee794dabb128d0861827639bd50 (diff) | |
download | qtlocation-mapboxgl-6fe621bbef43e6b73a53ca25a9df3d349cd84929.tar.gz |
[core] check GL errors in loop
As recommended in https://www.opengl.org/wiki/GLAPI/glGetError
char* -> std::string
Diffstat (limited to 'src/mbgl/gl/gl.cpp')
-rw-r--r-- | src/mbgl/gl/gl.cpp | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/src/mbgl/gl/gl.cpp b/src/mbgl/gl/gl.cpp index 463d2e5654..54e9df53e1 100644 --- a/src/mbgl/gl/gl.cpp +++ b/src/mbgl/gl/gl.cpp @@ -61,31 +61,67 @@ void InitializeExtensions(glProc (*getProcAddress)(const char *)) { }); } -void checkError(const char *cmd, const char *file, int line) { - const GLenum err = glGetError(); - if (err != GL_NO_ERROR) { - const char *error = nullptr; - switch (err) { - case GL_INVALID_ENUM: error = "INVALID_ENUM"; break; - case GL_INVALID_VALUE: error = "INVALID_VALUE"; break; - case GL_INVALID_OPERATION: error = "INVALID_OPERATION"; break; +namespace { + +constexpr const char* stringFromError(GLenum err) { + switch (err) { + case GL_INVALID_ENUM: + return "GL_INVALID_ENUM"; + + case GL_INVALID_VALUE: + return "GL_INVALID_VALUE"; + + case GL_INVALID_OPERATION: + return "GL_INVALID_OPERATION"; + + case GL_INVALID_FRAMEBUFFER_OPERATION: + return "GL_INVALID_FRAMEBUFFER_OPERATION"; + + case GL_OUT_OF_MEMORY: + return "GL_OUT_OF_MEMORY"; + +#ifdef GL_TABLE_TOO_LARGE + case GL_TABLE_TOO_LARGE: + return "GL_TABLE_TOO_LARGE"; +#endif + #ifdef GL_STACK_OVERFLOW - case GL_STACK_OVERFLOW: error = "STACK_OVERFLOW"; break; + case GL_STACK_OVERFLOW: + return "GL_STACK_OVERFLOW"; #endif + #ifdef GL_STACK_UNDERFLOW - case GL_STACK_UNDERFLOW: error = "STACK_UNDERFLOW"; break; + case GL_STACK_UNDERFLOW: + return "GL_STACK_UNDERFLOW"; #endif - case GL_OUT_OF_MEMORY: error = "OUT_OF_MEMORY"; break; - case GL_INVALID_FRAMEBUFFER_OPERATION: error = "INVALID_FRAMEBUFFER_OPERATION"; break; + #ifdef GL_CONTEXT_LOST - case GL_CONTEXT_LOST: error = "CONTEXT_LOST"; break; + case GL_CONTEXT_LOST: + return "GL_CONTEXT_LOST"; #endif - default: error = "(unknown)"; break; + + default: + return "GL_UNKNOWN"; + } +} + +} // namespace + +void checkError(const char* cmd, const char* file, int line) { + GLenum err = GL_NO_ERROR; + if ((err = glGetError()) != GL_NO_ERROR) { + std::string message = std::string(cmd) + ": Error " + stringFromError(err); + + // Check for further errors + while ((err = glGetError()) != GL_NO_ERROR) { + message += ", "; + message += stringFromError(err); } - throw ::mbgl::gl::Error(err, std::string(cmd) + ": Error GL_" + error + " - " + file + ":" + util::toString(line)); + throw Error(message + " at " + file + ":" + util::toString(line)); } } + } // namespace gl } // namespace mbgl |