Update to glow 0.9.0. Closes #532 (#545)

This commit is contained in:
iceiix 2021-05-25 08:13:07 -07:00 committed by GitHub
parent 9e570d953d
commit 63c9d81687
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 22 deletions

4
Cargo.lock generated
View File

@ -808,9 +808,9 @@ dependencies = [
[[package]] [[package]]
name = "glow" name = "glow"
version = "0.7.2" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "072136d2c3783f3a92f131acb227bc806d3886278e2a4dc1e9990ec89ef9e70b" checksum = "4b80b98efaa8a34fce11d60dd2ce2760d5d83c373cbcc73bb87c2a3a84a54108"
dependencies = [ dependencies = [
"js-sys", "js-sys",
"slotmap", "slotmap",

View File

@ -28,7 +28,7 @@ opt-level = 1
cfg-if = "1.0.0" cfg-if = "1.0.0"
wasm-bindgen = "0.2.74" wasm-bindgen = "0.2.74"
winit = { version = "0.24.0", features = [ "web-sys" ]} winit = { version = "0.24.0", features = [ "web-sys" ]}
glow = "0.7.2" glow = "0.9.0"
byteorder = "1.4.3" byteorder = "1.4.3"
serde = "1.0.126" serde = "1.0.126"
serde_json = "1.0.61" serde_json = "1.0.61"

View File

@ -211,11 +211,11 @@ struct Opt {
cfg_if! { cfg_if! {
if #[cfg(target_arch = "wasm32")] { if #[cfg(target_arch = "wasm32")] {
use glow::HasRenderLoop;
extern crate console_error_panic_hook; extern crate console_error_panic_hook;
pub use console_error_panic_hook::set_once as set_panic_hook; pub use console_error_panic_hook::set_once as set_panic_hook;
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
#[wasm_bindgen] #[wasm_bindgen]
pub fn main() { main2(); } pub fn main() { main2(); }
@ -276,11 +276,10 @@ fn main2() {
.with_inner_size(winit::dpi::LogicalSize::new(854.0, 480.0)); .with_inner_size(winit::dpi::LogicalSize::new(854.0, 480.0));
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
let (context, shader_version, dpi_factor, winit_window, render_loop) = { let (context, shader_version, dpi_factor, winit_window) = {
let winit_window = window_builder.build(&events_loop).unwrap(); let winit_window = window_builder.build(&events_loop).unwrap();
let dpi_factor = winit_window.scale_factor(); let dpi_factor = winit_window.scale_factor();
use wasm_bindgen::JsCast;
use winit::platform::web::WindowExtWebSys; use winit::platform::web::WindowExtWebSys;
let canvas = winit_window.canvas(); let canvas = winit_window.canvas();
@ -304,7 +303,6 @@ fn main2() {
"#version 300 es", // WebGL 2 "#version 300 es", // WebGL 2
dpi_factor, dpi_factor,
winit_window, winit_window,
glow::RenderLoop::from_request_animation_frame(),
) )
}; };
@ -425,22 +423,56 @@ fn main2() {
let game = Rc::clone(&game); let game = Rc::clone(&game);
let ui_container = Rc::clone(&ui_container); let ui_container = Rc::clone(&ui_container);
render_loop.run(move |running: &mut bool| { // Based on https://github.com/grovesNL/glow/blob/2d42c5b105d979efe764191b5b1ce78fab99ffcf/src/web_sys.rs#L3258
let winit_window = winit_window.borrow_mut(); fn request_animation_frame(f: &Closure<dyn FnMut(f64)>) {
let mut game = game.borrow_mut(); web_sys::window()
let mut ui_container = ui_container.borrow_mut(); .unwrap()
.request_animation_frame(f.as_ref().unchecked_ref())
.unwrap();
}
tick_all( let f = Rc::new(RefCell::new(None));
&winit_window,
&mut game, let mut last_timestamp = None;
&mut ui_container, let mut running = true;
&mut last_frame,
&mut resui, *f.borrow_mut() = Some(Closure::wrap(Box::new({
&mut last_resource_version, let f = f.clone();
&mut vsync,
); move |timestamp: f64| {
println!("render_loop"); let dt = last_timestamp.map_or(Duration::from_secs(0), |last_timestamp: f64| {
}); let dt_ms = (timestamp - last_timestamp).max(0.0);
let dt_secs = dt_ms / 1000.0;
Duration::from_secs_f64(dt_secs)
});
last_timestamp = Some(timestamp);
let winit_window = winit_window.borrow_mut();
let mut game = game.borrow_mut();
let mut ui_container = ui_container.borrow_mut();
tick_all(
&winit_window,
&mut game,
&mut ui_container,
&mut last_frame,
&mut resui,
&mut last_resource_version,
&mut vsync,
);
println!("render_loop");
if !running {
let _ = f.borrow_mut().take();
return;
}
request_animation_frame(f.borrow().as_ref().unwrap());
}
}) as Box<dyn FnMut(f64)>));
request_animation_frame(f.borrow().as_ref().unwrap());
} }
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]