#include "Mesh.h" #include Mesh::Mesh(const float* buffer, size_t vertices, const int* attrs) : vertices(vertices){ vertexSize = 0; for (int i = 0; attrs[i]; i++){ vertexSize += attrs[i]; } glGenVertexArrays(1, &vao); glGenBuffers(1, &vbo); glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); if (buffer){ glBufferData(GL_ARRAY_BUFFER, sizeof(float) * vertexSize * vertices, buffer, GL_STATIC_DRAW); } else { glBufferData(GL_ARRAY_BUFFER, 0, {}, GL_STATIC_DRAW); } // attributes int offset = 0; for (int i = 0; attrs[i]; i++){ int size = attrs[i]; glVertexAttribPointer(i, size, GL_FLOAT, GL_FALSE, vertexSize * sizeof(float), (GLvoid*)(offset * sizeof(float))); glEnableVertexAttribArray(i); offset += size; } glBindVertexArray(0); } Mesh::~Mesh(){ glDeleteVertexArrays(1, &vao); glDeleteBuffers(1, &vbo); } void Mesh::reload(const float* buffer, size_t vertices){ glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * vertexSize * vertices, buffer, GL_STATIC_DRAW); this->vertices = vertices; } void Mesh::draw() const{ glBindVertexArray(vao); glDrawArrays(GL_TRIANGLES, 0, vertices); glBindVertexArray(0); }