galaxy 1.0.0
Real-Time C++23 Game Programming Framework. Built on data-driven design principles and agile software engineering.
Loading...
Searching...
No Matches
ShaderBuffer.hpp
Go to the documentation of this file.
1
7
8#ifndef GALAXY_GRAPHICS_GL_SHADERBUFFER_HPP_
9#define GALAXY_GRAPHICS_GL_SHADERBUFFER_HPP_
10
11#include <glad/glad.h>
12
14
15namespace galaxy
16{
20 class ShaderBuffer final
21 {
22 public:
29
35 ShaderBuffer(const GLBufferBinding index);
36
40 ShaderBuffer(ShaderBuffer&&) noexcept;
41
46
51
57 void set_index(const GLBufferBinding index);
58
67 template<typename Object>
68 void buffer(const unsigned int count, Object* data);
69
79 template<typename Object>
80 void sub_buffer(const unsigned int offset, const unsigned int count, Object* data);
81
85 void bind() const;
86
90 void unbind() const;
91
95 void clear() const;
96
100 void destroy();
101
107 [[nodiscard]]
108 unsigned int id() const noexcept;
109
110 private:
114 ShaderBuffer(const ShaderBuffer&) = delete;
115
120
121 private:
125 unsigned int m_id;
126
131 };
132
133 template<typename Object>
134 inline void ShaderBuffer::buffer(const unsigned int count, Object* data)
135 {
136 clear();
137
138 constexpr const auto size = sizeof(Object);
139 glNamedBufferData(m_id, count * size, static_cast<void*>(data), GL_DYNAMIC_DRAW);
140 }
141
142 template<typename Object>
143 inline void ShaderBuffer::sub_buffer(const unsigned int offset, const unsigned int count, Object* data)
144 {
145 constexpr const auto size = sizeof(Object);
146 glNamedBufferSubData(m_id, offset, count * size, static_cast<void*>(data));
147 }
148} // namespace galaxy
149
150#endif
OpenGL Shader storage buffer.
ShaderBuffer(const ShaderBuffer &)=delete
Copy constructor.
void bind() const
Bind buffer.
ShaderBuffer()
Constructor.
void clear() const
Clears data from buffer.
void unbind() const
Unbind buffer.
void sub_buffer(const unsigned int offset, const unsigned int count, Object *data)
Sub buffer data.
~ShaderBuffer()
Destructor.
unsigned int id() const noexcept
Get OpenGL handle.
ShaderBuffer & operator=(ShaderBuffer &&) noexcept
Move assignment operator.
void buffer(const unsigned int count, Object *data)
Buffer data.
int m_index
Index binding of SSBO in vertex shader.
void set_index(const GLBufferBinding index)
Set vertex shader binding point.
unsigned int m_id
OpenGL handle.
void destroy()
Destroy shader.
ShaderBuffer & operator=(const ShaderBuffer &)=delete
Copy assignment operator.
Animated.cpp galaxy.
Definition Animated.cpp:16
GLBufferBinding
Binding point for GPU buffers.
Definition Enums.hpp:49