diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rodeo.c | 115 | ||||
| -rw-r--r-- | src/rodeo_internal.h | 15 | ||||
| -rw-r--r-- | src/rodeo_internal_types.h | 8 | ||||
| -rw-r--r-- | src/shaders/simple.fragment.sc | 6 | ||||
| -rw-r--r-- | src/shaders/simple.vertex.sc | 5 | ||||
| -rw-r--r-- | src/shaders/varying.def.sc | 2 |
6 files changed, 131 insertions, 20 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) { diff --git a/src/rodeo_internal.h b/src/rodeo_internal.h index 576bc9b..4939edd 100644 --- a/src/rodeo_internal.h +++ b/src/rodeo_internal.h @@ -1,7 +1,20 @@ -// private internal +// -- internal -- +// public +#include "rodeo.h" +// private #include "rodeo_internal_types.h" +#define \ +mrodeo_bgfx_vertex_layout_do(vertex_layout) \ + mrodeo_defer_do( \ + bgfx_vertex_layout_begin( \ + vertex_layout, \ + bgfx_get_renderer_type() \ + ), \ + bgfx_vertex_layout_end(vertex_layout) \ + ) + bgfx_shader_handle_t irodeo_\ shader_load(const rodeo_string_t path); diff --git a/src/rodeo_internal_types.h b/src/rodeo_internal_types.h index 82a3140..174f6b1 100644 --- a/src/rodeo_internal_types.h +++ b/src/rodeo_internal_types.h @@ -1,12 +1,13 @@ #pragma once -// public internal +// -- internal -- +// public #include "rodeo_config.h" #include "rodeo_types.h" -// system +// -- system -- #if __EMSCRIPTEN__ -#include <emscripten/emscripten.h> + #include <emscripten/emscripten.h> #endif #include "SDL2/SDL.h" #include "SDL2/SDL_syswm.h" @@ -30,6 +31,7 @@ typedef struct uint16_t index_count; uint16_t index_size; uint16_t batched_indices[(mrodeo_vertex_size_max / 4) * 6]; + uint16_t active_texture_id; bgfx_shader_handle_t vertex_shader; bgfx_shader_handle_t fragment_shader; bgfx_program_handle_t program_shader; diff --git a/src/shaders/simple.fragment.sc b/src/shaders/simple.fragment.sc index 3a58d8d..72973ee 100644 --- a/src/shaders/simple.fragment.sc +++ b/src/shaders/simple.fragment.sc @@ -1,8 +1,10 @@ -$input v_color0 +$input v_color0, v_texcoord0 #include <bgfx_shader.sh> +SAMPLER2D(s_texColor, 0); + void main() { - gl_FragColor = v_color0; + gl_FragColor = v_color0 * texture2D(s_texColor, v_texcoord0); } diff --git a/src/shaders/simple.vertex.sc b/src/shaders/simple.vertex.sc index 56b8736..b90a0c7 100644 --- a/src/shaders/simple.vertex.sc +++ b/src/shaders/simple.vertex.sc @@ -1,5 +1,5 @@ -$input a_position, a_color0 -$output v_color0 +$input a_position, a_color0, a_texcoord0 +$output v_color0, v_texcoord0 #include <bgfx_shader.sh> @@ -7,4 +7,5 @@ void main() { gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0)); v_color0 = a_color0; + v_texcoord0 = a_texcoord0; } diff --git a/src/shaders/varying.def.sc b/src/shaders/varying.def.sc index 2ae9226..fccdc90 100644 --- a/src/shaders/varying.def.sc +++ b/src/shaders/varying.def.sc @@ -1,6 +1,8 @@ // outputs; vec4 v_color0 : COLOR0; +vec2 v_texcoord0 : TEXCOORD0; // inputs; vec3 a_position : POSITION; vec4 a_color0 : COLOR0; +vec2 a_texcoord0 : TEXCOORD0; |
