diff options
Diffstat (limited to 'source/blender/gpu/opengl/gl_debug.cc')
-rw-r--r-- | source/blender/gpu/opengl/gl_debug.cc | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/source/blender/gpu/opengl/gl_debug.cc b/source/blender/gpu/opengl/gl_debug.cc index b2b05124463..848c0c462fe 100644 --- a/source/blender/gpu/opengl/gl_debug.cc +++ b/source/blender/gpu/opengl/gl_debug.cc @@ -33,6 +33,8 @@ #include "GPU_debug.h" #include "GPU_platform.h" +#include "CLG_log.h" + #include "glew-mx.h" #include "gl_context.hh" @@ -42,6 +44,8 @@ #include <stdio.h> +static CLG_LogRef LOG = {"gpu.debug"}; + /* Avoid too much NVidia buffer info in the output log. */ #define TRIM_NVIDIA_BUFFER_INFO 1 @@ -61,8 +65,6 @@ namespace blender::gpu::debug { # define APIENTRY #endif -#define VERBOSE 1 - static void APIENTRY debug_callback(GLenum UNUSED(source), GLenum type, GLuint UNUSED(id), @@ -86,36 +88,47 @@ static void APIENTRY debug_callback(GLenum UNUSED(source), const char format[] = "GPUDebug: %s%s%s\033[0m\n"; + const bool use_color = CLG_color_support_get(&LOG); + if (ELEM(severity, GL_DEBUG_SEVERITY_LOW, GL_DEBUG_SEVERITY_NOTIFICATION)) { - if (VERBOSE) { - fprintf(stderr, format, "\033[2m", "", message); + if (((LOG.type->flag & CLG_FLAG_USE) && (LOG.type->level >= CLG_SEVERITY_INFO))) { + const char *format = use_color ? "\033[2m%s\033[0m" : "%s"; + CLG_logf(LOG.type, CLG_SEVERITY_INFO, "Notification", "", format, message); } } else { char debug_groups[512] = ""; GPU_debug_get_groups_names(sizeof(debug_groups), debug_groups); + CLG_Severity clog_severity; switch (type) { case GL_DEBUG_TYPE_ERROR: case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: - fprintf(stderr, format, "\033[31;1mError\033[39m: ", debug_groups, message); + clog_severity = CLG_SEVERITY_ERROR; break; case GL_DEBUG_TYPE_PORTABILITY: case GL_DEBUG_TYPE_PERFORMANCE: case GL_DEBUG_TYPE_OTHER: case GL_DEBUG_TYPE_MARKER: /* KHR has this, ARB does not */ default: - fprintf(stderr, format, "\033[33;1mWarning\033[39m: ", debug_groups, message); + clog_severity = CLG_SEVERITY_WARN; break; } - if (VERBOSE && severity == GL_DEBUG_SEVERITY_HIGH) { - /* Focus on error message. */ - fprintf(stderr, "\033[2m"); - BLI_system_backtrace(stderr); - fprintf(stderr, "\033[0m\n"); - fflush(stderr); + if (((LOG.type->flag & CLG_FLAG_USE) && (LOG.type->level >= clog_severity))) { + CLG_logf(LOG.type, clog_severity, debug_groups, "", message); + if (severity == GL_DEBUG_SEVERITY_HIGH) { + /* Focus on error message. */ + if (use_color) { + fprintf(stderr, "\033[2m"); + } + BLI_system_backtrace(stderr); + if (use_color) { + fprintf(stderr, "\033[0m\n"); + } + fflush(stderr); + } } } } @@ -125,6 +138,8 @@ static void APIENTRY debug_callback(GLenum UNUSED(source), /* This function needs to be called once per context. */ void init_gl_callbacks(void) { + CLOG_ENSURE(&LOG); + char msg[256] = ""; const char format[] = "Successfully hooked OpenGL debug callback using %s"; @@ -154,7 +169,7 @@ void init_gl_callbacks(void) msg); } else { - fprintf(stderr, "GPUDebug: Failed to hook OpenGL debug callback. Use fallback debug layer.\n"); + CLOG_STR_WARN(&LOG, "Failed to hook OpenGL debug callback. Use fallback debug layer."); init_debug_layer(); } } |