summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2026-03-15 22:14:56 +0000
committeronelin <oscar@nelin.dk>2026-03-15 22:14:56 +0000
commitcb36e70127ac6bdfc8960fbddf545afcfbca1ce4 (patch)
tree27b0bcff08aca01b8b48174d18699195d29be6a5
parent38ddb7e5052af5edbe173098fb704ad080016df0 (diff)
Add support for SSBO buffers
-rw-r--r--src/gl.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/gl.c b/src/gl.c
index 365977e..fb8e140 100644
--- a/src/gl.c
+++ b/src/gl.c
@@ -241,6 +241,7 @@ RenderObject RenderObject_new(
gl->BindVertexArray(o.vao);
ASSERT(!(err = gl->GetError()));
+ u32 static_buffers = 0;
/* For each buffer in the shader, */
/* The shader should be generalied, */
for (usize i = 0; i < num_buffers; i++) {
@@ -249,9 +250,14 @@ RenderObject RenderObject_new(
gl->CreateBuffers(1, &(buffers[i].buffername));
ASSERT(!(err = gl->GetError()));
- //gl->NamedBufferStorage(buffers[i].buffername, (isize)sz, buffers[i].data, ShaderBuffer_get_gl_accesstype(buffers[i].buffertype));
- //ASSERT(!(err = gl->GetError()));
- gl->NamedBufferData(buffers[i].buffername, (isize)sz, buffers[i].data, ShaderBuffer_get_gl_accesstype(buffers[i].buffertype));
+ if ((buffers[i].buffertype & 3) == ShaderBuffer_static) {
+ // TODO: Set flags according to accesstype
+ gl->NamedBufferStorage(buffers[i].buffername, (isize)sz, buffers[i].data, 0);
+ gl->BindBufferBase(GL_SHADER_STORAGE_BUFFER, static_buffers, buffers[i].buffername);
+ static_buffers++;
+ } else {
+ gl->NamedBufferData(buffers[i].buffername, (isize)sz, buffers[i].data, ShaderBuffer_get_gl_accesstype(buffers[i].buffertype));
+ }
ASSERT(!(err = gl->GetError()));
}