#include
#include // required for forward declaratio>
#include // required for forward declaratio>
#include
#include // required for forward declaratio>
#include // required for forward declaratio>
namespace lt {
glGraphicsContext::glGraphicsContext()
{
m_graphics_api = GraphicsAPI::OpenGL;
set_debug_message_callback();
}
void glGraphicsContext::log_debug_data()
{
log_inf("________________________________________");
log_inf("GraphicsContext::");
log_inf(" API : OpenGL");
log_inf("________________________________________");
}
void glGraphicsContext::set_debug_message_callback()
{
// determine log level
// #todo: set filters from config.h
#if defined(LIGHT_DEBUG)
glEnable(GL_DEBUG_OUTPUT);
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
GLuint ids[] = { 131185 };
glDebugMessageControl(
GL_DEBUG_SOURCE_API,
GL_DEBUG_TYPE_OTHER,
GL_DONT_CARE,
_countof(ids),
ids,
GL_FALSE
);
#elif defined(LIGHT_RELEASE)
glEnable(GL_DEBUG_OUTPUT);
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_FALSE);
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE);
glDebugMessageControl(
GL_DONT_CARE,
GL_DONT_CARE,
GL_DEBUG_SEVERITY_MEDIUM,
0,
nullptr,
GL_TRUE
);
#else // LIGHT_DIST
return;
#endif
/* setup message callback */
glDebugMessageCallback(
[](unsigned int source,
unsigned int type,
unsigned int id,
unsigned int severity,
int /*length*/,
const char *message,
const void * /*userParam*/) {
switch (severity)
{
case GL_DEBUG_SEVERITY_HIGH:
// TODO(Light): Add gl exception class
throw std::runtime_error { "gl exception" };
return;
case GL_DEBUG_SEVERITY_MEDIUM:
case GL_DEBUG_SEVERITY_LOW:
log_wrn(
"glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}",
// TODO(Light): Stringify!
severity,
source,
type,
id
);
log_wrn(" {}", message);
return;
case GL_DEBUG_SEVERITY_NOTIFICATION:
log_wrn(
"Severity: {} :: Source: {} :: Type: {} :: ID: {}",
// TODO(Light): Stringify!
severity,
source,
type,
id
);
log_trc(" {}", message);
return;
}
},
nullptr
);
}
} // namespace lt