From b46a0d9369fbaa1938f0968ab216bc2d564a9c37 Mon Sep 17 00:00:00 2001 From: fschildt Date: Mon, 21 Jul 2025 16:07:28 +0200 Subject: first commit --- src/renderer/opengl/GlVertexBuffer.cpp | 54 ++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/renderer/opengl/GlVertexBuffer.cpp (limited to 'src/renderer/opengl/GlVertexBuffer.cpp') diff --git a/src/renderer/opengl/GlVertexBuffer.cpp b/src/renderer/opengl/GlVertexBuffer.cpp new file mode 100644 index 0000000..f716c50 --- /dev/null +++ b/src/renderer/opengl/GlVertexBuffer.cpp @@ -0,0 +1,54 @@ +#include + +#include +#include + +#include + +void GlVertexBuffer::Init() { + m_Vertices.reserve(16384); + glGenBuffers(1, &m_Id); + glBindBuffer(GL_ARRAY_BUFFER, m_Id); +} + +void GlVertexBuffer::Reset() { + glDisableVertexAttribArray(0); + glDisableVertexAttribArray(1); + m_Vertices.clear(); +} + +float *GlVertexBuffer::GetData() { + return reinterpret_cast(m_Vertices.data()); +} + +uint32_t GlVertexBuffer::GetCount() { + return static_cast(m_Vertices.size()); +} + +void GlVertexBuffer::PushRectangle(V3F32 pos, V2F32 dim, V3F32 color) { + V3F32 positions[4] = { + V3F32(pos.x, pos.y, pos.z), + V3F32(pos.x + dim.x, pos.y, pos.z), + V3F32(pos.x + dim.x, pos.y + dim.y, pos.z), + V3F32(pos.x, pos.y + dim.y, pos.z), + }; + + for (int i = 0; i < 4; i++) { + GlVertex vertex = {}; + vertex.pos = positions[i]; + vertex.color = color; + m_Vertices.push_back(vertex); + } +} + +void GlVertexBuffer::TransferData() { + size_t size = m_Vertices.size() * sizeof(GlVertex); + GLsizei stride = sizeof(GlVertex); + const void *offset_color = (const void*)(3*sizeof(float)); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, stride, 0); + glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, stride, offset_color); + glBufferData(GL_ARRAY_BUFFER, size, m_Vertices.data(), GL_STATIC_DRAW); +} + -- cgit v1.2.3