summaryrefslogtreecommitdiffhomepage
path: root/src/rodeo.c
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-03-24 03:18:42 -0400
committerrealtradam <[email protected]>2023-03-24 03:18:42 -0400
commitb2fdd29e4965b096e285a17162b268710077ea04 (patch)
tree449f4d5fc1cad055d4e5f50a1af7c7f3d16689c5 /src/rodeo.c
parent632619168ddbe7707d4b47bf2ffcc972df7a20ea (diff)
downloadRodeoKit-b2fdd29e4965b096e285a17162b268710077ea04.tar.gz
RodeoKit-b2fdd29e4965b096e285a17162b268710077ea04.zip
texture rendering prototype
Diffstat (limited to 'src/rodeo.c')
-rw-r--r--src/rodeo.c115
1 files changed, 103 insertions, 12 deletions
diff --git a/src/rodeo.c b/src/rodeo.c
index 24c6a4d..3720e10 100644
--- a/src/rodeo.c
+++ b/src/rodeo.c
@@ -1,8 +1,8 @@
// -- internal --
-// public internal
+// public
#include "rodeo.h"
#include "rodeo_types.h"
-// private internal
+// private
#include "rodeo_internal.h"
#include "rodeo_internal_types.h"
@@ -21,6 +21,18 @@
// -- system --
#include <time.h>
+bgfx_texture_handle_t
+rodeo_texture_2d_create_default(void);
+
+static const unsigned char defaultTxData[] =
+{
+ 0xff, 0xff, 0xff, 0xff // 1x1 WHITE dot
+};
+
+static bgfx_texture_handle_t texture;
+static bgfx_uniform_handle_t sampler;
+
+
static irodeo_state_t state = {0};
void
@@ -141,10 +153,15 @@ rodeo_window_init(
0
);
bgfx_set_view_rect(0, 0, 0, state.screen_width, state.screen_height);
- bgfx_vertex_layout_begin(&state.vertex_layout, bgfx_get_renderer_type());
- bgfx_vertex_layout_add(&state.vertex_layout, BGFX_ATTRIB_POSITION, 3, BGFX_ATTRIB_TYPE_FLOAT, false, false);
- bgfx_vertex_layout_add(&state.vertex_layout, BGFX_ATTRIB_COLOR0, 4, BGFX_ATTRIB_TYPE_UINT8, true, false);
- bgfx_vertex_layout_end(&state.vertex_layout);
+
+ rodeo_log(rodeo_loglevel_info, "Setting up default render pipeline...");
+ // set up vertex layout
+ mrodeo_bgfx_vertex_layout_do(&state.vertex_layout)
+ {
+ bgfx_vertex_layout_add(&state.vertex_layout, BGFX_ATTRIB_POSITION, 3, BGFX_ATTRIB_TYPE_FLOAT, false, false);
+ bgfx_vertex_layout_add(&state.vertex_layout, BGFX_ATTRIB_COLOR0, 4, BGFX_ATTRIB_TYPE_UINT8, true, false);
+ bgfx_vertex_layout_add(&state.vertex_layout, BGFX_ATTRIB_TEXCOORD0, 2, BGFX_ATTRIB_TYPE_FLOAT, true, false);
+ }
state.vertex_buffer_handle = bgfx_create_dynamic_vertex_buffer(mrodeo_vertex_size_max, &state.vertex_layout, BGFX_BUFFER_NONE);
@@ -156,7 +173,7 @@ rodeo_window_init(
case BGFX_RENDERER_TYPE_NOOP:
rodeo_log(
rodeo_loglevel_error,
- "BGFX failed to get determine an appropriate renderer."
+ "BGFX failed to get determine an appropriate renderer"
);
exit(EXIT_FAILURE);
case BGFX_RENDERER_TYPE_OPENGLES:
@@ -174,7 +191,7 @@ rodeo_window_init(
default:
rodeo_log(
rodeo_loglevel_error,
- "No shaders implemented for BGFX renderer chosen."
+ "No shaders implemented for BGFX renderer chosen"
);
exit(EXIT_FAILURE);
}
@@ -197,6 +214,17 @@ rodeo_window_init(
state.fragment_shader,
true
);
+ rodeo_log(
+ rodeo_loglevel_info,
+ "Default render pipeline finished setup"
+ );
+
+ //bgfx_texture_handle_t default_texture = rodeo_texture_2d_create_default();
+
+ sampler = bgfx_create_uniform("s_texColor", BGFX_UNIFORM_TYPE_SAMPLER, 1);
+
+ rodeo_texture_2d_create_default();
+
state.end_frame = SDL_GetPerformanceCounter();
}
@@ -310,6 +338,7 @@ rodeo_renderer_name_get(void)
void
rodeo_renderer_flush(void)
{
+ bgfx_set_texture(0, sampler, texture, UINT32_MAX);
if(state.vertex_size > 0)
{
// upload remaining batched vertices
@@ -354,25 +383,37 @@ rodeo_rectangle_draw(
state.batched_vertices[state.vertex_size] =
(rodeo_vertex_t)
{
- rectangle.width + rectangle.x, rectangle.height + rectangle.y, 0.0f, abgr
+ .x = rectangle.width + rectangle.x,
+ .y = rectangle.height + rectangle.y,
+ //.z = 0.0f,
+ .abgr = abgr
};
state.vertex_size += 1;
state.batched_vertices[state.vertex_size] =
(rodeo_vertex_t)
{
- rectangle.width + rectangle.x, rectangle.y, 0.0f, abgr
+ .x = rectangle.width + rectangle.x,
+ .y = rectangle.y,
+ //.z = 0.0f,
+ .abgr = abgr
};
state.vertex_size += 1;
state.batched_vertices[state.vertex_size] =
(rodeo_vertex_t)
{
- rectangle.x, rectangle.y, 0.0f, abgr
+ .x = rectangle.x,
+ .y = rectangle.y,
+ //.z = 0.0f,
+ .abgr = abgr
};
state.vertex_size += 1;
state.batched_vertices[state.vertex_size] =
(rodeo_vertex_t)
{
- rectangle.x, rectangle.height + rectangle.y, 0.0f, abgr
+ .x = rectangle.x,
+ .y = rectangle.height + rectangle.y,
+ //.z = 0.0f,
+ .abgr = abgr
};
state.vertex_size += 1;
@@ -404,6 +445,56 @@ rodeo_rectangle_draw(
}
}
+bgfx_texture_handle_t
+rodeo_texture_2d_create_default(
+ void
+ //uint32_t width,
+ //uint32_t height,
+ //char *memory
+)
+{
+ //uint32_t one_pixel = UINT32_MAX;//0xFFFFFFFF;
+ const bgfx_memory_t* txMem = bgfx_make_ref(defaultTxData, 4);
+ texture = bgfx_create_texture_2d(
+ 1,
+ 1,
+ false,
+ 0,
+ BGFX_TEXTURE_FORMAT_RGBA8,
+ 0,
+ txMem
+ );
+ return texture;
+}
+
+void
+rodeo_texture_2d_draw(
+ //rodeo_rectangle_t source,
+ //rodeo_rectangle_t destination,
+ //rodeo_rgba_t color,
+ //rodeo_texture_2d_p texture
+ void
+)
+{
+ // gonna need to change the shader pipeline
+ // to also accept textures
+}
+
+
+/*
+rodeo_texture_2d_p
+rodeo_texture_2d_create_from_path(rodeo_string_t path)
+{
+ // call load file into data
+ // then call create_from_data variant
+}
+
+void
+rodeo_texture_2d_destroy(rodeo_texture_2d_t *texture)
+{
+
+}
+*/
bgfx_shader_handle_t
irodeo_shader_load(const rodeo_string_t path)
{