Temp fix for dynamic buffers

This commit is contained in:
luboslenco
2025-02-12 23:22:44 +01:00
parent a94c612c47
commit a1a1c3db67
3 changed files with 20 additions and 18 deletions
@@ -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);
}
@@ -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]);
}
@@ -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;