summaryrefslogtreecommitdiffhomepage
path: root/src/rodeo.c
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-04-10 19:55:20 -0400
committerrealtradam <[email protected]>2023-04-10 19:55:20 -0400
commit271ff350f3155001418876a2fd5829b77be1e976 (patch)
tree2f45ebf6805c2e2b96b22b6cab0218d0d4882eb6 /src/rodeo.c
parent6a0ef52763cee6e6d7c631516461e0600d9a2da1 (diff)
downloadRodeoKit-271ff350f3155001418876a2fd5829b77be1e976.tar.gz
RodeoKit-271ff350f3155001418876a2fd5829b77be1e976.zip
switch over to using transient buffers
Diffstat (limited to 'src/rodeo.c')
-rw-r--r--src/rodeo.c49
1 files changed, 31 insertions, 18 deletions
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