diff options
author | Leith Bade <leith@mapbox.com> | 2014-12-02 01:53:44 +1100 |
---|---|---|
committer | Leith Bade <leith@mapbox.com> | 2014-12-02 01:53:44 +1100 |
commit | 2113e27990bc496a3bd26cf079f6156ac2dd9ff6 (patch) | |
tree | 9a7e42cf78115c693306ba476bc4f760f739a72f /src | |
parent | bbfe5d5ce4799dbfb55d4e4d44bc254592529c29 (diff) | |
download | qtlocation-mapboxgl-2113e27990bc496a3bd26cf079f6156ac2dd9ff6.tar.gz |
Implement debug callback
Diffstat (limited to 'src')
-rw-r--r-- | src/platform/gl.cpp | 41 | ||||
-rw-r--r-- | src/renderer/painter.cpp | 10 |
2 files changed, 48 insertions, 3 deletions
diff --git a/src/platform/gl.cpp b/src/platform/gl.cpp index bec1136bb0..2695804c86 100644 --- a/src/platform/gl.cpp +++ b/src/platform/gl.cpp @@ -19,8 +19,43 @@ PFNGLGETOBJECTLABELPROC GetObjectLabel; PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; -void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *userParam) { - //mbgl::Error(mbgl::Event::OpenGL) +void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei, const GLchar *message, const void *) { + std::string strSource; + switch (source) { + case GL_DEBUG_SOURCE_API: strSource = "DEBUG_SOURCE_API"; break; + case GL_DEBUG_SOURCE_WINDOW_SYSTEM: strSource = "DEBUG_SOURCE_WINDOW_SYSTEM"; break; + case GL_DEBUG_SOURCE_SHADER_COMPILER: strSource = "DEBUG_SOURCE_SHADER_COMPILER"; break; + case GL_DEBUG_SOURCE_THIRD_PARTY: strSource = "DEBUG_SOURCE_THIRD_PARTY"; break; + case GL_DEBUG_SOURCE_APPLICATION: strSource = "DEBUG_SOURCE_APPLICATION"; break; + case GL_DEBUG_SOURCE_OTHER: strSource = "DEBUG_SOURCE_OTHER"; break; + default: strSource = "(unknown)"; break; + } + + std::string strType; + switch (type) { + case GL_DEBUG_TYPE_ERROR: strType = "DEBUG_TYPE_ERROR"; break; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: strType = "DEBUG_TYPE_DEPRECATED_BEHAVIOR"; break; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: strType = "DEBUG_TYPE_UNDEFINED_BEHAVIOR"; break; + case GL_DEBUG_TYPE_PERFORMANCE: strType = "DEBUG_TYPE_PERFORMANCE"; break; + case GL_DEBUG_TYPE_PORTABILITY: strType = "DEBUG_TYPE_PORTABILITY"; break; + case GL_DEBUG_TYPE_OTHER: strType = "DEBUG_TYPE_OTHER"; break; + case GL_DEBUG_TYPE_MARKER: strType = "DEBUG_TYPE_MARKER"; break; + case GL_DEBUG_TYPE_PUSH_GROUP: strType = "DEBUG_TYPE_OTHER"; break; + case GL_DEBUG_TYPE_POP_GROUP: strType = "DEBUG_TYPE_POP_GROUP"; break; + default: strSource = "(unknown)"; break; + } + + std::string strSeverity; + mbgl::EventSeverity evtSeverity; + switch (severity) { + case GL_DEBUG_SEVERITY_HIGH: strSeverity = "DEBUG_SEVERITY_HIGH"; evtSeverity = mbgl::EventSeverity::Error; break; + case GL_DEBUG_SEVERITY_MEDIUM: strSeverity = "DEBUG_SEVERITY_MEDIUM"; evtSeverity = mbgl::EventSeverity::Warning; break; + case GL_DEBUG_SEVERITY_LOW: strSeverity = "DEBUG_SEVERITY_LOW"; evtSeverity = mbgl::EventSeverity::Info; break; + case GL_DEBUG_SEVERITY_NOTIFICATION: strSeverity = "DEBUG_SEVERITY_NOTIFICATION"; evtSeverity = mbgl::EventSeverity::Debug; break; + default: strSource = "(unknown)"; evtSeverity = mbgl::EventSeverity::Debug; break; + } + + mbgl::Log::Record(evtSeverity, mbgl::Event::OpenGL, "GL Debug Message: %s %s %u %s - %s", strSource.c_str(), strType.c_str(), id, strSeverity.c_str(), message); } PFNGLBINDVERTEXARRAYPROC BindVertexArray = nullptr; @@ -47,7 +82,7 @@ void _CHECK_GL_ERROR(const char *cmd, const char *file, int line) { default: error = "(unknown)"; break; } - mbgl::Log::Error(mbgl::Event::OpenGL, "GL_%s(0x%04X) - %s:%i", error.c_str(), file, line, err); + mbgl::Log::Error(mbgl::Event::OpenGL, "GL Error: GL_%s(0x%04X) - %s:%i", error.c_str(), file, line, err); exit(1); } } diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index 960168bd4a..7c94147c65 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -42,6 +42,16 @@ void Painter::setup() { #if defined(DEBUG) util::stopwatch stopwatch("painter setup"); #endif + + // Enable GL debugging + if ((gl::DebugMessageControl != nullptr) && (gl::DebugMessageCallback != nullptr)) { + // This will enable all messages including performance hints + //gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE); + gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE); + gl::DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, nullptr, GL_TRUE); + gl::DebugMessageCallback(gl::debug_callback, nullptr); + } + setupShaders(); assert(iconShader); |