3#include "GLFuncPointers.h"
4#include "Foundation/Logging/Logger.h"
5#include "Foundation/Platform/DebugUtils.h"
14 oid CALLBACK DebugCallback(GLenum source,
19 const GLchar* message,
22 case GL_DEBUG_TYPE_OTHER:
23 if ((source != GL_DEBUG_SOURCE_APPLICATION) || (
id != 1)) {
26 case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
27 case GL_DEBUG_TYPE_MARKER:
28 case GL_DEBUG_TYPE_PUSH_GROUP:
29 case GL_DEBUG_TYPE_POP_GROUP:
44 if (std::strstr(message,
"Texture 0") || std::strstr(message,
"texture object (0)")) {
51 LOG_DEBUG(logger,
"%d %d(%d) %s", source, type,
id, message);
63 void CALLBACK debugCallback(GLenum source,
69 const void* userParam)
71 const char* contextName =
static_cast<const char*
>(userParam);
75 case GL_DEBUG_SEVERITY_HIGH:
76 category = Cogs::Logging::Category::Error;
78 case GL_DEBUG_SEVERITY_MEDIUM:
79 category = Cogs::Logging::Category::Warning;
81 case GL_DEBUG_SEVERITY_LOW:
82 category = Cogs::Logging::Category::Debug;
84 case GL_DEBUG_SEVERITY_NOTIFICATION:
85 category = Cogs::Logging::Category::Trace;
93 case GL_DEBUG_TYPE_ERROR: [[fallthrough]];
94 case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: [[fallthrough]];
95 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: [[fallthrough]];
96 case GL_DEBUG_TYPE_PORTABILITY: [[fallthrough]];
97 case GL_DEBUG_TYPE_PERFORMANCE:
99 case GL_DEBUG_TYPE_MARKER: [[fallthrough]];
100 case GL_DEBUG_TYPE_PUSH_GROUP: [[fallthrough]];
101 case GL_DEBUG_TYPE_POP_GROUP:
103 case GL_DEBUG_TYPE_OTHER:
104 if (strstr(message,
"object (0)")) {
151bool Cogs::setUpGLDebugging(
const char* contextName, GLContextBase::Platform platform)
161 glGetIntegerv(GL_MAJOR_VERSION, &major);
162 glGetIntegerv(GL_MINOR_VERSION, &minor);
163 if (4 < major || (major == 4 && 3 <= minor)) {
165 glDebugMessageCallback(debugCallback, contextName);
166 glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0,
true);
167 glEnable(GL_DEBUG_OUTPUT);
168 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
169 glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION,
172 GL_DEBUG_SEVERITY_LOW, -1,
"Initialized OpenGL debug output.");
176 else if(3 <= major) {
177 int numExtensions = 0;
178 glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
179 for (
int i = 0; i < numExtensions; i++) {
188 case GLContextBase::Platform::GL:
189 glDebugMessageCallback(debugCallback, contextName);
190 glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0,
true);
191 glEnable(GL_DEBUG_OUTPUT);
192 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
193 glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION,
196 GL_DEBUG_SEVERITY_LOW, -1,
"Initialized OpenGL debug output.");
200#if defined(COGS_OPENGLES30)
201 case GLContextBase::Platform::ES3:
202 glDebugMessageCallbackKHR(debugCallback, contextName);
203 glDebugMessageControlKHR(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0,
true);
204 glEnable(GL_DEBUG_OUTPUT_KHR);
205 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR);
206 glDebugMessageInsertKHR(GL_DEBUG_SOURCE_APPLICATION_KHR,
207 GL_DEBUG_TYPE_OTHER_KHR,
209 GL_DEBUG_SEVERITY_LOW_KHR, -1,
"Initialized OpenGL debug output.");
223 LOG_INFO(logger,
"No supported debug extension available");
230#include "Foundation/Platform/X11Module.h"
233#if defined(__linux__)
235 X11Module::instance().XSync(settings.windowData->display,
false);
Log implementation class.
void logFileLine(const char *file, const int line, const Category category, uint32_t errorNumber, _Printf_format_string_ const char *fmt,...) const VALIDATE_ARGS(6)
Log a formatted message with file/line information.
Provides a weakly referenced view over the contents of a string.
constexpr Log getLogger(const char(&name)[LEN]) noexcept
@ Unspecified
The default error number for legacy logger usage.
Category
Logging categories used to filter log messages.
constexpr size_t hash() noexcept
Simple getter function that returns the initial value for fnv1a hashing.