|
|
@@ -369,6 +369,58 @@ void RendererOpenGL::SetWindow(EmuWindow* window) {
|
|
|
render_window = window;
|
|
|
}
|
|
|
|
|
|
+static const char* GetSource(GLenum source) {
|
|
|
+#define RET(s) case GL_DEBUG_SOURCE_##s: return #s
|
|
|
+ switch (source) {
|
|
|
+ RET(API);
|
|
|
+ RET(WINDOW_SYSTEM);
|
|
|
+ RET(SHADER_COMPILER);
|
|
|
+ RET(THIRD_PARTY);
|
|
|
+ RET(APPLICATION);
|
|
|
+ RET(OTHER);
|
|
|
+ default:
|
|
|
+ UNREACHABLE();
|
|
|
+ }
|
|
|
+#undef RET
|
|
|
+}
|
|
|
+
|
|
|
+static const char* GetType(GLenum type) {
|
|
|
+#define RET(t) case GL_DEBUG_TYPE_##t: return #t
|
|
|
+ switch (type) {
|
|
|
+ RET(ERROR);
|
|
|
+ RET(DEPRECATED_BEHAVIOR);
|
|
|
+ RET(UNDEFINED_BEHAVIOR);
|
|
|
+ RET(PORTABILITY);
|
|
|
+ RET(PERFORMANCE);
|
|
|
+ RET(OTHER);
|
|
|
+ RET(MARKER);
|
|
|
+ default:
|
|
|
+ UNREACHABLE();
|
|
|
+ }
|
|
|
+#undef RET
|
|
|
+}
|
|
|
+
|
|
|
+static void DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
|
|
|
+ const GLchar* message, const void* user_param) {
|
|
|
+ Log::Level level;
|
|
|
+ switch (severity) {
|
|
|
+ case GL_DEBUG_SEVERITY_HIGH:
|
|
|
+ level = Log::Level::Error;
|
|
|
+ break;
|
|
|
+ case GL_DEBUG_SEVERITY_MEDIUM:
|
|
|
+ level = Log::Level::Warning;
|
|
|
+ break;
|
|
|
+ case GL_DEBUG_SEVERITY_NOTIFICATION:
|
|
|
+ level = Log::Level::Info;
|
|
|
+ break;
|
|
|
+ case GL_DEBUG_SEVERITY_LOW:
|
|
|
+ level = Log::Level::Debug;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ LOG_GENERIC(Log::Class::Render_OpenGL, level, "%s %s %d: %s",
|
|
|
+ GetSource(source), GetType(type), id, message);
|
|
|
+}
|
|
|
+
|
|
|
/// Initialize the renderer
|
|
|
void RendererOpenGL::Init() {
|
|
|
render_window->MakeCurrent();
|
|
|
@@ -379,6 +431,11 @@ void RendererOpenGL::Init() {
|
|
|
exit(-1);
|
|
|
}
|
|
|
|
|
|
+ if (GLAD_GL_KHR_debug) {
|
|
|
+ glEnable(GL_DEBUG_OUTPUT);
|
|
|
+ glDebugMessageCallback(DebugHandler, nullptr);
|
|
|
+ }
|
|
|
+
|
|
|
LOG_INFO(Render_OpenGL, "GL_VERSION: %s", glGetString(GL_VERSION));
|
|
|
LOG_INFO(Render_OpenGL, "GL_VENDOR: %s", glGetString(GL_VENDOR));
|
|
|
LOG_INFO(Render_OpenGL, "GL_RENDERER: %s", glGetString(GL_RENDERER));
|