light/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp

101 lines
3.2 KiB
C++
Raw Normal View History

2021-05-26 18:39:40 +04:30
#include "glGraphicsContext.h"
2021-06-01 11:23:41 +04:30
#include "Events/WindowEvents.h"
2022-03-07 21:57:00 +03:30
#include "Graphics/Blender.h" // required for forward declaration
#include "Graphics/Buffers.h" // required for forward declaration
#include "Graphics/RenderCommand.h" // required for forward declaration
#include "Graphics/Renderer.h" // required for forward declaration
2021-07-29 17:12:13 +04:30
#include "UserInterface/UserInterface.h" // required for forward declaration
2022-03-07 21:57:00 +03:30
#include "Utility/ResourceManager.h" // required for forward declaration
2021-05-31 23:28:29 +04:30
2021-05-26 18:39:40 +04:30
#include <glad/glad.h>
2022-03-07 21:57:00 +03:30
#ifndef STOP_FUCKING_ORDERING_THESE_THE_WRONG_WAY_CLANG_FORMAT____
#include <GLFW/glfw3.h>
#endif
2021-05-26 18:39:40 +04:30
namespace Light {
2022-03-07 21:57:00 +03:30
glGraphicsContext::glGraphicsContext(GLFWwindow* windowHandle)
: m_WindowHandle(windowHandle)
{
// set 'GraphicsAPI'
m_GraphicsAPI = GraphicsAPI::OpenGL;
2021-05-26 18:39:40 +04:30
2022-03-07 21:57:00 +03:30
// make context current
glfwMakeContextCurrent(windowHandle);
2021-05-26 18:39:40 +04:30
2022-03-07 21:57:00 +03:30
// load opengl (glad)
ASSERT(gladLoadGLLoader((GLADloadproc)glfwGetProcAddress), "Failed to initialize opengl (glad)");
2021-06-01 11:23:41 +04:30
2022-03-07 21:57:00 +03:30
SetDebugMessageCallback();
}
2021-05-26 18:39:40 +04:30
2022-03-07 21:57:00 +03:30
void glGraphicsContext::LogDebugData()
{
// #todo: log more information
LOG(info, "________________________________________");
LOG(info, "GraphicsContext::");
LOG(info, " API : OpenGL");
LOG(info, " Version : {}", glGetString(GL_VERSION));
LOG(info, " Renderer: {}", glGetString(GL_RENDERER));
LOG(info, "________________________________________");
}
void glGraphicsContext::SetDebugMessageCallback()
{
// determine log level
// #todo: set filters from config.h
#if defined(LIGHT_DEBUG)
2022-03-07 21:57:00 +03:30
glEnable(GL_DEBUG_OUTPUT);
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
2022-03-07 21:57:00 +03:30
GLuint ids[] = {
131185
};
glDebugMessageControl(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_OTHER, GL_DONT_CARE, _countof(ids), ids, GL_FALSE);
#elif defined(LIGHT_RELEASE)
2022-03-07 21:57:00 +03:30
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);
2021-07-29 17:12:13 +04:30
#else // LIGHT_DIST
2022-03-07 21:57:00 +03:30
return;
2021-05-31 23:28:29 +04:30
#endif
2022-03-07 21:57:00 +03:30
/* 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)
2021-05-31 23:28:29 +04:30
{
2022-03-07 21:57:00 +03:30
case GL_DEBUG_SEVERITY_HIGH:
// throw glException(source, type, id, message);
return;
case GL_DEBUG_SEVERITY_MEDIUM:
case GL_DEBUG_SEVERITY_LOW:
LOG(warn, "glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}",
Stringifier::glDebugMsgSeverity(severity),
Stringifier::glDebugMsgSource(source),
Stringifier::glDebugMsgType(type),
id);
LOG(warn, " {}", message);
return;
case GL_DEBUG_SEVERITY_NOTIFICATION:
LOG(trace, "Severity: {} :: Source: {} :: Type: {} :: ID: {}",
Stringifier::glDebugMsgSeverity(severity),
Stringifier::glDebugMsgSource(source),
Stringifier::glDebugMsgType(type),
id);
LOG(trace, " {}", message);
return;
}
},
nullptr);
2022-03-04 22:40:20 +03:30
}
2022-03-07 21:57:00 +03:30
} // namespace Light