light/modules/renderer/src/gl/graphics_context.cpp

111 lines
2.9 KiB
C++
Raw Normal View History

2025-07-05 13:28:41 +03:30
#include <glad/gl.h>
#include <input/events/window.hpp>
#include <renderer/blender.hpp> // required for forward declaratio>
#include <renderer/buffers.hpp> // required for forward declaratio>
#include <renderer/gl/graphics_context.hpp>
#include <renderer/render_command.hpp> // required for forward declaratio>
#include <renderer/renderer.hpp> // required for forward declaratio>
2025-07-05 13:28:41 +03:30
#ifndef STOP_FUCKING_ORDERING_THESE_THE_WRONG_WAY_CLANG_FORMAT____
#include <GLFW/glfw3.h>
#endif
2025-07-11 00:05:48 +03:30
namespace lt {
2025-07-05 13:28:41 +03:30
glGraphicsContext::glGraphicsContext(GLFWwindow *windowHandle): m_window_handle(windowHandle)
2025-07-05 13:28:41 +03:30
{
m_graphics_api = GraphicsAPI::OpenGL;
2025-07-05 13:28:41 +03:30
glfwMakeContextCurrent(windowHandle);
lt_assert(gladLoadGL(glfwGetProcAddress), "Failed to initialize opengl (glad)");
2025-07-05 13:28:41 +03:30
set_debug_message_callback();
2025-07-05 13:28:41 +03:30
}
void glGraphicsContext::log_debug_data()
2025-07-05 13:28:41 +03:30
{
2025-07-06 16:30:38 +03:30
log_inf("________________________________________");
log_inf("GraphicsContext::");
log_inf(" API : OpenGL");
log_inf("________________________________________");
2025-07-05 13:28:41 +03:30
}
void glGraphicsContext::set_debug_message_callback()
2025-07-05 13:28:41 +03:30
{
// determine log level
2025-07-06 14:09:58 +03:30
// #todo: set filters from config.h
2025-07-05 13:28:41 +03:30
#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*/,
2025-07-05 13:28:41 +03:30
const char *message,
2025-07-06 16:52:50 +03:30
const void * /*userParam*/) {
2025-07-05 13:28:41 +03:30
switch (severity)
{
case GL_DEBUG_SEVERITY_HIGH:
// throw glException(source, type, id, message);
return;
case GL_DEBUG_SEVERITY_MEDIUM:
case GL_DEBUG_SEVERITY_LOW:
2025-07-06 16:30:38 +03:30
log_wrn(
2025-07-05 13:28:41 +03:30
"glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}",
// TODO(Light): Stringify!
severity,
source,
type,
2025-07-06 16:30:38 +03:30
id
);
log_wrn(" {}", message);
2025-07-05 13:28:41 +03:30
return;
case GL_DEBUG_SEVERITY_NOTIFICATION:
2025-07-06 16:30:38 +03:30
log_wrn(
2025-07-05 13:28:41 +03:30
"Severity: {} :: Source: {} :: Type: {} :: ID: {}",
// TODO(Light): Stringify!
severity,
source,
type,
2025-07-06 16:30:38 +03:30
id
);
log_trc(" {}", message);
2025-07-05 13:28:41 +03:30
return;
}
},
nullptr
);
}
2025-07-11 00:05:48 +03:30
} // namespace lt