diff options
Diffstat (limited to 'src/buffer/vertex')
| -rw-r--r-- | src/buffer/vertex/material_buffer.cc | 51 | ||||
| -rw-r--r-- | src/buffer/vertex/material_buffer.h | 18 | 
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; +}; | 
