From a1a1c3db67b49de28e4bd9daa1f54ebbec7d4915 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Wed, 12 Feb 2025 23:22:44 +0100 Subject: [PATCH] Temp fix for dynamic buffers --- .../g4ong5/kinc/backend/graphics4/g4.c.h | 2 +- .../kinc/backend/graphics4/vertexbuffer.c.h | 34 ++++++++++--------- .../kinc/backend/graphics4/vertexbuffer.h | 2 +- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/g4.c.h b/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/g4.c.h index bb876e37..28c9f33d 100644 --- a/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/g4.c.h +++ b/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/g4.c.h @@ -551,7 +551,7 @@ void kinc_g4_set_render_targets(kinc_g4_render_target_t **targets, int count) { } void kinc_g4_set_vertex_buffer(kinc_g4_vertex_buffer_t *buffer) { - kinc_g5_vertex_buffer_t *g5_vertex_buffer = &buffer->impl._buffer; + kinc_g5_vertex_buffer_t *g5_vertex_buffer = &buffer->impl._buffer[buffer->impl._currentIndex]; current_state.vertex_buffer = g5_vertex_buffer; kinc_g5_command_list_set_vertex_buffer(&commandList, g5_vertex_buffer); } diff --git a/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/vertexbuffer.c.h b/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/vertexbuffer.c.h index 4fc38ffc..dff91503 100644 --- a/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/vertexbuffer.c.h +++ b/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/vertexbuffer.c.h @@ -5,44 +5,46 @@ extern bool waitAfterNextDraw; void kinc_g4_vertex_buffer_init(kinc_g4_vertex_buffer_t *buffer, int count, kinc_g4_vertex_structure_t *structure, kinc_g4_usage_t usage) { - int multiple = usage == KINC_G4_USAGE_STATIC ? 1 : 2; - kinc_g5_vertex_buffer_init(&buffer->impl._buffer, count * multiple, structure, usage == KINC_G4_USAGE_STATIC); - buffer->impl._multiple = multiple; + buffer->impl._multiple = usage == KINC_G4_USAGE_STATIC ? 1 : 2; buffer->impl._currentIndex = 0; buffer->impl.myCount = count; + for (int i = 0; i < buffer->impl._multiple; ++i) { + kinc_g5_vertex_buffer_init(&buffer->impl._buffer[i], count, structure, usage == KINC_G4_USAGE_STATIC); + } } void kinc_g4_vertex_buffer_destroy(kinc_g4_vertex_buffer_t *buffer) { - kinc_g5_vertex_buffer_destroy(&buffer->impl._buffer); + for (int i = 0; i < buffer->impl._multiple; ++i) { + kinc_g5_vertex_buffer_destroy(&buffer->impl._buffer); + } } static void prepareLock(kinc_g4_vertex_buffer_t *buffer) { - // ++buffer->impl._currentIndex; - // if (buffer->impl._currentIndex >= buffer->impl._multiple - 1) { + ++buffer->impl._currentIndex; + if (buffer->impl._currentIndex >= buffer->impl._multiple - 1) { waitAfterNextDraw = true; - // } - // if (buffer->impl._currentIndex >= buffer->impl._multiple) { - // buffer->impl._currentIndex = 0; - // } + } + if (buffer->impl._currentIndex >= buffer->impl._multiple) { + buffer->impl._currentIndex = 0; + } } float *kinc_g4_vertex_buffer_lock_all(kinc_g4_vertex_buffer_t *buffer) { prepareLock(buffer); - return kinc_g5_vertex_buffer_lock(&buffer->impl._buffer, buffer->impl._currentIndex * kinc_g4_vertex_buffer_count(buffer), - kinc_g4_vertex_buffer_count(buffer)); + return kinc_g5_vertex_buffer_lock_all(&buffer->impl._buffer[buffer->impl._currentIndex]); } float *kinc_g4_vertex_buffer_lock(kinc_g4_vertex_buffer_t *buffer, int start, int count) { prepareLock(buffer); - return kinc_g5_vertex_buffer_lock(&buffer->impl._buffer, start + buffer->impl._currentIndex * kinc_g4_vertex_buffer_count(buffer), count); + return kinc_g5_vertex_buffer_lock(&buffer->impl._buffer[buffer->impl._currentIndex], start, count); } void kinc_g4_vertex_buffer_unlock_all(kinc_g4_vertex_buffer_t *buffer) { - kinc_g5_vertex_buffer_unlock_all(&buffer->impl._buffer); + kinc_g5_vertex_buffer_unlock_all(&buffer->impl._buffer[buffer->impl._currentIndex]); } void kinc_g4_vertex_buffer_unlock(kinc_g4_vertex_buffer_t *buffer, int count) { - kinc_g5_vertex_buffer_unlock(&buffer->impl._buffer, count); + kinc_g5_vertex_buffer_unlock(&buffer->impl._buffer[buffer->impl._currentIndex], count); } int kinc_g4_vertex_buffer_count(kinc_g4_vertex_buffer_t *buffer) { @@ -50,5 +52,5 @@ int kinc_g4_vertex_buffer_count(kinc_g4_vertex_buffer_t *buffer) { } int kinc_g4_vertex_buffer_stride(kinc_g4_vertex_buffer_t *buffer) { - return kinc_g5_vertex_buffer_stride(&buffer->impl._buffer); + return kinc_g5_vertex_buffer_stride(&buffer->impl._buffer[buffer->impl._currentIndex]); } diff --git a/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/vertexbuffer.h b/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/vertexbuffer.h index 4a303494..c0628adc 100644 --- a/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/vertexbuffer.h +++ b/armorcore/sources/backends/g4ong5/kinc/backend/graphics4/vertexbuffer.h @@ -4,7 +4,7 @@ typedef struct { int myCount; - kinc_g5_vertex_buffer_t _buffer; + kinc_g5_vertex_buffer_t _buffer[2]; int _currentIndex; int _multiple; } kinc_g4_vertex_buffer_impl_t;