-
-
Notifications
You must be signed in to change notification settings - Fork 4k
Update winit_runner to use spawn_app for wasm32 target #16630
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Welcome, new contributor! Please make sure you've read our contributing guide and we look forward to reviewing your pull request shortly ✨ |
Co-authored-by: Martín Maita <47983254+mnmaita@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe "this is a bug" could be improved to recommend whether to open an issue in bevy or winit (whichever is relevant, idk)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just ran into the problem this PR solves and was going to make this change myself - was happy to see it already awaiting merge!
) # Objective - Fixes bevyengine#12562 - Fixes bevyengine#12195 ## Solution - Use `spawn_app` instead of `run_app` for web platform in `winit_runner` as suggested in the [document](https://docs.rs/winit/latest/winit/platform/web/trait.EventLoopExtWebSys.html#tymethod.spawn_app) ## Testing - Did you test these changes? If so, how? Tested on web. Created a react app which renders the bevy WASM app and returns the disposer to JS. Js will call the disposer on component unmount to stop the app, the disposer sends a signal to a `signal` receiver in rust which exits the app like this: ```rust fn handle_stop_signal( signal: NonSendMut<StopSignalReceiver>, window_entities: Query<(Entity, &Window)>, mut event_writer: EventWriter<WindowCloseRequested>, ) { if let Ok(_) = signal.try_recv() { for (entity, _window) in window_entities.iter() { info!("closing window entity: {:x}", entity.to_bits()); event_writer.send(WindowCloseRequested { window: entity }); } } } ``` - Are there any parts that need more testing? - No - How can other people (reviewers) test your changes? Is there anything specific they need to know? - Are all resources released after stopping the app like this? The WASM is still loaded, the LogPlugin complains on the logger re-initialization, but it's a warning anyway. - If relevant, what platforms did you test these changes on, and are there any important ones you can't test? - Tested the WASM version on web platform and the native version on MacOS. --------- Co-authored-by: Martín Maita <47983254+mnmaita@users.noreply.github.com>
Objective
Solution
spawn_app
instead ofrun_app
for web platform inwinit_runner
as suggested in the documentTesting
Tested on web. Created a react app which renders the bevy WASM app and returns the disposer to JS. Js will call the disposer on component unmount to stop the app, the disposer sends a signal to a
signal
receiver in rust which exits the app like this:Are there any parts that need more testing?
How can other people (reviewers) test your changes? Is there anything specific they need to know?
If relevant, what platforms did you test these changes on, and are there any important ones you can't test?