diff options
| author | realtradam <[email protected]> | 2023-04-10 19:55:20 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2023-04-10 19:55:20 -0400 |
| commit | 271ff350f3155001418876a2fd5829b77be1e976 (patch) | |
| tree | 2f45ebf6805c2e2b96b22b6cab0218d0d4882eb6 | |
| parent | 6a0ef52763cee6e6d7c631516461e0600d9a2da1 (diff) | |
| download | RodeoKit-271ff350f3155001418876a2fd5829b77be1e976.tar.gz RodeoKit-271ff350f3155001418876a2fd5829b77be1e976.zip | |
switch over to using transient buffers
| -rw-r--r-- | include/rodeo_config.h | 4 | ||||
| -rw-r--r-- | src/rodeo.c | 49 | ||||
| -rw-r--r-- | src/rodeo_internal.h | 6 | ||||
| -rw-r--r-- | src/rodeo_internal_types.h | 20 |
4 files changed, 50 insertions, 29 deletions
diff --git a/include/rodeo_config.h b/include/rodeo_config.h index 247a0b2..f417ac0 100644 --- a/include/rodeo_config.h +++ b/include/rodeo_config.h @@ -2,3 +2,7 @@ #ifndef mrodeo_vertex_size_max #define mrodeo_vertex_size_max 8192 #endif + +#ifndef mrodeo_index_size_max + #define mrodeo_index_size_max ((mrodeo_vertex_size_max / 4) * 6) +#endif diff --git a/src/rodeo.c b/src/rodeo.c index 7a31e40..fbbee92 100644 --- a/src/rodeo.c +++ b/src/rodeo.c @@ -154,10 +154,6 @@ rodeo_window_init( bgfx_vertex_layout_add(&state.vertex_layout, BGFX_ATTRIB_TEXCOORD1, 1, BGFX_ATTRIB_TYPE_FLOAT, false, false); } - state.vertex_buffer_handle = bgfx_create_dynamic_vertex_buffer(mrodeo_vertex_size_max, &state.vertex_layout, BGFX_BUFFER_NONE); - - state.index_buffer_handle = bgfx_create_dynamic_index_buffer((mrodeo_vertex_size_max / 4) * 6, BGFX_BUFFER_NONE); - // load shaders rodeo_string_t shader_path = rodeo_string_create("???"); switch(bgfx_get_renderer_type()) { @@ -254,8 +250,8 @@ rodeo_window_deinit(void) { free(state.default_texture.internal_texture); - bgfx_destroy_dynamic_index_buffer(state.index_buffer_handle); - bgfx_destroy_dynamic_vertex_buffer(state.vertex_buffer_handle); + //bgfx_destroy_dynamic_index_buffer(state.index_buffer_handle); + //bgfx_destroy_dynamic_vertex_buffer(state.vertex_buffer_handle); bgfx_destroy_program(state.program_shader); bgfx_shutdown(); @@ -304,6 +300,9 @@ rodeo_frame_begin(void) bgfx_set_view_transform(0, view, proj); bgfx_set_view_rect(0, 0, 0, state.screen_width, state.screen_height); bgfx_touch(0); + + irodeo_render_buffer_transient_alloc(); + state.start_frame = state.end_frame; } @@ -330,6 +329,15 @@ rodeo_frame_end(void) } void +irodeo_render_buffer_transient_alloc(void) +{ + bgfx_alloc_transient_vertex_buffer(&state.vertex_buffer_handle, mrodeo_vertex_size_max, &state.vertex_layout); + bgfx_alloc_transient_index_buffer(&state.index_buffer_handle, mrodeo_index_size_max, false); + state.batched_vertices = (rodeo_vertex_t*)state.vertex_buffer_handle.data; + state.batched_indices = (irodeo_index_type_t*)state.index_buffer_handle.data; +} + +void rodeo_mainLoop_run( rodeo_mainLoop_function main_loop_func ) @@ -406,16 +414,6 @@ rodeo_renderer_flush(void) if(state.vertex_size > 0) { - // upload remaining batched vertices - bgfx_set_dynamic_vertex_buffer(0, state.vertex_buffer_handle, 0, state.vertex_size); - const bgfx_memory_t* vbm = bgfx_copy(state.batched_vertices, sizeof(rodeo_vertex_t) * state.vertex_size); - bgfx_update_dynamic_vertex_buffer(state.vertex_buffer_handle, 0, vbm); - - // upload remaining batched indices - bgfx_set_dynamic_index_buffer(state.index_buffer_handle, 0, state.index_size); - const bgfx_memory_t* ibm = bgfx_copy(state.batched_indices, sizeof(uint16_t) * state.index_size); - bgfx_update_dynamic_index_buffer(state.index_buffer_handle, 0, ibm); - bgfx_set_state( BGFX_STATE_CULL_CW | BGFX_STATE_WRITE_RGB | @@ -426,6 +424,18 @@ rodeo_renderer_flush(void) 0 ); + // upload remaining batched vertices + bgfx_set_transient_vertex_buffer(0, &state.vertex_buffer_handle, 0, state.vertex_size); + //const bgfx_memory_t* vbm = bgfx_copy(state.batched_vertices, sizeof(rodeo_vertex_t) * state.vertex_size); + //bgfx_update_dynamic_vertex_buffer(state.vertex_buffer_handle, 0, vbm); + + // upload remaining batched indices + bgfx_set_transient_index_buffer(&state.index_buffer_handle, 0, state.index_size); + //bgfx_set_dynamic_index_buffer(state.index_buffer_handle, 0, state.index_size); + //const bgfx_memory_t* ibm = bgfx_copy(state.batched_indices, sizeof(uint16_t) * state.index_size); + //bgfx_update_dynamic_index_buffer(state.index_buffer_handle, 0, ibm); + + // submit vertices & batches bgfx_submit(0, state.program_shader, 0, BGFX_DISCARD_NONE); @@ -433,6 +443,9 @@ rodeo_renderer_flush(void) state.vertex_size = 0; state.index_size = 0; state.index_count = 0; + + // allocate new buffers + irodeo_render_buffer_transient_alloc(); } state.active_texture_p = NULL; } @@ -606,7 +619,7 @@ rodeo_texture_2d_draw( }; state.vertex_size += 1; - index_type_t indices[] = + irodeo_index_type_t indices[] = { 0, 1, 3, 1, 2, 3 @@ -768,7 +781,7 @@ rodeo_frame_limit_set(uint32_t limit) { #ifdef __EMSCRIPTEN__ rodeo_log( - rodeo_loglevel_warning, + rodeo_logLevel_warning, "Framerate limit cannot be set on web platform. Limit is enforced by platform to 60fps" ); #else diff --git a/src/rodeo_internal.h b/src/rodeo_internal.h index 5d78ebf..6e60314 100644 --- a/src/rodeo_internal.h +++ b/src/rodeo_internal.h @@ -15,9 +15,11 @@ mrodeo_bgfx_vertex_layout_do(vertex_layout) \ bgfx_vertex_layout_end(vertex_layout) \ ) +void +irodeo_render_buffer_transient_alloc(void); + bgfx_shader_handle_t -irodeo_\ -shader_load(const rodeo_string_t path); +irodeo_shader_load(const rodeo_string_t path); void irodeo_random_seed_set(stc64_t seed); diff --git a/src/rodeo_internal_types.h b/src/rodeo_internal_types.h index 2719b07..149db6b 100644 --- a/src/rodeo_internal_types.h +++ b/src/rodeo_internal_types.h @@ -14,7 +14,7 @@ #include "bgfx/c99/bgfx.h" #include "stc/crandom.h" -typedef uint16_t index_type_t; +typedef uint16_t irodeo_index_type_t; typedef struct { @@ -27,13 +27,16 @@ typedef struct bool quit; bgfx_vertex_layout_t vertex_layout; - bgfx_dynamic_vertex_buffer_handle_t vertex_buffer_handle; - bgfx_dynamic_index_buffer_handle_t index_buffer_handle; - rodeo_vertex_t batched_vertices[mrodeo_vertex_size_max]; - index_type_t vertex_size; - index_type_t index_count; - index_type_t index_size; - index_type_t batched_indices[(mrodeo_vertex_size_max / 4) * 6]; + //bgfx_dynamic_vertex_buffer_handle_t vertex_buffer_handle; + //bgfx_dynamic_index_buffer_handle_t index_buffer_handle; + bgfx_transient_vertex_buffer_t vertex_buffer_handle; + bgfx_transient_index_buffer_t index_buffer_handle; + rodeo_vertex_t *batched_vertices; + irodeo_index_type_t *batched_indices; + irodeo_index_type_t vertex_size; + irodeo_index_type_t index_count; + irodeo_index_type_t index_size; + //irodeo_index_type_t batched_indices[(mrodeo_vertex_size_max / 4) * 6]; rodeo_texture_2d_t default_texture; bgfx_texture_handle_t *active_texture_p; bgfx_shader_handle_t vertex_shader; @@ -55,5 +58,4 @@ struct irodeo_texture_internal_t { bgfx_texture_handle_t texture_bgfx; - //bgfx_uniform_handle_t sampler_bgfx; }; |
