diff options
| -rw-r--r-- | src/rendering/src/rendering.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c index 0c1052a..06880fd 100644 --- a/src/rendering/src/rendering.c +++ b/src/rendering/src/rendering.c @@ -85,7 +85,21 @@ ShaderBuffer* shaderbuffer_cat(ShaderBuffer* dst, ShaderBuffer *restrict src) { // Assume that we single-handedly control the pointer to the data, copy and // free the stuff. - // + + // Verify the size + const isize sz_src = src->size_elem * src->count; + const isize sz_dst = dst->size_elem * dst->count; + if (sz_src + sz_dst >= dst->size) { + const isize sz_new = (1 + ((sz_src + sz_dst) / 4096)) * 4096; + // Resize dst size + dst->data = realloc(dst->data, sz_new); + dst->size = sz_new; + } + + memcpy(dst->data + sz_dst, src->data, sz_src); + + dst->count += src->count; + return dst; } |
