diff --git a/sixtyfps_runtime/rendering_backends/gl/images.rs b/sixtyfps_runtime/rendering_backends/gl/images.rs index 7b1c330d7..bed492ff2 100644 --- a/sixtyfps_runtime/rendering_backends/gl/images.rs +++ b/sixtyfps_runtime/rendering_backends/gl/images.rs @@ -201,20 +201,15 @@ impl CachedImage { let image_id = image_id.clone(); let window_weak = Rc::downgrade(&renderer.window); let cached_image_weak = Rc::downgrade(&cached_image); - let event_loop_proxy_weak = Rc::downgrade(&renderer.event_loop_proxy); move || { - let (canvas, window, event_loop_proxy, cached_image) = match ( + let (canvas, window, cached_image) = match ( canvas_weak.upgrade(), window_weak.upgrade(), - event_loop_proxy_weak.upgrade(), cached_image_weak.upgrade(), ) { - ( - Some(canvas), - Some(window), - Some(event_loop_proxy), - Some(cached_image), - ) => (canvas, window, event_loop_proxy, cached_image), + (Some(canvas), Some(window), Some(cached_image)) => { + (canvas, window, cached_image) + } _ => return, }; canvas @@ -236,7 +231,12 @@ impl CachedImage { // be dispatched as the next event. We are however not in an event loop // call, so we also need to wake up the event loop. window.request_redraw(); - event_loop_proxy.send_event(crate::eventloop::CustomEvent::WakeUpAndPoll).ok(); + crate::eventloop::with_window_target(|event_loop| { + event_loop + .event_loop_proxy() + .send_event(crate::eventloop::CustomEvent::WakeUpAndPoll) + .ok(); + }); } }) .into(), diff --git a/sixtyfps_runtime/rendering_backends/gl/lib.rs b/sixtyfps_runtime/rendering_backends/gl/lib.rs index e86802a84..dc8877dae 100644 --- a/sixtyfps_runtime/rendering_backends/gl/lib.rs +++ b/sixtyfps_runtime/rendering_backends/gl/lib.rs @@ -215,8 +215,7 @@ struct GLRendererData { window: Rc, #[cfg(not(target_arch = "wasm32"))] windowed_context: RefCell>, - #[cfg(target_arch = "wasm32")] - event_loop_proxy: Rc>, + item_graphics_cache: RefCell>>, // Cache used to avoid repeatedly decoding images from disk. Entries with a count @@ -309,9 +308,6 @@ impl GLRenderer { (windowed_context, renderer) }; - #[cfg(target_arch = "wasm32")] - let event_loop_proxy = Rc::new(event_loop.event_loop_proxy().clone()); - #[cfg(target_arch = "wasm32")] let (window, renderer) = { use wasm_bindgen::JsCast; @@ -344,7 +340,6 @@ impl GLRenderer { // on the web will always have 1024x768 as size otherwise. let resize_canvas = { - let event_loop_proxy = event_loop_proxy.clone(); let window = window.clone(); let canvas = canvas.clone(); move |_: web_sys::Event| { @@ -355,7 +350,12 @@ impl GLRenderer { window.set_inner_size(existing_canvas_size); window.request_redraw(); - event_loop_proxy.send_event(eventloop::CustomEvent::WakeUpAndPoll).ok(); + crate::eventloop::with_window_target(|event_loop| { + event_loop + .event_loop_proxy() + .send_event(crate::eventloop::CustomEvent::WakeUpAndPoll) + .ok(); + }) } }; @@ -402,8 +402,6 @@ impl GLRenderer { }))), #[cfg(target_arch = "wasm32")] window, - #[cfg(target_arch = "wasm32")] - event_loop_proxy, item_graphics_cache: Default::default(), image_cache: Default::default(),