CoriEngine
Loading...
Searching...
No Matches
GL_GraphicsAPI.cpp
Go to the documentation of this file.
1#include "GL_GraphicsAPI.hpp"
2#include <glad/gl.h>
3
4namespace {
5 void GLAPIENTRY GLDebugMessageCallback(GLenum source, GLenum type, GLuint id,
6 GLenum severity, [[maybe_unused]] GLsizei length,
7 const GLchar* message, [[maybe_unused]] const void* param) {
8 const char* source_, * type_, * severity_;
9
10 switch (source)
11 {
12 case GL_DEBUG_SOURCE_API: source_ = "API"; break;
13 case GL_DEBUG_SOURCE_WINDOW_SYSTEM: source_ = "WINDOW_SYSTEM"; break;
14 case GL_DEBUG_SOURCE_SHADER_COMPILER: source_ = "SHADER_COMPILER"; break;
15 case GL_DEBUG_SOURCE_THIRD_PARTY: source_ = "THIRD_PARTY"; break;
16 case GL_DEBUG_SOURCE_APPLICATION: source_ = "APPLICATION"; break;
17 case GL_DEBUG_SOURCE_OTHER: source_ = "OTHER"; break;
18 default: source_ = "<SOURCE>"; break;
19 }
20
21 switch (type)
22 {
23 case GL_DEBUG_TYPE_ERROR: type_ = "ERROR"; break;
24 case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: type_ = "DEPRECATED_BEHAVIOR"; break;
25 case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: type_ = "UDEFINED_BEHAVIOR"; break;
26 case GL_DEBUG_TYPE_PORTABILITY: type_ = "PORTABILITY"; break;
27 case GL_DEBUG_TYPE_PERFORMANCE: type_ = "PERFORMANCE"; break;
28 case GL_DEBUG_TYPE_OTHER: type_ = "OTHER"; break;
29 case GL_DEBUG_TYPE_MARKER: type_ = "MARKER"; break;
30 default: type_ = "<TYPE>"; break;
31 }
32
33 switch (severity)
34 {
35 case GL_DEBUG_SEVERITY_HIGH: severity_ = "HIGH"; break;
36 case GL_DEBUG_SEVERITY_MEDIUM: severity_ = "MEDIUM"; break;
37 case GL_DEBUG_SEVERITY_LOW: severity_ = "LOW"; break;
38 case GL_DEBUG_SEVERITY_NOTIFICATION: severity_ = "NOTIFICATION"; break;
39 default: severity_ = "<SEVERITY>"; break;
40 }
41
42
43 std::ostringstream stream;
44 stream << "| Id: " << id << " | Severity: " << severity_ << " | Type: " << type_ << " | Source: (" << source_ << ") | Message: " << message << " |" << std::endl;
45 std::string output = stream.str();
46
47 std::string dashes(output.size() - 3, '-');
48
49 switch (severity) {
50 case GL_DEBUG_SEVERITY_HIGH:
51 CORI_CORE_ERROR("{}|{}|", output, dashes);
52 break;
53 case GL_DEBUG_SEVERITY_MEDIUM:
54 CORI_CORE_WARN("{}|{}|", output, dashes);
55 break;
56 case GL_DEBUG_SEVERITY_LOW:
57 CORI_CORE_INFO("{}|{}|", output, dashes);
58 break;
59 case GL_DEBUG_SEVERITY_NOTIFICATION:
60 CORI_CORE_TRACE("{}|{}|", output, dashes);
61 break;
62 default:
63 break;
64 }
65 }
66}
67
68namespace Cori {
69 namespace Graphics {
70 namespace Internal {
72
73#ifdef DEBUG_BUILD
74 glEnable(GL_DEBUG_OUTPUT);
75 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
76 glDebugMessageCallback(GLDebugMessageCallback, nullptr);
77 glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
78#endif
79 glEnable(GL_BLEND);
80 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
81 //glEnable(GL_CULL_FACE);
82 //glCullFace(GL_BACK);
83 //glFrontFace(GL_CCW);
84 glEnable(GL_DEPTH_TEST);
85 glDepthFunc(GL_LESS);
86 }
87
88 void OpenGLGraphicsAPI::SetViewport(const int32_t x, const int32_t y, const int32_t width, const int32_t height) {
89 glViewport(x, y, width, height);
90 CORI_CORE_TRACE_TAGGED({ Logger::Tags::Graphics::Self, Logger::Tags::Graphics::OpenGL }, "Viewport was set size: x={}, y={}, width={}, height={}", x, y, width, height);
91 }
92
93 void OpenGLGraphicsAPI::SetClearColor(const glm::vec4& color) {
94 glClearColor(color.r, color.g, color.b, color.a);
95 }
96
98 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
99 }
100
101 void OpenGLGraphicsAPI::DrawElementsTriangles(const uint32_t elementCount) {
102 glDrawElements(GL_TRIANGLES, static_cast<GLsizei>(elementCount), GL_UNSIGNED_INT, nullptr);
103 }
104
105 void OpenGLGraphicsAPI::DrawElementsInstancedTriangles(const uint32_t instanceCount) {
106 glDrawElementsInstanced(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr, instanceCount);
107 }
108
110 glEnable(GL_DEPTH_TEST);
111 glDepthFunc(GL_LESS);
112 //CORI_CORE_TRACE_TAGGED({ Logger::Tags::Graphics::Self, Logger::Tags::Graphics::OpenGL }, "Depth test was enabled");
113 }
114
116 glDisable(GL_DEPTH_TEST);
117 //CORI_CORE_TRACE_TAGGED({ Logger::Tags::Graphics::Self, Logger::Tags::Graphics::OpenGL }, "Depth test was disabled");
118 }
119
121 glEnable(GL_BLEND);
122 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
123 //CORI_CORE_TRACE_TAGGED({ Logger::Tags::Graphics::Self, Logger::Tags::Graphics::OpenGL }, "Blending was enabled");
124 }
125
127 glDisable(GL_BLEND);
128 //CORI_CORE_TRACE_TAGGED({ Logger::Tags::Graphics::Self, Logger::Tags::Graphics::OpenGL }, "Blending was disabled");
129 }
130
131 void OpenGLGraphicsAPI::SetDepthMask(const bool mode) {
132 glDepthMask(mode);
133 }
134
138 }
139 }
140}
#define CORI_CORE_ERROR(...)
Definition Logger.hpp:1035
#define CORI_CORE_WARN(...)
Definition Logger.hpp:1034
#define CORI_CORE_INFO(...)
Definition Logger.hpp:1023
#define CORI_CORE_TRACE(...)
Definition Logger.hpp:1021
#define CORI_CORE_TRACE_TAGGED(...)
Definition Logger.hpp:1025
void SetDepthMask(const bool mode) override
void SetClearColor(const glm::vec4 &color) override
void DrawElementsInstancedTriangles(const uint32_t instanceCount) override
void DrawElementsTriangles(const uint32_t elementCount) override
void SetViewport(const int32_t x, const int32_t y, const int32_t width, const int32_t height) override
Almost everything connected to graphics is in this namespace.
Definition Window.hpp:7
Global engine namespace.
static constexpr char OpenGL[]
Definition Logger.hpp:49
static constexpr char Self[]
Definition Logger.hpp:47