From a45dd7cc0338dd873ab541080bb3fc10ba145ac0 Mon Sep 17 00:00:00 2001 From: Riyyi Date: Thu, 7 Jan 2021 00:17:20 +0100 Subject: [PATCH] Add option to create dynamic VertexBuffer --- inferno/src/inferno/render/buffer.cpp | 21 +++++++++++++++++++++ inferno/src/inferno/render/buffer.h | 3 +++ 2 files changed, 24 insertions(+) diff --git a/inferno/src/inferno/render/buffer.cpp b/inferno/src/inferno/render/buffer.cpp index 5884e7d..188e59f 100644 --- a/inferno/src/inferno/render/buffer.cpp +++ b/inferno/src/inferno/render/buffer.cpp @@ -115,6 +115,17 @@ namespace Inferno { // ----------------------------------------- + VertexBuffer::VertexBuffer(size_t size) + { + glGenBuffers(1, &m_id); + this->bind(); + + // Reserve data on the GPU + glBufferData(GL_ARRAY_BUFFER, size, nullptr, GL_DYNAMIC_DRAW); + + this->unbind(); + } + VertexBuffer::VertexBuffer(float* vertices, size_t size) { glGenBuffers(1, &m_id); @@ -141,6 +152,16 @@ namespace Inferno { glBindBuffer(GL_ARRAY_BUFFER, 0); } + void VertexBuffer::uploadData(const void* data, uint32_t size) + { + this->bind(); + + // Upload data to the GPU + glBufferSubData(GL_ARRAY_BUFFER, 0, size, data); + + this->unbind(); + } + // ----------------------------------------- IndexBuffer::IndexBuffer(uint32_t* indices, size_t size) : diff --git a/inferno/src/inferno/render/buffer.h b/inferno/src/inferno/render/buffer.h index e54daf3..6216d47 100644 --- a/inferno/src/inferno/render/buffer.h +++ b/inferno/src/inferno/render/buffer.h @@ -81,12 +81,15 @@ namespace Inferno { // GPU memory which holds raw vertex data class VertexBuffer { public: + VertexBuffer(size_t size); VertexBuffer(float* vertices, size_t size); ~VertexBuffer(); void bind() const; void unbind() const; + void uploadData(const void* data, uint32_t size); + inline const BufferLayout& getLayout() const { return m_layout; } inline void setLayout(const BufferLayout& layout) { m_layout = layout; }