diff options
Diffstat (limited to 'src/mbgl/gl/debugging.cpp')
-rw-r--r-- | src/mbgl/gl/debugging.cpp | 194 |
1 files changed, 17 insertions, 177 deletions
diff --git a/src/mbgl/gl/debugging.cpp b/src/mbgl/gl/debugging.cpp index 5ce3e606ee..0d69d58be5 100644 --- a/src/mbgl/gl/debugging.cpp +++ b/src/mbgl/gl/debugging.cpp @@ -1,193 +1,33 @@ #include <mbgl/gl/debugging.hpp> -#include <mbgl/gl/gl.hpp> -#include <mbgl/gl/extension.hpp> -#include <mbgl/util/event.hpp> -#include <mbgl/util/logging.hpp> - -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_DISPLAY_LIST 0x82E7 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TEXTURE 0x1702 -#define GL_RENDERBUFFER 0x8D41 -#define GL_FRAMEBUFFER 0x8D40 +#include <mbgl/gl/context.hpp> +#include <mbgl/gl/debugging_extension.hpp> namespace mbgl { namespace gl { -namespace debugging { - -typedef void (*GLDEBUGPROC)(GLenum source, - GLenum type, - GLuint id, - GLenum severity, - GLsizei length, - const GLchar *message, - const void *userParam); - -static ExtensionFunction< - void (GLenum source, - GLenum type, - GLenum severity, - GLsizei count, - const GLuint *ids, - GLboolean enabled)> - DebugMessageControl({ - {"GL_KHR_debug", "glDebugMessageControl"}, - {"GL_ARB_debug_output", "glDebugMessageControlARB"} - }); - -static ExtensionFunction< - void (GLDEBUGPROC callback, - const void *userParam)> - DebugMessageCallback({ - {"GL_KHR_debug", "glDebugMessageCallback"}, - {"GL_ARB_debug_output", "glDebugMessageCallbackARB"} - }); - -void debugCallback(GLenum source, - GLenum type, - GLuint id, - GLenum severity, - GLsizei /*length*/, - const GLchar* message, - const void* /*userParam*/) -{ - 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_%s GL_%s %u GL_%s - %s", strSource.c_str(), strType.c_str(), id, strSeverity.c_str(), message); -} - -void enable() { - if (!DebugMessageControl || !DebugMessageCallback) { - return; - } - - // This will enable all messages including performance hints - // MBGL_CHECK_ERROR(DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE)); - - // This will only enable high and medium severity messages - MBGL_CHECK_ERROR(DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE)); - MBGL_CHECK_ERROR(DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, nullptr, GL_TRUE)); - MBGL_CHECK_ERROR(DebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_NOTIFICATION, 0, nullptr, GL_FALSE)); - - MBGL_CHECK_ERROR(DebugMessageCallback(debugCallback, nullptr)); -} #ifndef NDEBUG -static ExtensionFunction< - void (GLenum source, - GLuint id, - GLsizei length, - const GLchar *message)> - PushDebugGroup({ - {"GL_KHR_debug", "glPushDebugGroup"} - }); - -static ExtensionFunction< - void ()> - PopDebugGroup({ - {"GL_KHR_debug", "glPopDebugGroup"} - }); - -static ExtensionFunction< - void (GLsizei length, - const GLchar *marker)> - PushGroupMarkerEXT({ - {"GL_EXT_debug_marker", "glPushGroupMarkerEXT"} - }); -static ExtensionFunction< - void ()> - PopGroupMarkerEXT({ - {"GL_EXT_debug_marker", "glPopGroupMarkerEXT"} - }); - -group::group(const std::string& str) { - if (PushDebugGroup) { - PushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, GLsizei(str.size()), str.c_str()); - } else if (PushGroupMarkerEXT) { - PushGroupMarkerEXT(GLsizei(str.size() + 1), str.c_str()); +DebugGroup::DebugGroup(const Context& context_, const std::string& name) : context(context_) { + if (auto debugging = context.getDebuggingExtension()) { + if (debugging->pushDebugGroup) { + debugging->pushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, GLsizei(name.size()), name.c_str()); + } else if (debugging->pushGroupMarkerEXT) { + debugging->pushGroupMarkerEXT(GLsizei(name.size() + 1), name.c_str()); + } } } -group::~group() { - if (PopDebugGroup) { - PopDebugGroup(); - } else if (PopGroupMarkerEXT) { - PopGroupMarkerEXT(); +DebugGroup::~DebugGroup() { + if (auto debugging = context.getDebuggingExtension()) { + if (debugging->popDebugGroup) { + debugging->popDebugGroup(); + } else if (debugging->popGroupMarkerEXT) { + debugging->popGroupMarkerEXT(); + } } } + #endif -} // namespace debugging } // namespace gl } // namespace mbgl |