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