summaryrefslogtreecommitdiffhomepage
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
parent6a0ef52763cee6e6d7c631516461e0600d9a2da1 (diff)
downloadRodeoKit-271ff350f3155001418876a2fd5829b77be1e976.tar.gz
RodeoKit-271ff350f3155001418876a2fd5829b77be1e976.zip
switch over to using transient buffers
-rw-r--r--include/rodeo_config.h4
-rw-r--r--src/rodeo.c49
-rw-r--r--src/rodeo_internal.h6
-rw-r--r--src/rodeo_internal_types.h20
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;
};