From 50cdd344a3ed87c75a67739e2ffd34762e9b0895 Mon Sep 17 00:00:00 2001 From: hachem Date: Tue, 12 Aug 2025 18:12:37 +0200 Subject: feat: start of a basic rendering backend --- src/platform/opengl/opengl_vertex_array.cpp | 55 +++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/platform/opengl/opengl_vertex_array.cpp (limited to 'src/platform/opengl/opengl_vertex_array.cpp') diff --git a/src/platform/opengl/opengl_vertex_array.cpp b/src/platform/opengl/opengl_vertex_array.cpp new file mode 100644 index 0000000..14d4e63 --- /dev/null +++ b/src/platform/opengl/opengl_vertex_array.cpp @@ -0,0 +1,55 @@ +#include +#include "opengl_vertex_array.h" +#include "rendering/vertex_buffer.h" +#include "rendering/index_buffer.h" + +namespace Donut +{ + OpenGLVertexArray::OpenGLVertexArray() + { + glCreateVertexArrays(1, &m_renderer_id); + } + + OpenGLVertexArray::~OpenGLVertexArray() + { + glDeleteVertexArrays(1, &m_renderer_id); + } + + void OpenGLVertexArray::bind() const + { + glBindVertexArray(m_renderer_id); + } + + void OpenGLVertexArray::unbind() const + { + glBindVertexArray(0); + } + + void OpenGLVertexArray::add_vertex_buffer(const std::shared_ptr& vertex_buffer) + { + glBindVertexArray(m_renderer_id); + vertex_buffer->bind(); + + const auto& layout = vertex_buffer->get_layout(); + for (const auto& element : layout.get_elements()) + { + glEnableVertexAttribArray(m_vertex_buffer_index); + glVertexAttribPointer(m_vertex_buffer_index, + element.count, + element.type, + element.normalized ? GL_TRUE : GL_FALSE, + layout.get_stride(), + (const void*)element.offset); + m_vertex_buffer_index++; + } + + m_vertex_buffers.push_back(vertex_buffer); + } + + void OpenGLVertexArray::set_index_buffer(const std::shared_ptr& index_buffer) + { + glBindVertexArray(m_renderer_id); + index_buffer->bind(); + m_index_buffer = index_buffer; + } +}; -- cgit v1.3