summaryrefslogtreecommitdiff
path: root/src/mesh.c
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-12-11 10:49:50 -0500
committerFreya Murphy <freya@freyacat.org>2025-12-11 10:51:40 -0500
commitfa8fa6784559ed0fc8d780e36880273f77e272c4 (patch)
tree7456a4e9148d47e409ba837bafdc6238b6c757db /src/mesh.c
parentadd ubos (diff)
downloadvoxel-fa8fa6784559ed0fc8d780e36880273f77e272c4.tar.gz
voxel-fa8fa6784559ed0fc8d780e36880273f77e272c4.tar.bz2
voxel-fa8fa6784559ed0fc8d780e36880273f77e272c4.zip
i did a lot
Diffstat (limited to 'src/mesh.c')
-rw-r--r--src/mesh.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/src/mesh.c b/src/mesh.c
index 8ee5ace..2ffe61b 100644
--- a/src/mesh.c
+++ b/src/mesh.c
@@ -1,8 +1,8 @@
#include <GL/glew.h>
-#include "mesh.h"
+#include "gl.h"
-void mesh_init(Mesh *mesh, int vertex_count)
+void mesh_init(Mesh *mesh, u32 vertex_count)
{
glGenVertexArrays(1, &mesh->vao);
mesh->vbos_count = 0;
@@ -10,7 +10,7 @@ void mesh_init(Mesh *mesh, int vertex_count)
glBindVertexArray(mesh->vao);
}
-static void mesh_store(Mesh *mesh, void *data, int len, int dimensions, GLenum type)
+static void mesh_store(Mesh *mesh, void *data, u32 len, u32 dimensions, GLenum type)
{
GLuint vbo;
GLint index = mesh->vbos_count;
@@ -25,24 +25,24 @@ static void mesh_store(Mesh *mesh, void *data, int len, int dimensions, GLenum t
mesh->vbos[mesh->vbos_count++] = vbo;
}
-void mesh_storef(Mesh *mesh, float *data, int count, int dimensions)
+void mesh_store_float(Mesh *mesh, float *data, u32 count, u32 dimensions)
{
mesh_store(mesh, data, count * sizeof(float), dimensions, GL_FLOAT);
}
-void mesh_storei(Mesh *mesh, int *data, int count, int dimensions)
+void mesh_store_i32(Mesh *mesh, i32 *data, u32 count, u32 dimensions)
{
- mesh_store(mesh, data, count * sizeof(int), dimensions, GL_INT);
+ mesh_store(mesh, data, count * sizeof(i32), dimensions, GL_INT);
}
-void mesh_storeu(Mesh *mesh, unsigned int *data, int count, int dimensions)
+void mesh_store_u8(Mesh *mesh, u8 *data, u32 count, u32 dimensions)
{
- mesh_store(mesh, data, count * sizeof(unsigned int), dimensions, GL_UNSIGNED_INT);
+ mesh_store(mesh, data, count * sizeof(u8), dimensions, GL_UNSIGNED_BYTE);
}
-void mesh_storeb(Mesh *mesh, unsigned char *data, int count, int dimensions)
+void mesh_store_u32(Mesh *mesh, u32 *data, u32 count, u32 dimensions)
{
- mesh_store(mesh, data, count * sizeof(unsigned char), dimensions, GL_UNSIGNED_BYTE);
+ mesh_store(mesh, data, count * sizeof(u32), dimensions, GL_UNSIGNED_INT);
}
void mesh_finish(void)
@@ -69,7 +69,7 @@ void mesh_draw(Mesh *mesh)
glDrawArrays(GL_TRIANGLES, 0, mesh->vertex_count);
}
-void mesh_draw_instanced(Mesh *mesh, int count)
+void mesh_draw_instanced(Mesh *mesh, u32 count)
{
glDrawArraysInstanced(GL_TRIANGLES, 0, mesh->vertex_count, count);
}
@@ -80,14 +80,32 @@ void mesh_free(Mesh *mesh)
glDeleteVertexArrays(1, &mesh->vao);
}
-void uniform_init(Uniform *uniform, void *data, int len)
+void uniform_init(Uniform *uniform, u32 len)
{
+ uniform->len = len;
glGenBuffers(1, &uniform->id);
glBindBuffer(GL_UNIFORM_BUFFER, uniform->id);
- glBufferData(GL_UNIFORM_BUFFER, len, data, GL_STATIC_DRAW);
+ glBufferData(GL_UNIFORM_BUFFER, len, NULL, GL_DYNAMIC_DRAW);
glBindBuffer(GL_UNIFORM_BUFFER, 0);
}
+void uniform_store(Uniform *uniform, u32 offset, u32 len, void *data)
+{
+ glBindBuffer(GL_UNIFORM_BUFFER, uniform->id);
+ glBufferSubData(GL_UNIFORM_BUFFER, offset, len, data);
+ glBindBuffer(GL_UNIFORM_BUFFER, 0);
+}
+
+void uniform_bind(Uniform *uniform, u32 binding)
+{
+ glBindBufferBase(GL_UNIFORM_BUFFER, binding, uniform->id);
+}
+
+void uniform_unbind(u32 binding)
+{
+ glBindBufferBase(GL_UNIFORM_BUFFER, binding, 0);
+}
+
void uniform_free(Uniform *uniform)
{
glDeleteBuffers(1, &uniform->id);