aboutsummaryrefslogtreecommitdiff
path: root/src/rendering/uniform_buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rendering/uniform_buffer.cpp')
-rw-r--r--src/rendering/uniform_buffer.cpp41
1 files changed, 27 insertions, 14 deletions
diff --git a/src/rendering/uniform_buffer.cpp b/src/rendering/uniform_buffer.cpp
index c344aec..c4118b8 100644
--- a/src/rendering/uniform_buffer.cpp
+++ b/src/rendering/uniform_buffer.cpp
@@ -1,23 +1,36 @@
#include "uniform_buffer.h"
-#include "renderer.h"
-#include "platform/opengl/opengl_uniform_buffer.h"
-#include "platform/vulkan/vulkan_uniform_buffer.h"
+#include <glad/glad.h>
namespace Donut
{
+ UniformBuffer::UniformBuffer(uint32_t size, uint32_t binding)
+ : m_size(size), m_binding(binding)
+ {
+ glGenBuffers(1, &m_renderer_id);
+ glBindBuffer(GL_UNIFORM_BUFFER, m_renderer_id);
+ glBufferData(GL_UNIFORM_BUFFER, size, nullptr, GL_DYNAMIC_DRAW);
+ glBindBufferBase(GL_UNIFORM_BUFFER, binding, m_renderer_id);
+ }
+
+ UniformBuffer::~UniformBuffer()
+ {
+ glDeleteBuffers(1, &m_renderer_id);
+ }
+
+ auto UniformBuffer::set_data(const void* data, uint32_t size, uint32_t offset) -> void
+ {
+ glBindBuffer(GL_UNIFORM_BUFFER, m_renderer_id);
+ glBufferSubData(GL_UNIFORM_BUFFER, offset, size, data);
+ }
+
+ auto UniformBuffer::bind(uint32_t binding) -> void
+ {
+ glBindBufferBase(GL_UNIFORM_BUFFER, binding, m_renderer_id);
+ }
+
auto UniformBuffer::create(uint32_t size, uint32_t binding) -> Ref<UniformBuffer>
{
- switch (Renderer::get_api())
- {
- case RendererAPI::API::OpenGL:
- return create_ref<OpenGLUniformBuffer>(size, binding);
- case RendererAPI::API::Vulkan:
- return create_ref<VulkanUniformBuffer>(size, binding);
- case RendererAPI::API::None:
- return nullptr;
- default:
- return nullptr;
- }
+ return create_ref<UniformBuffer>(size, binding);
}
};