summaryrefslogtreecommitdiff
path: root/src/rendering
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2024-06-24 19:58:06 +0000
committer0scar <qgt268@alumni.ku.dk>2024-06-24 19:58:06 +0000
commitc34dfac0ef0df76b569da008e59f567620590569 (patch)
tree4215167ae4ab8900cf4b752f5ac1300393c3f95b /src/rendering
parent6e9162218e02c5db37923bacdc62a8fe02654a82 (diff)
Add `renderbatch_add`
Diffstat (limited to 'src/rendering')
-rw-r--r--src/rendering/src/rendering.c41
1 files changed, 39 insertions, 2 deletions
diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c
index 9142c49..ea14568 100644
--- a/src/rendering/src/rendering.c
+++ b/src/rendering/src/rendering.c
@@ -76,13 +76,50 @@ int renderbatch_new(RenderBatch* renderbatch, const isize count) {
// renderbatch_refresh: Refresh all models in the batch.
int renderbatch_refresh(RenderBatch* renderbatch) {
for (isize i = 0; i < renderbatch->mcount; i++) {
- // Go through all buffers
+ memcpy(renderbatch->renderobj.buffer, obj->buffer, obj->buffer_len);
}
return 0;
}
-int renderbatch_add(RenderBatch* renderbatch) {
+// Add a render object to the render batch
+int renderbatch_add(RenderBatch* renderbatch, RenderObject* obj) {
+ if (renderbatch == NULL) {
+ ERROR("renderbatch was null!");
+ return -1;
+ }
+
+ if (renderbatch->models == NULL) {
+ const isize sz = 8 * sizeof(RenderObject);
+ renderbatch->models = malloc(8 * sizeof(RenderObject));
+ renderbatch->msize = sz;
+ renderbatch->mcount = 0;
+ } else if ((renderbatch->mcount + 1) * sizeof(RenderObject) > renderbatch->msize) {
+ const isize sz = renderbatch->msize * 2;
+ renderbatch->models = realloc(&(renderbatch->models), sz);
+ renderbatch->msize = sz;
+ }
+
+ if (renderbatch->renderobj.buffer == NULL) {
+ renderbatch->renderobj.buffer = malloc(sizeof(ShaderBuffer));
+ }
+
+ if (renderbatch->mcount == 0) {
+ // Copy the first objects shaderstuff
+ renderbatch->renderobj.shader = obj->shader;
+ renderbatch->renderobj.vao = obj->vao;
+ renderbatch->renderobj.mvp = obj->mvp;
+ renderbatch->renderobj.texture = obj->texture;
+ renderbatch->renderobj.buffer_len = obj->buffer_len;
+ }
+
+ memcpy(renderbatch->renderobj.buffer + renderbatch->renderobj.buffer_len, obj->buffer, obj->buffer_len);
+
+ if (renderbatch->mcount != 0) {
+ renderbatch->renderobj.buffer_len += obj->buffer_len;
+ }
+ renderbatch->mcount++;
+
return 0;
}