summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-12-10 13:46:26 +0100
committerKonstantin Käfer <mail@kkaefer.com>2014-12-10 13:46:26 +0100
commit4ad28c931aaf930afd7dace5805578acc4915e1f (patch)
treea7e897030647057d37be01f6ade37e3d7e8ea8b4
parent93d56294cf6f7af39679a871f51087be34f813a2 (diff)
downloadqtlocation-mapboxgl-4ad28c931aaf930afd7dace5805578acc4915e1f.tar.gz
only report STACK_OVERFLOW/STACK_UNDERFLOW when the GL implementation has them
-rw-r--r--include/mbgl/platform/gl.hpp7
-rw-r--r--src/mbgl/platform/gl.cpp11
2 files changed, 14 insertions, 4 deletions
diff --git a/include/mbgl/platform/gl.hpp b/include/mbgl/platform/gl.hpp
index b639094461..e2b6d304bd 100644
--- a/include/mbgl/platform/gl.hpp
+++ b/include/mbgl/platform/gl.hpp
@@ -2,6 +2,7 @@
#define MBGL_RENDERER_GL
#include <string>
+#include <stdexcept>
#if __APPLE__
#include "TargetConditionals.h"
@@ -29,6 +30,12 @@
namespace mbgl {
namespace gl {
+struct Error : ::std::runtime_error {
+ inline Error(GLenum err, const std::string &msg) : ::std::runtime_error(msg), code(err) {};
+ const GLenum code;
+};
+
+
// GL_KHR_debug / GL_ARB_debug_output
#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
diff --git a/src/mbgl/platform/gl.cpp b/src/mbgl/platform/gl.cpp
index e766ac3310..95fad969f7 100644
--- a/src/mbgl/platform/gl.cpp
+++ b/src/mbgl/platform/gl.cpp
@@ -75,8 +75,8 @@ PFNGLPROGRAMBINARYPROC ProgramBinary = nullptr;
PFNGLPROGRAMPARAMETERIPROC ProgramParameteri = nullptr;
void checkError(const char *cmd, const char *file, int line) {
- GLenum err;
- while ((err = glGetError()) != GL_NO_ERROR) {
+ const GLenum err = glGetError();
+ if (err != GL_NO_ERROR) {
const char *error = nullptr;
switch (err) {
case GL_INVALID_ENUM: error = "INVALID_ENUM"; break;
@@ -84,13 +84,16 @@ void checkError(const char *cmd, const char *file, int line) {
case GL_INVALID_OPERATION: error = "INVALID_OPERATION"; break;
case GL_INVALID_FRAMEBUFFER_OPERATION: error = "INVALID_FRAMEBUFFER_OPERATION"; break;
case GL_OUT_OF_MEMORY: error = "OUT_OF_MEMORY"; break;
+#ifdef GL_STACK_UNDERFLOW
case GL_STACK_UNDERFLOW: error = "STACK_UNDERFLOW"; break;
+#endif
+#ifdef GL_STACK_OVERFLOW
case GL_STACK_OVERFLOW: error = "STACK_OVERFLOW"; break;
+#endif
default: error = "(unknown)"; break;
}
- mbgl::Log::Error(mbgl::Event::OpenGL, "%s: Error GL_%s (0x%04X) - %s:%i", cmd, error, err, file, line);
- exit(1);
+ throw ::mbgl::gl::Error(err, std::string(cmd) + ": Error GL_" + error + " - " + file + ":" + std::to_string(line));
}
}