2025-07-05 13:28:41 +03:30
|
|
|
#include <glad/gl.h>
|
2025-07-10 13:29:03 +03:30
|
|
|
#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
|
|
|
|
|
|
|
|
namespace Light {
|
|
|
|
|
2025-07-05 14:23:01 +03:30
|
|
|
glGraphicsContext::glGraphicsContext(GLFWwindow *windowHandle): m_window_handle(windowHandle)
|
2025-07-05 13:28:41 +03:30
|
|
|
{
|
2025-07-05 14:23:01 +03:30
|
|
|
m_graphics_api = GraphicsAPI::OpenGL;
|
2025-07-05 13:28:41 +03:30
|
|
|
glfwMakeContextCurrent(windowHandle);
|
2025-07-05 15:36:53 +03:30
|
|
|
lt_assert(gladLoadGL(glfwGetProcAddress), "Failed to initialize opengl (glad)");
|
2025-07-05 13:28:41 +03:30
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
set_debug_message_callback();
|
2025-07-05 13:28:41 +03:30
|
|
|
}
|
|
|
|
|
2025-07-05 15:36:53 +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
|
|
|
}
|
|
|
|
|
2025-07-05 15:36:53 +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,
|
2025-07-10 13:29:03 +03:30
|
|
|
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: {}",
|
2025-07-10 13:29:03 +03:30
|
|
|
// 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: {}",
|
2025-07-10 13:29:03 +03:30
|
|
|
// 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
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace Light
|