summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-03-17 16:52:45 +0000
committeronelin <oscar@nelin.dk>2025-03-17 16:52:45 +0000
commita7b73304bc13099590d081c0912c9006bb2abbc9 (patch)
treebcabc691aa5faf995631a79e1f1d8a0c1e876889 /src
parentf28fd28c84086d17cc0b7bdf2ff03df433837515 (diff)
Fix batch refreshing
Diffstat (limited to 'src')
-rw-r--r--src/rendering/include/engine/rendering/rendering.h16
-rw-r--r--src/rendering/src/rendering.c20
2 files changed, 24 insertions, 12 deletions
diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h
index b022117..a39e00c 100644
--- a/src/rendering/include/engine/rendering/rendering.h
+++ b/src/rendering/include/engine/rendering/rendering.h
@@ -90,13 +90,13 @@ typedef struct {
// Array, access, and data, type.
u32 buffertype;
// Buffer size of `data`. To get the size of the actual data, size_elem * count
- isize size;
+ usize size;
// Number of elements
- isize count;
+ usize count;
// components per generic vertex attribute (ie, 3 for RGB, 2 for UV)
- isize components;
+ usize components;
// size of each element
- isize size_elem;
+ usize size_elem;
// Pointer to the data
void* data;
} ShaderBuffer;
@@ -134,13 +134,13 @@ typedef struct {
typedef struct {
// Size of models buffer
- isize msize;
+ usize msize;
// number of models in the `models` buffer
- isize mcount;
-
+ usize mcount;
+ // The original models in this batch
RenderObject *models;
- // Size and count of vertices
+ // The rendered destination object
RenderObject renderobj;
} RenderBatch;
diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c
index 9ffd970..679a07e 100644
--- a/src/rendering/src/rendering.c
+++ b/src/rendering/src/rendering.c
@@ -194,13 +194,25 @@ int renderbatch_add(RenderBatch* renderbatch, RenderObject* obj) {
// renderbatch_refresh: Copy all models in the renderbatch to the batchs' model.
int renderbatch_refresh(RenderBatch* renderbatch) {
- isize offset = 0;
- for (isize i = 0; i < renderbatch->mcount; i++) {
- memcpy(renderbatch->renderobj.buffer + offset, renderbatch->models[i].buffer, renderbatch->models[i].buffer_len);
+ const usize bufs = renderbatch->renderobj.buffer_len;
+ isize *offsets = calloc(bufs, sizeof(isize));
+
+ for (usize m = 0; m < renderbatch->mcount; m++) {
+
+ // Copy every buffer in every object
+ for (usize b = 0; b < renderbatch->models[m].buffer_len; b++) {
+ const ShaderBuffer* buf = &renderbatch->models[m].buffer[b];
+ const usize bsize = buf->size_elem * buf->count;
+ memcpy(&renderbatch->renderobj.buffer[b] + offsets[b],
+ buf->data,
+ bsize
+ );
+ offsets[b] += bsize;
+ }
- offset += renderbatch->models[i].buffer_len;
}
+ free(offsets);
return 0;
}