Practical Tools for Simple Design
Loading...
Searching...
No Matches
UniformBuffer.inl
1#include "UniformBuffer.hpp"
2
3namespace Core {
4template <typename T>
5UniformBuffer<T>::UniformBuffer(const Program &program, const std::string &name,
6 int binding)
7 : m_Binding(binding) {
8 GLint uniformBlockIndex =
9 glGetUniformBlockIndex(program.GetId(), name.c_str());
10 glUniformBlockBinding(program.GetId(), uniformBlockIndex, binding);
11
12 glGenBuffers(1, &m_BufferId);
13 glBindBuffer(GL_UNIFORM_BUFFER, m_BufferId);
14 glBufferData(GL_UNIFORM_BUFFER, static_cast<GLsizeiptr>(sizeof(T)), nullptr,
15 GL_DYNAMIC_DRAW);
16 glBindBufferBase(GL_UNIFORM_BUFFER, m_Binding, m_BufferId);
17
18 glBindBuffer(GL_UNIFORM_BUFFER, 0);
19}
20
21template <typename T>
22UniformBuffer<T>::UniformBuffer(UniformBuffer &&other) {
23 m_BufferId = other.m_BufferId;
24 other.m_BufferId = 0;
25}
26
27template <typename T>
28UniformBuffer<T>::~UniformBuffer() {
29 glDeleteBuffers(1, &m_BufferId);
30}
31
32template <typename T>
33UniformBuffer<T> &UniformBuffer<T>::operator=(UniformBuffer &&other) {
34 m_BufferId = other.m_BufferId;
35 other.m_BufferId = 0;
36
37 return *this;
38}
39
40template <typename T>
41void UniformBuffer<T>::SetData(int offset, const T &data) {
42 glBindBuffer(GL_UNIFORM_BUFFER, m_BufferId);
43 glBufferSubData(GL_UNIFORM_BUFFER, offset,
44 static_cast<GLsizeiptr>(sizeof(T)), &data);
45 glBindBufferBase(GL_UNIFORM_BUFFER, m_Binding, m_BufferId);
46}
47} // namespace Core
Definition Program.hpp:13
Core functionality of the framework
Definition Context.hpp:10