aboutsummaryrefslogtreecommitdiff
path: root/src/rendering/vertex_buffer.cpp
diff options
context:
space:
mode:
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);
+ }
};