3 #include "client/gl_debug.h"
4 #include "client/mesh.h"
6 // upload data to GPU (only done once)
7 void mesh_upload(Mesh *mesh)
9 glGenVertexArrays(1, &mesh->vao); GL_DEBUG
10 glGenBuffers(1, &mesh->vbo); GL_DEBUG
12 glBindVertexArray(mesh->vao); GL_DEBUG
13 glBindBuffer(GL_ARRAY_BUFFER, mesh->vbo); GL_DEBUG
15 glBufferData(GL_ARRAY_BUFFER, mesh->count * mesh->layout->size,
16 mesh->data, GL_STATIC_DRAW); GL_DEBUG
19 for (GLuint i = 0; i < mesh->layout->count; i++) {
20 VertexAttribute *attrib = &mesh->layout->attributes[i];
22 glVertexAttribPointer(i, attrib->length, attrib->type, GL_FALSE,
23 mesh->layout->size, (GLvoid *) offset); GL_DEBUG
24 glEnableVertexAttribArray(i); GL_DEBUG
26 offset += attrib->size;
29 glBindBuffer(GL_ARRAY_BUFFER, 0); GL_DEBUG
30 glBindVertexArray(0); GL_DEBUG
38 void mesh_render(Mesh *mesh)
44 glBindVertexArray(mesh->vao); GL_DEBUG
45 glDrawArrays(GL_TRIANGLES, 0, mesh->count); GL_DEBUG
48 void mesh_destroy(Mesh *mesh)
50 if (mesh->data && mesh->free_data)
54 glDeleteVertexArrays(1, &mesh->vao); GL_DEBUG
58 glDeleteBuffers(1, &mesh->vbo); GL_DEBUG
61 mesh->vao = mesh->vbo = 0;