Forked from liam-middlebrook/GLDebugMessageCallback.c
Last active
September 15, 2020 20:48
-
-
Save DenisNasc/cb36219511ba0a914be5c8c1fa5a068b to your computer and use it in GitHub Desktop.
GL Debug Output Message Callback Guide
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Função para gerenciar erros do OpenGL >4.3 | |
| // Callback function for printing debug statements | |
| void APIENTRY GLDebugMessageCallback(GLenum source, GLenum type, GLuint id, | |
| GLenum severity, GLsizei length, | |
| const GLchar *msg, const void *data) | |
| { | |
| const char* _source; | |
| const char* _type; | |
| const char* _severity; | |
| switch (source) { | |
| case GL_DEBUG_SOURCE_API: | |
| _source = "API"; | |
| break; | |
| case GL_DEBUG_SOURCE_WINDOW_SYSTEM: | |
| _source = "WINDOW SYSTEM"; | |
| break; | |
| case GL_DEBUG_SOURCE_SHADER_COMPILER: | |
| _source = "SHADER COMPILER"; | |
| break; | |
| case GL_DEBUG_SOURCE_THIRD_PARTY: | |
| _source = "THIRD PARTY"; | |
| break; | |
| case GL_DEBUG_SOURCE_APPLICATION: | |
| _source = "APPLICATION"; | |
| break; | |
| case GL_DEBUG_SOURCE_OTHER: | |
| _source = "UNKNOWN"; | |
| break; | |
| default: | |
| _source = "UNKNOWN"; | |
| break; | |
| } | |
| switch (type) { | |
| case GL_DEBUG_TYPE_ERROR: | |
| _type = "ERROR"; | |
| break; | |
| case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: | |
| _type = "DEPRECATED BEHAVIOR"; | |
| break; | |
| case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: | |
| _type = "UDEFINED BEHAVIOR"; | |
| break; | |
| case GL_DEBUG_TYPE_PORTABILITY: | |
| _type = "PORTABILITY"; | |
| break; | |
| case GL_DEBUG_TYPE_PERFORMANCE: | |
| _type = "PERFORMANCE"; | |
| break; | |
| case GL_DEBUG_TYPE_OTHER: | |
| _type = "OTHER"; | |
| break; | |
| case GL_DEBUG_TYPE_MARKER: | |
| _type = "MARKER"; | |
| break; | |
| default: | |
| _type = "UNKNOWN"; | |
| break; | |
| } | |
| switch (severity) { | |
| case GL_DEBUG_SEVERITY_HIGH: | |
| _severity = "HIGH"; | |
| break; | |
| case GL_DEBUG_SEVERITY_MEDIUM: | |
| _severity = "MEDIUM"; | |
| break; | |
| case GL_DEBUG_SEVERITY_LOW: | |
| _severity = "LOW"; | |
| break; | |
| case GL_DEBUG_SEVERITY_NOTIFICATION: | |
| _severity = "NOTIFICATION"; | |
| break; | |
| default: | |
| _severity = "UNKNOWN"; | |
| break; | |
| } | |
| std::cout << id <<": " << _type << " of " << _severity << " severity, raised from " << _source <<": " << msg << std::endl; | |
| } | |
| // =============== INIT DEBUG OUTPUT ================ | |
| // The following function calls should be made directly after OpenGL | |
| // initialization. | |
| // Enable the debugging layer of OpenGL | |
| // | |
| // GL_DEBUG_OUTPUT - Faster version but not useful for breakpoints | |
| // GL_DEBUG_OUTPUT_SYNCHRONUS - Callback is in sync with errors, so a breakpoint | |
| // can be placed on the callback in order to get a stacktrace for the GL error. | |
| glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); | |
| // Set the function that will be triggered by the callback, the second parameter | |
| // is the data parameter of the callback, it can be useful for different | |
| // contexts but isn't necessary for our simple use case. | |
| glDebugMessageCallback(GLDebugMessageCallback, NULL); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment