diff options
Diffstat (limited to 'platform.c')
-rw-r--r-- | platform.c | 178 |
1 files changed, 102 insertions, 76 deletions
@@ -2,7 +2,11 @@ #include "render.h" #include "input.h" -#if defined(plat_posix) +#if defined(plat_emscripten) +#include <emscripten.h> +#endif + +#if defined(plat_posix) || defined(plat_emscripten) #define _POSIX_SOURCE #include <stdlib.h> @@ -167,66 +171,49 @@ void platform_quit() { app_running = 0; } -int main(int argc, char** argv) { - SDL_Window* window; - SDL_Renderer* renderer; - SDL_Texture* backbuffer; - void* bb_pixels; - SDL_Event event; - SDL_Rect src_rect, dst_rect; +/* lol, lmao + * haha */ +static SDL_Window* window; +static SDL_Renderer* renderer; +static SDL_Texture* backbuffer; +static void* bb_pixels; +static SDL_Event event; +static SDL_Rect src_rect, dst_rect; #if !no_sound - SDL_AudioSpec aud_spec; +static SDL_AudioSpec aud_spec; #endif - Button button; - int ww, wh, bb_pitch, ntw, nth; - int to_sleep, begin_time, end_time; - SDL_Joystick* joysticks[max_joysticks]; - - audio_pos = 0; - audio_len = 1024; - ticker = 0; - - SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); - - SDL_CreateWindowAndRenderer( - default_window_w, - default_window_h, - SDL_WINDOW_RESIZABLE, - &window, - &renderer - ); - - SDL_SetWindowTitle(window, game_name); - -#if !no_sound - aud_spec.freq = 22050; - aud_spec.format = AUDIO_U16; - aud_spec.channels = 1; - aud_spec.samples = 1024; - aud_spec.callback = fill_audio; - aud_spec.userdata = 0; +static Button button; +static int ww, wh, bb_pitch, ntw, nth; +static int to_sleep, begin_time, end_time; +static SDL_Joystick* joysticks[max_joysticks]; + +static void fit_texture(int w, int h) { + ntw = renderer_w; + nth = renderer_h; + texture_w = ntw; + texture_h = nth; + + /* This is kinda shit lmao. */ + while (1) { + ntw *= 2; + nth *= 2; + + if ( + ntw > w || + nth > h + ) { + break; + } - if (SDL_OpenAudio(&aud_spec, 0) < 0) { - fprintf( - stderr, - "Sound error: %s.\n", - SDL_GetError() - ); + texture_w = ntw; + texture_h = nth; } - SDL_PauseAudio(0); -#endif - - on_init(argc, argv); - - backbuffer = SDL_CreateTexture( - renderer, - SDL_PIXELFORMAT_ABGR8888, - SDL_TEXTUREACCESS_STREAMING, - renderer_w, - renderer_h - ); +} +static void main_loop() { +#if !defined(plat_emscripten) while (app_running) { +#endif begin_time = SDL_GetTicks(); reset_input(); @@ -286,27 +273,7 @@ int main(int argc, char** argv) { case SDL_WINDOWEVENT: switch (event.window.event) { case SDL_WINDOWEVENT_RESIZED: - ntw = renderer_w; - nth = renderer_h; - texture_w = ntw; - texture_h = nth; - - /* This is kinda shit lmao. */ - while (1) { - ntw *= 2; - nth *= 2; - - if ( - ntw > event.window.data1 || - nth > event.window.data2 - ) { - break; - } - - texture_w = ntw; - texture_h = nth; - } - + fit_texture(event.window.data1, event.window.data2); break; } default: @@ -369,7 +336,66 @@ int main(int argc, char** argv) { if (to_sleep > 0) { SDL_Delay(to_sleep); } +#if !defined(plat_emscripten) } +#endif +} + +int main(int argc, char** argv) { + audio_pos = 0; + audio_len = 1024; + ticker = 0; + + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); + + SDL_CreateWindowAndRenderer( + default_window_w * renderer_scale, + default_window_h * renderer_scale, + SDL_WINDOW_RESIZABLE, + &window, + &renderer + ); + + SDL_SetWindowTitle(window, game_name); + +#if !no_sound + aud_spec.freq = 22050; + aud_spec.format = AUDIO_U16; + aud_spec.channels = 1; + aud_spec.samples = 1024; + aud_spec.callback = fill_audio; + aud_spec.userdata = 0; + + if (SDL_OpenAudio(&aud_spec, 0) < 0) { + fprintf( + stderr, + "Sound error: %s.\n", + SDL_GetError() + ); + } + SDL_PauseAudio(0); +#endif + + on_init(argc, argv); + + backbuffer = SDL_CreateTexture( + renderer, + SDL_PIXELFORMAT_ABGR8888, + SDL_TEXTUREACCESS_STREAMING, + renderer_w, + renderer_h + ); + + fit_texture( + renderer_w * renderer_scale, + renderer_h * renderer_scale + ); + +#if defined(plat_emscripten) + emscripten_set_main_loop(main_loop, 0, 1); +#else + main_loop(); +#endif on_deinit(); |