diff options
Diffstat (limited to 'src/mesh.c')
| -rw-r--r-- | src/mesh.c | 40 |
1 files changed, 28 insertions, 12 deletions
@@ -10,13 +10,13 @@ void mesh_init(Mesh *mesh, int vertex_count) glBindVertexArray(mesh->vao); } -static void mesh_store(Mesh *mesh, void *data, int data_len, int dimensions, GLenum type) +static void mesh_store(Mesh *mesh, void *data, int len, int dimensions, GLenum type) { GLuint vbo; GLint index = mesh->vbos_count; glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); - glBufferData(GL_ARRAY_BUFFER, data_len, data, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, len, data, GL_STATIC_DRAW); glEnableVertexAttribArray(index); if (type == GL_FLOAT) glVertexAttribPointer(index, dimensions, type, GL_FALSE, 0, 0); @@ -25,26 +25,24 @@ static void mesh_store(Mesh *mesh, void *data, int data_len, int dimensions, GLe mesh->vbos[mesh->vbos_count++] = vbo; } -void mesh_storef(Mesh *mesh, float *data, int data_len, int dimensions) +void mesh_storef(Mesh *mesh, float *data, int count, int dimensions) { - mesh_store(mesh, data, data_len * sizeof(float), dimensions, GL_FLOAT); + mesh_store(mesh, data, count * sizeof(float), dimensions, GL_FLOAT); } -void mesh_storei(Mesh *mesh, int *data, int data_len, int dimensions) +void mesh_storei(Mesh *mesh, int *data, int count, int dimensions) { - mesh_store(mesh, data, data_len * sizeof(int), dimensions, GL_INT); + mesh_store(mesh, data, count * sizeof(int), dimensions, GL_INT); } -void mesh_storeu(Mesh *mesh, unsigned int *data, int data_len, int dimensions) +void mesh_storeu(Mesh *mesh, unsigned int *data, int count, int dimensions) { - mesh_store(mesh, data, data_len * sizeof(unsigned int), dimensions, - GL_UNSIGNED_INT); + mesh_store(mesh, data, count * sizeof(unsigned int), dimensions, GL_UNSIGNED_INT); } -void mesh_storeb(Mesh *mesh, unsigned char *data, int data_len, int dimensions) +void mesh_storeb(Mesh *mesh, unsigned char *data, int count, int dimensions) { - mesh_store(mesh, data, data_len * sizeof(unsigned char), dimensions, - GL_UNSIGNED_BYTE); + mesh_store(mesh, data, count * sizeof(unsigned char), dimensions, GL_UNSIGNED_BYTE); } void mesh_finish(void) @@ -71,8 +69,26 @@ void mesh_draw(Mesh *mesh) glDrawArrays(GL_TRIANGLES, 0, mesh->vertex_count); } +void mesh_draw_instanced(Mesh *mesh, int count) +{ + glDrawArraysInstanced(GL_TRIANGLES, 0, mesh->vertex_count, count); +} + void mesh_free(Mesh *mesh) { glDeleteBuffers(mesh->vbos_count, mesh->vbos); glDeleteVertexArrays(1, &mesh->vao); } + +void uniform_init(Uniform *uniform, void *data, int len) +{ + glGenBuffers(1, &uniform->id); + glBindBuffer(GL_UNIFORM_BUFFER, uniform->id); + glBufferData(GL_UNIFORM_BUFFER, len, data, GL_STATIC_DRAW); + glBindBuffer(GL_UNIFORM_BUFFER, 0); +} + +void uniform_free(Uniform *uniform) +{ + glDeleteBuffers(1, &uniform->id); +} |