diff options
| author | Freya Murphy <freya@freyacat.org> | 2025-12-11 10:49:50 -0500 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2025-12-11 10:51:40 -0500 |
| commit | fa8fa6784559ed0fc8d780e36880273f77e272c4 (patch) | |
| tree | 7456a4e9148d47e409ba837bafdc6238b6c757db /src/mesh.c | |
| parent | add ubos (diff) | |
| download | voxel-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.c | 44 |
1 files changed, 31 insertions, 13 deletions
@@ -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); |