aboutsummaryrefslogtreecommitdiff
path: root/src/buffer
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer')
-rw-r--r--src/buffer/vertex/material_buffer.cc51
-rw-r--r--src/buffer/vertex/material_buffer.h18
2 files changed, 69 insertions, 0 deletions
diff --git a/src/buffer/vertex/material_buffer.cc b/src/buffer/vertex/material_buffer.cc
new file mode 100644
index 0000000..82ccea2
--- /dev/null
+++ b/src/buffer/vertex/material_buffer.cc
@@ -0,0 +1,51 @@
+#include "material_buffer.h"
+
+#include <vector>
+
+MaterialBuffer::MaterialBuffer(GLuint nX, GLuint nY):
+ _nX(nX), _nY(nY) {
+ glGenVertexArrays(1, &_array);
+ glGenBuffers(1, &_buffer);
+
+ glBindVertexArray(_array);
+ glBindBuffer(GL_ARRAY_BUFFER, _buffer);
+
+ std::vector<GLint> data(nX*nY, GLint{1});
+
+ for ( int x = 0; x < nX; ++x ) {
+ data[ 0*nX + x] = 0;
+ data[(nY-1)*nX + x] = 0;
+ }
+ for ( int y = 0; y < nY; ++y ) {
+ data[y*nX + 0] = 0;
+ data[y*nX + nX-1] = 0;
+ }
+
+ for ( int x = 1; x < nX-1; ++x ) {
+ data[ 1*nX + x] = 2;
+ data[(nY-2)*nX + x] = 2;
+ }
+ for ( int y = 1; y < nY-1; ++y ) {
+ data[y*nX + 1] = 2;
+ data[y*nX + nX-2] = 2;
+ }
+
+ glBufferData(
+ GL_ARRAY_BUFFER,
+ data.size() * sizeof(GLint),
+ data.data(),
+ GL_STATIC_DRAW
+ );
+
+ glEnableVertexAttribArray(0);
+ glVertexAttribPointer(0, 1, GL_INT, GL_FALSE, 0, nullptr);
+}
+
+MaterialBuffer::~MaterialBuffer() {
+ glDeleteBuffers(1, &_buffer);
+ glDeleteVertexArrays(1, &_array);
+}
+
+GLuint MaterialBuffer::getBuffer() const {
+ return _buffer;
+}
diff --git a/src/buffer/vertex/material_buffer.h b/src/buffer/vertex/material_buffer.h
new file mode 100644
index 0000000..eccf008
--- /dev/null
+++ b/src/buffer/vertex/material_buffer.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <GL/glew.h>
+
+class MaterialBuffer {
+private:
+ const GLuint _nX;
+ const GLuint _nY;
+
+ GLuint _array;
+ GLuint _buffer;
+
+public:
+ MaterialBuffer(GLuint nX, GLuint nY);
+ ~MaterialBuffer();
+
+ GLuint getBuffer() const;
+};