diff options
| author | 0scar <qgt268@alumni.ku.dk> | 2024-06-24 19:58:06 +0000 |
|---|---|---|
| committer | 0scar <qgt268@alumni.ku.dk> | 2024-06-24 19:58:06 +0000 |
| commit | c34dfac0ef0df76b569da008e59f567620590569 (patch) | |
| tree | 4215167ae4ab8900cf4b752f5ac1300393c3f95b /src/rendering/src | |
| parent | 6e9162218e02c5db37923bacdc62a8fe02654a82 (diff) | |
Add `renderbatch_add`
Diffstat (limited to 'src/rendering/src')
| -rw-r--r-- | src/rendering/src/rendering.c | 41 |
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; } |
