Temp fix for dynamic buffers
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user