diff options
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index f1313b54f..4202d828c 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |||
| @@ -369,6 +369,58 @@ void RendererOpenGL::SetWindow(EmuWindow* window) { | |||
| 369 | render_window = window; | 369 | render_window = window; |
| 370 | } | 370 | } |
| 371 | 371 | ||
| 372 | static const char* GetSource(GLenum source) { | ||
| 373 | #define RET(s) case GL_DEBUG_SOURCE_##s: return #s | ||
| 374 | switch (source) { | ||
| 375 | RET(API); | ||
| 376 | RET(WINDOW_SYSTEM); | ||
| 377 | RET(SHADER_COMPILER); | ||
| 378 | RET(THIRD_PARTY); | ||
| 379 | RET(APPLICATION); | ||
| 380 | RET(OTHER); | ||
| 381 | default: | ||
| 382 | UNREACHABLE(); | ||
| 383 | } | ||
| 384 | #undef RET | ||
| 385 | } | ||
| 386 | |||
| 387 | static const char* GetType(GLenum type) { | ||
| 388 | #define RET(t) case GL_DEBUG_TYPE_##t: return #t | ||
| 389 | switch (type) { | ||
| 390 | RET(ERROR); | ||
| 391 | RET(DEPRECATED_BEHAVIOR); | ||
| 392 | RET(UNDEFINED_BEHAVIOR); | ||
| 393 | RET(PORTABILITY); | ||
| 394 | RET(PERFORMANCE); | ||
| 395 | RET(OTHER); | ||
| 396 | RET(MARKER); | ||
| 397 | default: | ||
| 398 | UNREACHABLE(); | ||
| 399 | } | ||
| 400 | #undef RET | ||
| 401 | } | ||
| 402 | |||
| 403 | static void DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, | ||
| 404 | const GLchar* message, const void* user_param) { | ||
| 405 | Log::Level level; | ||
| 406 | switch (severity) { | ||
| 407 | case GL_DEBUG_SEVERITY_HIGH: | ||
| 408 | level = Log::Level::Error; | ||
| 409 | break; | ||
| 410 | case GL_DEBUG_SEVERITY_MEDIUM: | ||
| 411 | level = Log::Level::Warning; | ||
| 412 | break; | ||
| 413 | case GL_DEBUG_SEVERITY_NOTIFICATION: | ||
| 414 | level = Log::Level::Info; | ||
| 415 | break; | ||
| 416 | case GL_DEBUG_SEVERITY_LOW: | ||
| 417 | level = Log::Level::Debug; | ||
| 418 | break; | ||
| 419 | } | ||
| 420 | LOG_GENERIC(Log::Class::Render_OpenGL, level, "%s %s %d: %s", | ||
| 421 | GetSource(source), GetType(type), id, message); | ||
| 422 | } | ||
| 423 | |||
| 372 | /// Initialize the renderer | 424 | /// Initialize the renderer |
| 373 | void RendererOpenGL::Init() { | 425 | void RendererOpenGL::Init() { |
| 374 | render_window->MakeCurrent(); | 426 | render_window->MakeCurrent(); |
| @@ -379,6 +431,11 @@ void RendererOpenGL::Init() { | |||
| 379 | exit(-1); | 431 | exit(-1); |
| 380 | } | 432 | } |
| 381 | 433 | ||
| 434 | if (GLAD_GL_KHR_debug) { | ||
| 435 | glEnable(GL_DEBUG_OUTPUT); | ||
| 436 | glDebugMessageCallback(DebugHandler, nullptr); | ||
| 437 | } | ||
| 438 | |||
| 382 | LOG_INFO(Render_OpenGL, "GL_VERSION: %s", glGetString(GL_VERSION)); | 439 | LOG_INFO(Render_OpenGL, "GL_VERSION: %s", glGetString(GL_VERSION)); |
| 383 | LOG_INFO(Render_OpenGL, "GL_VENDOR: %s", glGetString(GL_VENDOR)); | 440 | LOG_INFO(Render_OpenGL, "GL_VENDOR: %s", glGetString(GL_VENDOR)); |
| 384 | LOG_INFO(Render_OpenGL, "GL_RENDERER: %s", glGetString(GL_RENDERER)); | 441 | LOG_INFO(Render_OpenGL, "GL_RENDERER: %s", glGetString(GL_RENDERER)); |