3 #include "client/mesh.h"
7 Mesh *mesh = malloc(sizeof(Mesh));
8 mesh->VAO = mesh->VBO = 0;
9 mesh->free_textures = false;
10 mesh->free_vertices = false;
15 void mesh_delete(Mesh *mesh)
17 if (mesh->textures && mesh->free_textures)
20 if (mesh->vertices && mesh->free_vertices)
24 glDeleteVertexArrays(1, &mesh->VAO);
27 glDeleteBuffers(1, &mesh->VAO);
32 void mesh_configure(Mesh *mesh)
34 glGenVertexArrays(1, &mesh->VAO);
35 glGenBuffers(1, &mesh->VBO);
37 glBindVertexArray(mesh->VAO);
38 glBindBuffer(GL_ARRAY_BUFFER, mesh->VBO);
40 glBufferData(GL_ARRAY_BUFFER, mesh->vertices_count * mesh->layout->size, mesh->vertices, GL_STATIC_DRAW);
42 vertex_layout_configure(mesh->layout);
44 glBindBuffer(GL_ARRAY_BUFFER, 0);
47 if (mesh->free_vertices)
50 mesh->vertices = NULL;
53 void mesh_render(Mesh *mesh)
58 for (GLuint i = 0; i < mesh->textures_count; i++)
59 glBindTextureUnit(i, mesh->textures[i]);
61 glBindVertexArray(mesh->VAO);
62 glDrawArrays(GL_TRIANGLES, 0, mesh->vertices_count);