summaryrefslogtreecommitdiff
path: root/src/mesh.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesh.c')
-rw-r--r--src/mesh.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/src/mesh.c b/src/mesh.c
index 6b2951b..8ee5ace 100644
--- a/src/mesh.c
+++ b/src/mesh.c
@@ -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);
+}