aboutsummaryrefslogtreecommitdiff
path: root/src/rendering/vertex_buffer.cpp
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-20 22:20:49 +0200
committerhachem <im@hachem.wtf>2026-08-20 22:20:49 +0200
commit45baf48db974c66cfdc51f26cee191abbbd89a0b (patch)
treeb60c27506f1e1c37b7238161156c83e7e159fc12 /src/rendering/vertex_buffer.cpp
parent00bf9a8cce28ab1dbc77ba24428be12391c4a576 (diff)
[feat]: reduce renderer abstraction
Diffstat (limited to 'src/rendering/vertex_buffer.cpp')
-rw-r--r--src/rendering/vertex_buffer.cpp51
1 files changed, 40 insertions, 11 deletions
diff --git a/src/rendering/vertex_buffer.cpp b/src/rendering/vertex_buffer.cpp
index 354d0cd..1bc471c 100644
--- a/src/rendering/vertex_buffer.cpp
+++ b/src/rendering/vertex_buffer.cpp
@@ -1,21 +1,50 @@
#include "vertex_buffer.h"
-#include "renderer.h"
-#include "platform/opengl/opengl_vertex_buffer.h"
-#include "platform/vulkan/vulkan_vertex_buffer.h"
+#include <glad/glad.h>
namespace Donut
{
- auto VertexBuffer::create(const void* data, uint32_t size) -> VertexBuffer*
+ auto VertexBufferElement::get_size_of_type(uint32_t type) -> uint32_t
{
- switch (Renderer::get_api())
+ switch (type)
{
- case RendererAPI::API::OpenGL:
- return new OpenGLVertexBuffer(data, size);
- case RendererAPI::API::Vulkan:
- return new VulkanVertexBuffer((float*)data, size);
- default:
- return nullptr;
+ case 0x1406: return 4; // GL_FLOAT
+ case 0x1405: return 4; // GL_UNSIGNED_INT
+ case 0x1401: return 1; // GL_UNSIGNED_BYTE
+ default: return 0;
}
}
+
+ VertexBuffer::VertexBuffer(const void* data, uint32_t size)
+ {
+ glGenBuffers(1, &m_renderer_id); // glCreateBuffers is 4.5 DSA; unavailable on macOS 4.1
+ glBindBuffer(GL_ARRAY_BUFFER, m_renderer_id);
+ glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
+ }
+
+ VertexBuffer::~VertexBuffer()
+ {
+ glDeleteBuffers(1, &m_renderer_id);
+ }
+
+ auto VertexBuffer::bind() const -> void
+ {
+ glBindBuffer(GL_ARRAY_BUFFER, m_renderer_id);
+ }
+
+ auto VertexBuffer::unbind() const -> void
+ {
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ }
+
+ auto VertexBuffer::set_data(const void* data, uint32_t size) -> void
+ {
+ glBindBuffer(GL_ARRAY_BUFFER, m_renderer_id);
+ glBufferSubData(GL_ARRAY_BUFFER, 0, size, data);
+ }
+
+ auto VertexBuffer::create(const void* data, uint32_t size) -> VertexBuffer*
+ {
+ return new VertexBuffer(data, size);
+ }
};