#include "mesh.h" #include "constants.h" #include namespace kek { Vertex::Vertex(glm::vec3 pos, glm::vec3 normal, glm::vec2 texCoords) { this->pos = pos; this->normal = normal; this->texCoords = texCoords; } Mesh::Mesh(std::vector vertices, std::vector indices) { this->vertices = vertices; this->indices = indices; glGenVertexArrays(1, &vao); glGenBuffers(1, &vbo); glGenBuffers(1, &ebo); glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vertex), &vertices[0], GL_STATIC_DRAW); //glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), &indices[0], GL_STATIC_DRAW); //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glVertexAttribPointer(KEK_VERTEX_SHADER_IN_POSITION, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); glEnableVertexAttribArray(KEK_VERTEX_SHADER_IN_POSITION); glVertexAttribPointer(KEK_VERTEX_SHADER_IN_NORMAL, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void *) offsetof(Vertex, normal)); glEnableVertexAttribArray(KEK_VERTEX_SHADER_IN_NORMAL); glVertexAttribPointer(KEK_VERTEX_SHADER_IN_TEXCOORD, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void *) offsetof(Vertex, texCoords)); glEnableVertexAttribArray(KEK_VERTEX_SHADER_IN_TEXCOORD); glBindVertexArray(0); GLenum err = glGetError(); if(err != GL_NO_ERROR) { std::cout << "OpenGL error while loading mesh: " << err << std::endl; exit(1); } } Mesh::~Mesh() { glDeleteBuffers(1, &ebo); glDeleteBuffers(1, &vbo); glDeleteVertexArrays(1, &vao); } void Mesh::draw(Shader *shader) { glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); /*if(!light) { // TODO: check if props exist material->diffuse->use(GL_TEXTURE0); glUniform1i(glGetUniformLocation(shader->id, "material.diffuse"), 0); material->specular->use(GL_TEXTURE1); glUniform1i(glGetUniformLocation(shader->id, "material.specular"), 1); glUniform1f(glGetUniformLocation(shader->id, "material.shininess"), material->shininess); }*/ // Bind vertices + texture coordinates glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindVertexArray(0); } }