aboutsummaryrefslogtreecommitdiff
path: root/src/rendering/index_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/index_buffer.cpp
parent00bf9a8cce28ab1dbc77ba24428be12391c4a576 (diff)
[feat]: reduce renderer abstraction
Diffstat (limited to 'src/rendering/index_buffer.cpp')
-rw-r--r--src/rendering/index_buffer.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/rendering/index_buffer.cpp b/src/rendering/index_buffer.cpp
index 9603c72..2c933e0 100644
--- a/src/rendering/index_buffer.cpp
+++ b/src/rendering/index_buffer.cpp
@@ -1,21 +1,34 @@
#include "index_buffer.h"
-#include "renderer.h"
-#include "platform/opengl/opengl_index_buffer.h"
-#include "platform/vulkan/vulkan_index_buffer.h"
+#include <glad/glad.h>
-namespace Donut
+namespace Donut
{
+ IndexBuffer::IndexBuffer(const uint32_t* indices, uint32_t count)
+ : m_count(count)
+ {
+ glGenBuffers(1, &m_renderer_id); // glCreateBuffers is 4.5 DSA; unavailable on macOS 4.1
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_renderer_id);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, count * sizeof(uint32_t), indices, GL_STATIC_DRAW);
+ }
+
+ IndexBuffer::~IndexBuffer()
+ {
+ glDeleteBuffers(1, &m_renderer_id);
+ }
+
+ auto IndexBuffer::bind() const -> void
+ {
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_renderer_id);
+ }
+
+ auto IndexBuffer::unbind() const -> void
+ {
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+ }
+
auto IndexBuffer::create(const uint32_t* indices, uint32_t count) -> IndexBuffer*
{
- switch (Renderer::get_api())
- {
- case RendererAPI::API::OpenGL:
- return new OpenGLIndexBuffer(indices, count);
- case RendererAPI::API::Vulkan:
- return new VulkanIndexBuffer((uint32_t*)indices, count);
- default:
- return nullptr;
- }
+ return new IndexBuffer(indices, count);
}
};