sculpto
gl_buffer.h
Go to the documentation of this file.
1/*!****************************************************************//*!*
2 * \file buffer.h
3 * \brief Opengl buffer class definition module.
4 *
5 * \author Sabitov Kirill
6 * \date 26 June 2022
7 *********************************************************************/
8
9#pragma once
10
11#include "gl.h"
13
14namespace scl
15{
18 {
19 private:
20 mutable u32 BindingPoint {};
21 GLuint Id {};
22 u32 Size {};
23
24 public:
26 render_primitive::handle GetHandle() const override { return Id; }
27
28 /*!*
29 * Constant (uniform) empty buffer constructor.
30 *
31 * \param BindingPoint - shader_props binding point of buffer.
32 * \param Size - buffer data size.
33 */
35
36 /*!*
37 * Constant (uniform) buffer filled with data constructor.
38 *
39 * \param BindingPoint - shader_props binding point of buffer.
40 * \param Data - buffer data pointer.
41 * \param Size - buffer data size.
42 */
43 gl_constant_buffer(const void *Data, u32 Size);
44
46 ~gl_constant_buffer() override;
47
48 /*!*
49 * Bind buffer to current render stage function.
50 *
51 * \param None.
52 * \return None.
53 */
54 void Bind(u32 BindingPoint) const override;
55
56 /*!*
57 * Unbind buffer from current render stage function.
58 *
59 * \param None.
60 * \return None.
61 */
62 void Unbind() const override;
63
64 /*!*
65 * Update buffer data function.
66 *
67 * \param Data - buffer data pointer.
68 * \param Size - buffer data size.
69 * \return None.
70 */
71 void Update(void *Data, u32 Size) override;
72
73 /*!*
74 * Clear buffer from GPU memory function.
75 *
76 * \param None.
77 * \return None.
78 */
79 void Free() override;
80 };
81
84 {
85 private:
86 GLuint Id {};
87 u32 VerticesCount {};
88
89 public:
91 u32 GetCount() const override { return VerticesCount; }
92
93 public:
95 render_primitive::handle GetHandle() const override { return Id; }
96
97 /*!*
98 * Empty vertex buffer constructor.
99 *
100 * \param Count - vertices in buffer count.
101 * \param VertexLayout - layout of vertices in buffer.
102 * \return constant buffer pointer.
103 */
105
106 /*!*
107 * Vertex buffer filled with data constructor.
108 *
109 * \param Vertices - buffer data pointer.
110 * \param Count - vertices in buffer count.
111 * \param VertexLayout - layout of vertices in buffer.
112 */
113 gl_vertex_buffer(const void *Vertices, u32 Count, const vertex_layout &VertexLayout);
114
117
118 /*!*
119 * Bind buffer to current render stage function.
120 *
121 * \param None.
122 * \return None.
123 */
124 void Bind() const override;
125
126 /*!*
127 * Unbind buffer from current render stage function.
128 *
129 * \param None.
130 * \return None.
131 */
132 void Unbind() const override;
133
134 /*!*
135 * Update buffer data function.
136 *
137 * \param Vertices - verices array.
138 * \param Count - length of vertices array.
139 * \return None.
140 */
141 void Update(const void *Vertices, u32 Count) override;
142
143 /*!*
144 * Clear buffer from GPU memory function.
145 *
146 * \param None.
147 * \return None.
148 */
149 void Free() override;
150 };
151
154 {
155 private:
156 GLuint Id {};
157 u32 IndicesCount {};
158
159 public:
161 u32 GetCount() const override { return IndicesCount; };
162
164 render_primitive::handle GetHandle() const override { return Id; }
165
166 public:
167 /*!*
168 * Create API specific vertex buffer by vertices count and data.
169 *
170 * \param Indices - indices array.
171 * \param Count - indices in buffer count.
172 */
173 gl_index_buffer(u32 *Indices, u32 Count);
174
176 ~gl_index_buffer() override;
177
178 /*!*
179 * Bind buffer to current render stage function.
180 *
181 * \param None.
182 * \return None.
183 */
184 void Bind() const override;
185
186 /*!*
187 * Unbind buffer from current render stage function.
188 *
189 * \param None.
190 * \return None.
191 */
192 void Unbind() const override;
193
194 /*!*
195 * Update buffer function function.
196 *
197 * \param Indices - array of indices.
198 * \param Count
199 */
200 void Update(u32 *Indices, u32 Count) override;
201
202 /*!*
203 * Clear buffer from GPU memory function.
204 *
205 * \param None.
206 * \return None.
207 */
208 void Free() override;
209 };
210}
Buffer interfaces implementation module.
void Update(void *Data, u32 Size) override
Definition: gl_buffer.cpp:53
gl_constant_buffer(u32 Size)
Definition: gl_buffer.cpp:12
render_primitive::handle GetHandle() const override
Definition: gl_buffer.h:26
void Free() override
Definition: gl_buffer.cpp:65
void Unbind() const override
Definition: gl_buffer.cpp:47
~gl_constant_buffer() override
Definition: gl_buffer.cpp:36
void Bind(u32 BindingPoint) const override
Definition: gl_buffer.cpp:41
u32 GetCount() const override
Definition: gl_buffer.h:161
void Free() override
Definition: gl_buffer.cpp:178
~gl_index_buffer() override
Definition: gl_buffer.cpp:151
void Unbind() const override
Definition: gl_buffer.cpp:161
void Update(u32 *Indices, u32 Count) override
Definition: gl_buffer.cpp:166
render_primitive::handle GetHandle() const override
Definition: gl_buffer.h:164
void Bind() const override
Definition: gl_buffer.cpp:156
gl_index_buffer(u32 *Indices, u32 Count)
Definition: gl_buffer.cpp:140
void Update(const void *Vertices, u32 Count) override
Definition: gl_buffer.cpp:117
u32 GetCount() const override
Definition: gl_buffer.h:91
void Bind() const override
Definition: gl_buffer.cpp:107
render_primitive::handle GetHandle() const override
Definition: gl_buffer.h:95
gl_vertex_buffer(u32 Count, const vertex_layout &VertexLayout)
Definition: gl_buffer.cpp:76
void Free() override
Definition: gl_buffer.cpp:129
void Unbind() const override
Definition: gl_buffer.cpp:112
vertex_layout VertexLayout
Definition: buffer.h:103
Definition: base.h:33
uint32_t u32
Definition: math_common.h:21