diff options
| author | hachem <im@hachem.wtf> | 2026-08-20 22:20:49 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-20 22:20:49 +0200 |
| commit | 45baf48db974c66cfdc51f26cee191abbbd89a0b (patch) | |
| tree | b60c27506f1e1c37b7238161156c83e7e159fc12 /src/rendering/vertex_buffer.cpp | |
| parent | 00bf9a8cce28ab1dbc77ba24428be12391c4a576 (diff) | |
[feat]: reduce renderer abstraction
Diffstat (limited to 'src/rendering/vertex_buffer.cpp')
| -rw-r--r-- | src/rendering/vertex_buffer.cpp | 51 |
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); + } }; |
