1 #include <GLES3/gl32.h>
2 #include <wayfire/debug.hpp>
3
getStrSrc(GLenum src)4 const char *getStrSrc(GLenum src)
5 {
6 if (src == GL_DEBUG_SOURCE_API)
7 {
8 return "API";
9 }
10
11 if (src == GL_DEBUG_SOURCE_WINDOW_SYSTEM)
12 {
13 return "WINDOW_SYSTEM";
14 }
15
16 if (src == GL_DEBUG_SOURCE_SHADER_COMPILER)
17 {
18 return "SHADER_COMPILER";
19 }
20
21 if (src == GL_DEBUG_SOURCE_THIRD_PARTY)
22 {
23 return "THIRD_PARTYB";
24 }
25
26 if (src == GL_DEBUG_SOURCE_APPLICATION)
27 {
28 return "APPLICATIONB";
29 }
30
31 if (src == GL_DEBUG_SOURCE_OTHER)
32 {
33 return "OTHER";
34 } else
35 {
36 return "UNKNOWN";
37 }
38 }
39
getStrType(GLenum type)40 const char *getStrType(GLenum type)
41 {
42 if (type == GL_DEBUG_TYPE_ERROR)
43 {
44 return "ERROR";
45 }
46
47 if (type == GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR)
48 {
49 return "DEPRECATED_BEHAVIOR";
50 }
51
52 if (type == GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR)
53 {
54 return "UNDEFINED_BEHAVIOR";
55 }
56
57 if (type == GL_DEBUG_TYPE_PORTABILITY)
58 {
59 return "PORTABILITY";
60 }
61
62 if (type == GL_DEBUG_TYPE_PERFORMANCE)
63 {
64 return "PERFORMANCE";
65 }
66
67 if (type == GL_DEBUG_TYPE_OTHER)
68 {
69 return "OTHER";
70 }
71
72 return "UNKNOWN";
73 }
74
getStrSeverity(GLenum severity)75 const char *getStrSeverity(GLenum severity)
76 {
77 if (severity == GL_DEBUG_SEVERITY_HIGH)
78 {
79 return "HIGH";
80 }
81
82 if (severity == GL_DEBUG_SEVERITY_MEDIUM)
83 {
84 return "MEDIUM";
85 }
86
87 if (severity == GL_DEBUG_SEVERITY_LOW)
88 {
89 return "LOW";
90 }
91
92 if (severity == GL_DEBUG_SEVERITY_NOTIFICATION)
93 {
94 return "NOTIFICATION";
95 }
96
97 return "UNKNOWN";
98 }
99
errorHandler(GLenum src,GLenum type,GLuint id,GLenum severity,GLsizei len,const GLchar * msg,const void * dummy)100 void errorHandler(GLenum src, GLenum type, GLuint id, GLenum severity,
101 GLsizei len, const GLchar *msg, const void *dummy)
102 {
103 // ignore notifications
104 if (severity == GL_DEBUG_SEVERITY_NOTIFICATION)
105 {
106 return;
107 }
108
109 LOGI(
110 "_______________________________________________\n",
111 "Source: ", getStrSrc(src), "\n",
112 "Type: ", getStrType(type), "\n",
113 "Severity: ", getStrSeverity(severity), "\n",
114 "Msg: ", msg, "\n",
115 "_______________________________________________\n");
116 }
117
enable_gl_synchronuous_debug()118 void enable_gl_synchronuous_debug()
119 {
120 glEnable(GL_DEBUG_OUTPUT);
121 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
122 glDebugMessageCallback(errorHandler, 0);
123 }
124