summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp57
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
397static 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
412static 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
428static 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
398void RendererOpenGL::Init() { 450void 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));