diff options
author | Mike Erwin <significant.bit@gmail.com> | 2016-08-15 11:00:59 +0300 |
---|---|---|
committer | Mike Erwin <significant.bit@gmail.com> | 2016-08-15 11:10:54 +0300 |
commit | ad6e7a0be15cf6c47635987a04cd5824fb5de054 (patch) | |
tree | 3e07b631e051935654f01e247cdf11a82fe57cab /source/blender/gpu/intern | |
parent | 55eb8ce87361e968b153a3e728e6842e3069d093 (diff) |
OpenGL: backtrace on errors (--debug-gpu)
Backtrace so we can pinpoint where the GL error came from. Then fflush
on severe errors in case it's severe enough to crash Blender.
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_debug.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/source/blender/gpu/intern/gpu_debug.c b/source/blender/gpu/intern/gpu_debug.c index 555af8b087a..21458a22221 100644 --- a/source/blender/gpu/intern/gpu_debug.c +++ b/source/blender/gpu/intern/gpu_debug.c @@ -207,13 +207,21 @@ static void APIENTRY gpu_debug_proc( GLenum severity, GLsizei UNUSED(length), const GLchar *message, const GLvoid *UNUSED(userParm)) { + bool backtrace = false; + switch (severity) { case GL_DEBUG_SEVERITY_HIGH: + backtrace = true; + /* fall through */ case GL_DEBUG_SEVERITY_MEDIUM: case GL_DEBUG_SEVERITY_LOW: case GL_DEBUG_SEVERITY_NOTIFICATION: /* KHR has this, ARB does not */ fprintf(stderr, "GL %s %s: %s\n", source_name(source), message_type_name(type), message); - fflush(stderr); + } + + if (backtrace) { + BLI_system_backtrace(stderr); + fflush(stderr); } } @@ -224,12 +232,20 @@ static void APIENTRY gpu_debug_proc_amd( GLenum severity, GLsizei UNUSED(length), const GLchar *message, GLvoid *UNUSED(userParm)) { + bool backtrace = false; + switch (severity) { case GL_DEBUG_SEVERITY_HIGH: + backtrace = true; + /* fall through */ case GL_DEBUG_SEVERITY_MEDIUM: case GL_DEBUG_SEVERITY_LOW: fprintf(stderr, "GL %s: %s\n", category_name_amd(category), message); - fflush(stderr); + } + + if (backtrace) { + BLI_system_backtrace(stderr); + fflush(stderr); } } #endif |