aboutsummaryrefslogtreecommitdiff
path: root/src/renderer/opengl/GlVertexBuffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/opengl/GlVertexBuffer.cpp')
-rw-r--r--src/renderer/opengl/GlVertexBuffer.cpp54
1 files changed, 54 insertions, 0 deletions
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 <renderer/opengl/GlVertexBuffer.hpp>
+
+#include <GL/glew.h>
+#include <string.h>
+
+#include <stdio.h>
+
+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<float*>(m_Vertices.data());
+}
+
+uint32_t GlVertexBuffer::GetCount() {
+ return static_cast<uint32_t>(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);
+}
+