From 475b28ef9c58a937a6637bcf49f1b6b95d10a9f5 Mon Sep 17 00:00:00 2001 From: Bernie Innocenti Date: Sun, 23 Apr 2017 01:09:00 -0400 Subject: [PATCH] Same code now builds and runs both natively and as asmjs. --- main.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/main.rs b/main.rs index 2632712..e0d2ad2 100644 --- a/main.rs +++ b/main.rs @@ -38,23 +38,27 @@ fn gl_info(display : &glium::Display) { println!("{} context verson: {}", api, display.get_opengl_version_string()); } +#[cfg(target_os = "emscripten")] #[allow(non_camel_case_types)] type em_callback_func = unsafe extern fn(); +#[cfg(target_os = "emscripten")] extern { fn emscripten_set_main_loop(func : em_callback_func, fps : c_int, simulate_infinite_loop : c_int); } +#[cfg(target_os = "emscripten")] thread_local!(static MAIN_LOOP_CALLBACK: std::cell::RefCell<*mut c_void> = std::cell::RefCell::new(std::ptr::null_mut())); -pub fn set_main_loop_callback(callback : F) where F : FnMut() { +#[cfg(target_os = "emscripten")] +pub fn set_main_loop_callback(callback : F) where F : FnMut() -> support::Action { MAIN_LOOP_CALLBACK.with(|log| { *log.borrow_mut() = &callback as *const _ as *mut c_void; }); unsafe { emscripten_set_main_loop(wrapper::, 0, 1); } - unsafe extern "C" fn wrapper() where F : FnMut() { + unsafe extern "C" fn wrapper() where F : FnMut() -> support::Action { MAIN_LOOP_CALLBACK.with(|z| { let closure = *z.borrow_mut() as *mut F; (*closure)(); @@ -62,6 +66,11 @@ pub fn set_main_loop_callback(callback : F) where F : FnMut() { } } +#[cfg(not(target_os = "emscripten"))] +pub fn set_main_loop_callback(callback : F) where F : FnMut() -> support::Action { + support::start_loop(callback); +} + fn main() { let _soundplayer = sound::start(); @@ -95,7 +104,6 @@ fn main() { zmax: 1.1, }; - //support::start_loop(|| { set_main_loop_callback(|| { camera.update(); @@ -141,7 +149,7 @@ fn main() { glutin::Event::Closed | KeyboardInput(Pressed, _, Some(VirtualKeyCode::Escape)) | KeyboardInput(Pressed, _, Some(VirtualKeyCode::Q)) => { - //return support::Action::Stop + return support::Action::Stop }, KeyboardInput(Pressed, _, Some(VirtualKeyCode::B)) => { bounding_box_enabled ^= true; @@ -175,6 +183,6 @@ fn main() { } } - //support::Action::Continue + support::Action::Continue }); } -- 2.25.1