Elevate Engine 1
Loading...
Searching...
No Matches
OpenGLBuffer.cpp
Go to the documentation of this file.
1#include "eepch.h"
2#include "OpenGLBuffer.h"
4
6#include <GLFW/glfw3.h>
8
11
12namespace Elevate
13{
14 inline void CreateBuffers(int32_t n, uint32_t* ids)
15 {
16#ifdef EE_SUPPORTS_DSA
17 glCreateBuffers(n, ids);
18#else
19 glGenBuffers(n, ids);
20#endif
21 }
22
23 inline void NamedBufferData(uint32_t buffer, uint32_t target, size_t size, const void* data, uint32_t usage) {
24#ifdef EE_SUPPORTS_DSA
25 glNamedBufferData(buffer, size, data, usage);
26#else
27 glBindBuffer(target, buffer);
28 glBufferData(target, size, data, usage);
29#endif
30 }
31
33 // VertexBuffer ///////////////////////////////////////////////////////////////////////
35 OpenGLVertexBuffer::OpenGLVertexBuffer(const void* vertices, uint32_t size)
36 : VertexBuffer(vertices, size)
37 {
38 GLCheck(CreateBuffers(1, &m_rendererID));
39 SetData(vertices, size);
40 }
41
43 {
44 // Check if the OpenGl context is still active before performing actions
46 {
47 GLCheck(glDeleteBuffers(1, &m_rendererID));
48 }
49 }
50
52 {
53 GLCheck(glBindBuffer(GL_ARRAY_BUFFER, m_rendererID));
54 }
55
57 {
58 GLCheck(glBindBuffer(GL_ARRAY_BUFFER, 0));
59 }
60
61 void OpenGLVertexBuffer::SetData(const void* newData, uint32_t size)
62 {
63 if (m_rendererID != 0)
64 {
65 data = newData;
66 SetSize(size);
67
68 if (newData)
69 {
70 GLCheck(NamedBufferData(m_rendererID, GL_ARRAY_BUFFER, size, data, GL_DYNAMIC_DRAW));
71 }
72 }
73 else
74 {
75 EE_CORE_ERROR("ERROR : (OpenGLVertexBuffer::SetData) Buffer is not initialized yet.");
76 }
77 }
78
79 void OpenGLVertexBuffer::Resize(uint32_t newSize)
80 {
81 if (m_rendererID != 0 && data)
82 {
83 GLCheck(NamedBufferData(m_rendererID, GL_ARRAY_BUFFER, newSize, data, GL_DYNAMIC_DRAW));
84 SetSize(newSize);
85 }
86 else
87 {
88 EE_CORE_ERROR("ERROR : (OpenGLVertexBuffer::Resize) You must initialize the VertexBuffer before resizing it.");
89 }
90 }
91
93 // IndexBuffer ////////////////////////////////////////////////////////////////////////
95 OpenGLIndexBuffer::OpenGLIndexBuffer(const void* indices, uint32_t count)
96 : m_count(count)
97 {
98 GLCheck(CreateBuffers(1, &m_rendererID));
99 GLCheck(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_rendererID));
100 GLCheck(glBufferData(GL_ELEMENT_ARRAY_BUFFER, count * sizeof(uint32_t), indices, GL_STATIC_DRAW));
101 }
102
104 {
105 // Check if the OpenGl context is still active before performing actions
107 {
108 GLCheck(glDeleteBuffers(1, &m_rendererID));
109 }
110 }
111
113 {
114 GLCheck(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_rendererID));
115 }
116
118 {
119 GLCheck(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
120 }
121}
#define GLCheck(x)
Definition GLDebug.h:11
virtual void Unbind() const
virtual void Bind() const
OpenGLIndexBuffer(const void *indices, uint32_t count)
virtual void SetData(const void *newData, uint32_t size) override
OpenGLVertexBuffer(const void *vertices, uint32_t size)
virtual void Unbind() const override
virtual void Resize(uint32_t size) override
virtual void Bind() const override
void SetSize(uint32_t newSize)
Definition Buffer.h:95
void CreateBuffers(int32_t n, uint32_t *ids)
void NamedBufferData(uint32_t buffer, uint32_t target, size_t size, const void *data, uint32_t usage)