-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDebugOutputManager.cpp
More file actions
70 lines (59 loc) · 2.06 KB
/
DebugOutputManager.cpp
File metadata and controls
70 lines (59 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "DebugOutputManager.h"
#include <iostream>
#include <GL/glew.h>
#include <GL/wglew.h>
#include <GLFW/glfw3.h>
DebugOutputManager::DebugOutputManager()
{
isAvailable = false;
if (!GLEW_ARB_debug_output)
return;
glDebugMessageCallback(MessageCallback, 0);
glEnable(GL_DEBUG_OUTPUT);
//default is asynchronous debug output, use this to simulate glGetError() functionality
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
isAvailable = true;
}
void GLAPIENTRY DebugOutputManager::MessageCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam)
{
auto const src_str = [source]() {
switch (source)
{
case GL_DEBUG_SOURCE_API: return "API";
case GL_DEBUG_SOURCE_WINDOW_SYSTEM: return "WINDOW SYSTEM";
case GL_DEBUG_SOURCE_SHADER_COMPILER: return "SHADER COMPILER";
case GL_DEBUG_SOURCE_THIRD_PARTY: return "THIRD PARTY";
case GL_DEBUG_SOURCE_APPLICATION: return "APPLICATION";
case GL_DEBUG_SOURCE_OTHER: return "OTHER";
default: return "Unknown";
}
}();
auto const type_str = [type]() {
switch (type)
{
case GL_DEBUG_TYPE_ERROR: return "ERROR";
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: return "DEPRECATED_BEHAVIOR";
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: return "UNDEFINED_BEHAVIOR";
case GL_DEBUG_TYPE_PORTABILITY: return "PORTABILITY";
case GL_DEBUG_TYPE_PERFORMANCE: return "PERFORMANCE";
case GL_DEBUG_TYPE_MARKER: return "MARKER";
case GL_DEBUG_TYPE_OTHER: return "OTHER";
default: return "Unknown";
}
}();
auto const severity_str = [severity]() {
switch (severity) {
case GL_DEBUG_SEVERITY_NOTIFICATION: return "NOTIFICATION";
case GL_DEBUG_SEVERITY_LOW: return "LOW";
case GL_DEBUG_SEVERITY_MEDIUM: return "MEDIUM";
case GL_DEBUG_SEVERITY_HIGH: return "HIGH";
default: return "Unknown";
}
}();
std::cout << "[GL CALLBACK]: " <<
"source = " << src_str <<
", type = " << type_str <<
", severity = " << severity_str <<
", ID = '" << id << '\'' <<
", message = '" << message << '\'' << std::endl;
}