diff options
| author | realtradam <[email protected]> | 2023-03-04 19:52:09 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2023-03-04 19:52:09 -0500 |
| commit | 4bd628fc4a9a8244c70fc241f9e6576e4af2d35e (patch) | |
| tree | c008f3cde4a5197084d55115cdf272b2796a8527 /src | |
| parent | b172c2a6b22796dc16c059979d2ec6108b0402e4 (diff) | |
| download | RodeoKit-4bd628fc4a9a8244c70fc241f9e6576e4af2d35e.tar.gz RodeoKit-4bd628fc4a9a8244c70fc241f9e6576e4af2d35e.zip | |
fix build system and add emscripten
Diffstat (limited to 'src')
| -rw-r--r-- | src/private/rodeo_internal_types.h | 3 | ||||
| -rw-r--r-- | src/rodeo.c | 86 | ||||
| -rw-r--r-- | src/rodeo_types.c | 3 |
3 files changed, 85 insertions, 7 deletions
diff --git a/src/private/rodeo_internal_types.h b/src/private/rodeo_internal_types.h index 1dfa485..2114942 100644 --- a/src/private/rodeo_internal_types.h +++ b/src/private/rodeo_internal_types.h @@ -5,6 +5,9 @@ #include "rodeo_types.h" // system +#if __EMSCRIPTEN__ +#include <emscripten/emscripten.h> +#endif #include "SDL2/SDL.h" #include "SDL2/SDL_syswm.h" #include "bgfx/c99/bgfx.h" diff --git a/src/rodeo.c b/src/rodeo.c index e50debb..3a60b92 100644 --- a/src/rodeo.c +++ b/src/rodeo.c @@ -9,6 +9,9 @@ #include "private/rodeo_error.h" // external +#if __EMSCRIPTEN__ +#include <emscripten/emscripten.h> +#endif #include "SDL2/SDL.h" #include "SDL2/SDL_syswm.h" #include "bgfx/c99/bgfx.h" @@ -42,12 +45,15 @@ init_window( state->screen_height = screen_height; state->screen_width = screen_width; + printf("SDL_Init...\n"); if(SDL_Init(SDL_INIT_VIDEO) < 0) { printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } + printf("done\n"); + printf("SDL_CreateWindow...\n"); state->window = SDL_CreateWindow( title, SDL_WINDOWPOS_UNDEFINED, @@ -56,13 +62,15 @@ init_window( screen_height, SDL_WINDOW_SHOWN ); + printf("done\n"); if(state->window == NULL) { printf("Window could not be created! SDL_Error %s\n", SDL_GetError()); exit(EXIT_FAILURE); } - +#if !__EMSCRIPTEN__ + printf("SDL_VERSION...\n"); SDL_VERSION(&state->wmi.version); if( !SDL_GetWindowWMInfo( @@ -74,14 +82,22 @@ init_window( printf("SDL_Error %s\n", SDL_GetError()); exit(EXIT_FAILURE); } - + printf("done\n"); bgfx_render_frame(-1); +#endif + bgfx_platform_data_t pd; memset(&pd, 0, sizeof(bgfx_platform_data_t)); +#if !__EMSCRIPTEN__ + // x11 pd.ndt = state->wmi.info.x11.display; pd.nwh = (void*)(uintptr_t)state->wmi.info.x11.window; +#else + // web + pd.nwh = (void*)"#canvas"; +#endif bgfx_init_t init = {0}; bgfx_init_ctor(&init); @@ -105,7 +121,6 @@ init_window( 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); @@ -116,8 +131,38 @@ init_window( state->index_buffer_handle = bgfx_create_dynamic_index_buffer((RODEO__MAX_VERTEX_SIZE / 4) * 6, BGFX_BUFFER_NONE); // load shaders - state->vertex_shader = _Rodeo__load_shader("./external/RodeoEngine/build_dir/simple.vertex.bin"); - state->fragment_shader = _Rodeo__load_shader("./external/RodeoEngine/build_dir/simple.fragment.bin"); + const char* shader_path = "???"; + switch(bgfx_get_renderer_type()) { + case BGFX_RENDERER_TYPE_NOOP: + printf("Noop renderer error"); + exit(EXIT_FAILURE); + case BGFX_RENDERER_TYPE_OPENGLES: + shader_path = "shaders/100_es/"; + break; + case BGFX_RENDERER_TYPE_VULKAN: + shader_path = "shaders/spirv/"; + break; + default: + printf("No shaders for selected renderer. Exiting..."); + exit(EXIT_FAILURE); + } + const char* vertex_shader_filename = "simple.vertex.bin"; + const char* fragment_shader_filename = "simple.fragment.bin"; + size_t shader_length = strlen(shader_path); + size_t fragment_length = strlen(fragment_shader_filename); + size_t vertex_length = strlen(vertex_shader_filename); + char *fragment_path = (char *)malloc(shader_length + fragment_length); + char *vertex_path = (char *)malloc(shader_length + vertex_length); + memcpy(fragment_path, shader_path, shader_length); + memcpy(&fragment_path[shader_length], fragment_shader_filename, fragment_length); + memcpy(vertex_path, shader_path, shader_length); + memcpy(&vertex_path[shader_length], vertex_shader_filename, vertex_length); + + fragment_path[shader_length + fragment_length] = 0; + vertex_path[shader_length + vertex_length] = 0; + + state->vertex_shader = _Rodeo__load_shader(vertex_path); + state->fragment_shader = _Rodeo__load_shader(fragment_path); state->program_shader = bgfx_create_program( state->vertex_shader, state->fragment_shader, @@ -219,6 +264,23 @@ end(Rodeo__data_p state) } } +void +Rodeo__\ +execute_main_loop( + Rodeo__data_p state, + Rodeo__main_loop_p main_loop_function +) +{ +#if __EMSCRIPTEN__ + emscripten_set_main_loop(main_loop_function, 0, 1); +#else + while(!Rodeo__should_quit(state)) + { + main_loop_function(); + } +#endif +} + bool Rodeo__\ should_quit(Rodeo__data_p state) @@ -228,6 +290,13 @@ should_quit(Rodeo__data_p state) void Rodeo__\ +set_quit(Rodeo__data_p state, bool quit) +{ + state->quit = quit; +} + +void +Rodeo__\ draw_debug_text(u_int16_t x, u_int16_t y, const char *format, ...) { va_list argList; @@ -356,7 +425,7 @@ load_shader(const char* path) if(!file) { - printf("Error: shader file \"%s\" not found", path); + printf("Error: shader file \"%s\" not found\n", path); return invalid; } @@ -369,5 +438,8 @@ load_shader(const char* path) mem->data[mem->size - 1] = '\0'; fclose(file); - return bgfx_create_shader(mem); + bgfx_shader_handle_t shader = bgfx_create_shader(mem); + printf("Shader loaded as idx: %d\n", shader.idx); + + return shader; } diff --git a/src/rodeo_types.c b/src/rodeo_types.c index d2c56aa..ff87e27 100644 --- a/src/rodeo_types.c +++ b/src/rodeo_types.c @@ -4,6 +4,9 @@ #include "rodeo_config.h" // external +#if __EMSCRIPTEN__ +#include <emscripten/emscripten.h> +#endif #include "SDL2/SDL.h" #include "SDL2/SDL_syswm.h" #include "bgfx/c99/bgfx.h" |
