#include #include "OpenGLVertexArray.h" #include "Rendering/VertexBuffer.h" #include "Rendering/IndexBuffer.h" namespace Donut { OpenGLVertexArray::OpenGLVertexArray() { glCreateVertexArrays(1, &m_RendererID); } OpenGLVertexArray::~OpenGLVertexArray() { glDeleteVertexArrays(1, &m_RendererID); } void OpenGLVertexArray::Bind() const { glBindVertexArray(m_RendererID); } void OpenGLVertexArray::Unbind() const { glBindVertexArray(0); } void OpenGLVertexArray::AddVertexBuffer(const std::shared_ptr& vertexBuffer) { glBindVertexArray(m_RendererID); vertexBuffer->Bind(); const auto& layout = vertexBuffer->GetLayout(); for (const auto& element : layout.GetElements()) { glEnableVertexAttribArray(m_VertexBufferIndex); glVertexAttribPointer(m_VertexBufferIndex, element.count, element.type, element.normalized ? GL_TRUE : GL_FALSE, layout.GetStride(), reinterpret_cast(static_cast(element.offset))); m_VertexBufferIndex++; } m_VertexBuffers.push_back(vertexBuffer); } void OpenGLVertexArray::SetIndexBuffer(const std::shared_ptr& indexBuffer) { glBindVertexArray(m_RendererID); indexBuffer->Bind(); m_IndexBuffer = indexBuffer; } };