diff options
Diffstat (limited to 'src')
| -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 c14bdb8ab..c34215340 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |||
| @@ -394,6 +394,58 @@ void RendererOpenGL::SetWindow(EmuWindow* window) { | |||
| 394 | render_window = window; | 394 | render_window = window; |
| 395 | } | 395 | } |
| 396 | 396 | ||
| 397 | static const char* GetSource(GLenum source) { | ||
| 398 | #define RET(s) case GL_DEBUG_SOURCE_##s: return #s | ||
| 399 | switch (source) { | ||
| 400 | RET(API); | ||
| 401 | RET(WINDOW_SYSTEM); | ||
| 402 | RET(SHADER_COMPILER); | ||
| 403 | RET(THIRD_PARTY); | ||
| 404 | RET(APPLICATION); | ||
| 405 | RET(OTHER); | ||
| 406 | default: | ||
| 407 | UNREACHABLE(); | ||
| 408 | } | ||
| 409 | #undef RET | ||
| 410 | } | ||
| 411 | |||
| 412 | static const char* GetType(GLenum type) { | ||
| 413 | #define RET(t) case GL_DEBUG_TYPE_##t: return #t | ||
| 414 | switch (type) { | ||
| 415 | RET(ERROR); | ||
| 416 | RET(DEPRECATED_BEHAVIOR); | ||
| 417 | RET(UNDEFINED_BEHAVIOR); | ||
| 418 | RET(PORTABILITY); | ||
| 419 | RET(PERFORMANCE); | ||
| 420 | RET(OTHER); | ||
| 421 | RET(MARKER); | ||
| 422 | default: | ||
| 423 | UNREACHABLE(); | ||
| 424 | } | ||
| 425 | #undef RET | ||
| 426 | } | ||
| 427 | |||
| 428 | static void DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, | ||
| 429 | const GLchar* message, const void* user_param) { | ||
| 430 | Log::Level level; | ||
| 431 | switch (severity) { | ||
| 432 | case GL_DEBUG_SEVERITY_HIGH: | ||
| 433 | level = Log::Level::Error; | ||
| 434 | break; | ||
| 435 | case GL_DEBUG_SEVERITY_MEDIUM: | ||
| 436 | level = Log::Level::Warning; | ||
| 437 | break; | ||
| 438 | case GL_DEBUG_SEVERITY_NOTIFICATION: | ||
| 439 | level = Log::Level::Info; | ||
| 440 | break; | ||
| 441 | case GL_DEBUG_SEVERITY_LOW: | ||
| 442 | level = Log::Level::Debug; | ||
| 443 | break; | ||
| 444 | } | ||
| 445 | LOG_GENERIC(Log::Class::Render_OpenGL, level, "%s %s %d: %s", | ||
| 446 | GetSource(source), GetType(type), id, message); | ||
| 447 | } | ||
| 448 | |||
| 397 | /// Initialize the renderer | 449 | /// Initialize the renderer |
| 398 | void RendererOpenGL::Init() { | 450 | void RendererOpenGL::Init() { |
| 399 | render_window->MakeCurrent(); | 451 | render_window->MakeCurrent(); |
| @@ -404,6 +456,11 @@ void RendererOpenGL::Init() { | |||
| 404 | exit(-1); | 456 | exit(-1); |
| 405 | } | 457 | } |
| 406 | 458 | ||
| 459 | if (GLAD_GL_KHR_debug) { | ||
| 460 | glEnable(GL_DEBUG_OUTPUT); | ||
| 461 | glDebugMessageCallback(DebugHandler, nullptr); | ||
| 462 | } | ||
| 463 | |||
| 407 | LOG_INFO(Render_OpenGL, "GL_VERSION: %s", glGetString(GL_VERSION)); | 464 | LOG_INFO(Render_OpenGL, "GL_VERSION: %s", glGetString(GL_VERSION)); |
| 408 | LOG_INFO(Render_OpenGL, "GL_VENDOR: %s", glGetString(GL_VENDOR)); | 465 | LOG_INFO(Render_OpenGL, "GL_VENDOR: %s", glGetString(GL_VENDOR)); |
| 409 | LOG_INFO(Render_OpenGL, "GL_RENDERER: %s", glGetString(GL_RENDERER)); | 466 | LOG_INFO(Render_OpenGL, "GL_RENDERER: %s", glGetString(GL_RENDERER)); |