summaryrefslogtreecommitdiff
path: root/src/mbgl/gl/gl.cpp
diff options
context:
space:
mode:
authorMike Morris <mikemorris@users.noreply.github.com>2016-08-24 15:47:21 -0400
committerMike Morris <mikemorris@users.noreply.github.com>2016-09-21 10:33:40 -0400
commit6fe621bbef43e6b73a53ca25a9df3d349cd84929 (patch)
tree64bf5220c10d43814f960575385305cff8811c87 /src/mbgl/gl/gl.cpp
parent658354ced1c90ee794dabb128d0861827639bd50 (diff)
downloadqtlocation-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.cpp66
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