CoriEngine
Loading...
Searching...
No Matches
GL_Buffers.cpp
Go to the documentation of this file.
1#include "GL_Buffers.hpp"
2#include <glad/gl.h>
3#include <magic_enum/magic_enum.hpp>
4
5namespace Cori {
6 namespace Graphics {
7 namespace Internal {
10 glCreateBuffers(1, &m_ID);
11 }
12
13
15 glBindBuffer(GL_ARRAY_BUFFER, m_ID);
16 glDeleteBuffers(1, &m_ID);
17 }
18
19 void OpenGLVertexBuffer::Init(const float* vertices, uint32_t size, const DRAW_TYPE drawType) {
21 glCreateBuffers(1, &m_ID);
22 glBindBuffer(GL_ARRAY_BUFFER, m_ID);
23 switch (drawType)
24 {
26 glBufferData(GL_ARRAY_BUFFER, static_cast<GLsizeiptr>(size), vertices, GL_DYNAMIC_DRAW);
27 break;
29 glBufferData(GL_ARRAY_BUFFER, static_cast<GLsizeiptr>(size), vertices, GL_STATIC_DRAW);
30 break;
31 default:
33 break;
34 }
35
36 CORI_CORE_TRACE_TAGGED({ Logger::Tags::Graphics::Self, Logger::Tags::Graphics::OpenGL, Logger::Tags::Graphics::VertexBuffer }, "(GL_RuntimeID: {}): VBO with size {}, and type {}, was created successfully", m_ID, size, drawType == DRAW_TYPE::DYNAMIC ? "DYNAMIC_DRAW" : drawType == DRAW_TYPE::STATIC ? "STATIC_DRAW" : "ERROR");
37
38#ifdef DEBUG_BUILD
39 {
40 std::string layoutText;
41
42 uint32_t index = 0;
43 for (const auto& element : m_Layout) {
44 std::string element_layout = CORI_SECOND_LINE_SPACING + "Location: '" + std::to_string(index) +
45 "' | Type: '" + static_cast<std::string>(magic_enum::enum_name(element.m_Type)) +
46 "' | Name: '" + element.m_Name + "'" +
47 "' | Divisor: '" + std::to_string(element.m_Divisor) + "'" +
48 "' | Normalized: '" + Logger::BoolAlpha(element.m_Normalized) + "'";
49
50 layoutText.append(element_layout);
51 if (element != m_Layout.back()) { // NOLINT
52 layoutText.append("\n"); // NOLINT
53 }
54
55 if (element.m_Type == ShaderDataType::Mat3) {
56 index+=3;
57 } else if (element.m_Type == ShaderDataType::Mat4) {
58 index+=4;
59 } else {
60 index++;
61 }
62
63 }
64
65 CORI_CORE_TRACE_TAGGED({ Logger::Tags::Graphics::Self, Logger::Tags::Graphics::OpenGL, Logger::Tags::Graphics::VertexBuffer }, "(GL_RuntimeID: {}): VBO has the following Attribute Layout: \n{}", m_ID, layoutText);
66 }
67#endif
68 }
69
72 glBindBuffer(GL_ARRAY_BUFFER, m_ID);
73 }
74
77 glBindBuffer(GL_ARRAY_BUFFER, 0);
78 }
79
80 void OpenGLVertexBuffer::SetData(const void* data, const uint32_t size) const {
82 glBufferSubData(GL_ARRAY_BUFFER, 0, size, data);
83 }
84
86 {
87 m_Layout = layout;
88 }
89
90 OpenGLIndexBuffer::OpenGLIndexBuffer(const uint32_t* indices, uint32_t count) : m_Count(count) {
92 glCreateBuffers(1, &m_ID);
93 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ID);
94 glBufferData(GL_ELEMENT_ARRAY_BUFFER, static_cast<GLsizeiptr>(count * sizeof(uint32_t)), indices, GL_STATIC_DRAW);
95
96 CORI_CORE_TRACE_TAGGED({ Logger::Tags::Graphics::Self, Logger::Tags::Graphics::OpenGL, Logger::Tags::Graphics::IndexBuffer }, "(GL_RuntimeID: {}): IBO with size {}, and type STATIC_DRAW, was created successfully", m_ID, count);
97 }
98
101 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ID);
102 glDeleteBuffers(1, &m_ID);
103 }
104
107 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ID);
108 }
109
112 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
113 }
114
116 return m_Count;
117 }
118 }
119 }
120}
121
const std::string CORI_SECOND_LINE_SPACING
Definition Logger.hpp:1001
#define CORI_CORE_TRACE_TAGGED(...)
Definition Logger.hpp:1025
#define CORI_CORE_WARN_TAGGED(...)
Definition Logger.hpp:1038
#define CORI_PROFILE_FUNCTION()
Definition Profiler.hpp:9
OpenGLIndexBuffer(const uint32_t *indices, uint32_t count)
void SetData(const void *data, uint32_t size) const override
void SetLayout(const VBLayout &layout) override
void Init(const float *vertices, uint32_t size, const DRAW_TYPE drawType) override
static std::string BoolAlpha(const bool b)
Definition Logger.hpp:181
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 IndexBuffer[]
Definition Logger.hpp:58
static constexpr char VertexBuffer[]
Definition Logger.hpp:57
static constexpr char Self[]
Definition Logger.hpp:47