diff --git a/src/lib.rs b/src/lib.rs index c8d8453..0331a45 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,17 +1,27 @@ -use agnostic_interface::raylib_impl::RaylibGame; -use faux_quicksilver::Window; -use original_impl::GameState; - mod agnostic_interface; mod faux_quicksilver; mod original_impl; mod shaders; +use agnostic_interface::raylib_impl::RaylibGame; +use faux_quicksilver::Window; +use original_impl::GameState; + struct WasmState { pub window: Window, pub game_state: GameState, } +impl WasmState { + pub fn get_window_mut(&mut self) -> &mut Window { + &mut self.window + } + + pub fn get_state_mut(&mut self) -> &mut GameState { + &mut self.game_state + } +} + #[no_mangle] pub extern "C" fn ld45_initialize() -> *mut ::std::os::raw::c_void { let game_interface = RaylibGame::new_boxed(800, 600); @@ -25,14 +35,14 @@ pub extern "C" fn ld45_initialize() -> *mut ::std::os::raw::c_void { pub extern "C" fn ld45_iterate(context: *mut ::std::os::raw::c_void) { let state_ptr = context as *mut WasmState; unsafe { - (*state_ptr).window.update_music().unwrap(); + (*state_ptr).get_window_mut().update_music().unwrap(); (*state_ptr) - .game_state - .update(&mut (*state_ptr).window) + .get_state_mut() + .update(&mut (*state_ptr).get_window_mut()) .unwrap(); (*state_ptr) - .game_state - .draw(&mut (*state_ptr).window) + .get_state_mut() + .draw(&mut (*state_ptr).get_window_mut()) .unwrap(); } } diff --git a/wasm/Makefile b/wasm/Makefile index 9821613..cffb398 100644 --- a/wasm/Makefile +++ b/wasm/Makefile @@ -5,14 +5,22 @@ all: ld45.html ld45.html: src/main.c ../target/wasm32-unknown-emscripten/release/libld45_lib.a ${CC} -o ld45.html -s USE_GLFW=3 -Iinclude \ -Llib -lraylib \ - -L../target/wasm32-unknown-emscripten/debug -lld45_lib \ - -sSAFE_HEAP=1 \ + -L../target/wasm32-unknown-emscripten/release -lld45_lib \ + -sTOTAL_MEMORY=1024MB \ + -sALLOW_MEMORY_GROWTH=1 \ + -O2 \ + -sEXPORTED_FUNCTIONS="['_malloc', '_main']" \ -sEXPORTED_RUNTIME_METHODS=ccall,cwrap \ +-fsanitize=address \ +-sWARN_UNALIGNED=1 \ --preload-file ../static src/main.c ln -sf ld45.html index.html -../target/wasm32-unknown-emscripten/debug/libld45_lib.a: ../src/lib.rs - cd ..; source "${HOME}/git/emsdk/emsdk_env.sh"; cargo build --lib --target wasm32-unknown-emscripten +#-fsanitize=address \ +#-sWARN_UNALIGNED=1 \ + +../target/wasm32-unknown-emscripten/release/libld45_lib.a: ../src/lib.rs + cd ..; source "${HOME}/git/emsdk/emsdk_env.sh"; cargo build --lib --release --target wasm32-unknown-emscripten .PHONY: clean @@ -22,3 +30,4 @@ clean: rm -f ld45.wasm rm -f ld45.data rm -f index.html + cd ..; cargo clean diff --git a/wasm/include/raylib.h b/wasm/include/raylib.h index 0ace726..187d613 120000 --- a/wasm/include/raylib.h +++ b/wasm/include/raylib.h @@ -1 +1 @@ -../raylib/raylib.h \ No newline at end of file +../../raylib/raylib.h \ No newline at end of file diff --git a/wasm/lib/libraylib.a b/wasm/lib/libraylib.a index bcc4351..09e9745 100644 Binary files a/wasm/lib/libraylib.a and b/wasm/lib/libraylib.a differ diff --git a/wasm/src/main.c b/wasm/src/main.c index 56be6a8..8363297 100644 --- a/wasm/src/main.c +++ b/wasm/src/main.c @@ -3,6 +3,8 @@ #include +#include + void main_loop(void *ud) { ld45_iterate(ud); }