 5ee1b40298
			
		
	
	
		5ee1b40298
		
			
		
	
	
	
	
		
			
			# Objective - Simplifies/clarifies the winit loop. - Fixes #12612. ## Solution The Winit loop runs following this flow: * NewEvents * Any number of other events, that can be 0, including RequestRedraw * AboutToWait Bevy also uses the UpdateMode, to define how the next loop has to run. It can be essentially: * Continuous, using ControlFlow::Wait for windowed apps, and ControlFlow::Poll for windowless apps * Reactive/ReactiveLowPower, using ControlFlow::WaitUntil with a specific wait delay The changes are made to follow this pattern, so that * NewEvents define if the WaitUntil has been canceled because we received a Winit event. * AboutToWait: * checks if the window has to be redrawn * otherwise calls app.update() if the WaitUntil timeout has elapsed * updates the ControlFlow accordingly To make the code more logical: * AboutToWait checks if any Bevy's RequestRedraw event has been emitted * create_windows is run every cycle, at the beginning of the loop * the ActiveState (that could be renamed ActivityState) is updated in AboutToWait, symmetrically for WillSuspend/WillResume * the AppExit events are checked every loop cycle, to exit the app early ## Platform-specific testing - [x] Windows - [x] MacOs - [x] Linux (x11) - [x] Linux (Wayland) - [x] Android - [x] iOS - [x] WASM/WebGL2 (Chrome) - [x] WASM/WebGL2 (Firefox) - [x] WASM/WebGL2 (Safari) - [x] WASM/WebGpu (Chrome) --------- Co-authored-by: François <francois.mockers@vleue.com>
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
| [package]
 | |
| name = "bevy_winit"
 | |
| version = "0.14.0-dev"
 | |
| edition = "2021"
 | |
| description = "A winit window and input backend for Bevy Engine"
 | |
| homepage = "https://bevyengine.org"
 | |
| repository = "https://github.com/bevyengine/bevy"
 | |
| license = "MIT OR Apache-2.0"
 | |
| keywords = ["bevy"]
 | |
| 
 | |
| [features]
 | |
| trace = []
 | |
| wayland = ["winit/wayland", "winit/wayland-csd-adwaita"]
 | |
| x11 = ["winit/x11"]
 | |
| accesskit_unix = ["accesskit_winit/accesskit_unix", "accesskit_winit/async-io"]
 | |
| serialize = ["serde"]
 | |
| 
 | |
| [dependencies]
 | |
| # bevy
 | |
| bevy_a11y = { path = "../bevy_a11y", version = "0.14.0-dev" }
 | |
| bevy_app = { path = "../bevy_app", version = "0.14.0-dev" }
 | |
| bevy_derive = { path = "../bevy_derive", version = "0.14.0-dev" }
 | |
| bevy_ecs = { path = "../bevy_ecs", version = "0.14.0-dev" }
 | |
| bevy_hierarchy = { path = "../bevy_hierarchy", version = "0.14.0-dev" }
 | |
| bevy_input = { path = "../bevy_input", version = "0.14.0-dev" }
 | |
| bevy_log = { path = "../bevy_log", version = "0.14.0-dev" }
 | |
| bevy_math = { path = "../bevy_math", version = "0.14.0-dev" }
 | |
| bevy_reflect = { path = "../bevy_reflect", version = "0.14.0-dev" }
 | |
| bevy_window = { path = "../bevy_window", version = "0.14.0-dev" }
 | |
| bevy_utils = { path = "../bevy_utils", version = "0.14.0-dev" }
 | |
| bevy_tasks = { path = "../bevy_tasks", version = "0.14.0-dev" }
 | |
| 
 | |
| # other
 | |
| # feature rwh_06 refers to window_raw_handle@v0.6
 | |
| winit = { version = "0.29", default-features = false, features = ["rwh_06"] }
 | |
| accesskit_winit = { version = "0.17", default-features = false, features = [
 | |
|   "rwh_06",
 | |
| ] }
 | |
| approx = { version = "0.5", default-features = false }
 | |
| cfg-if = "1.0"
 | |
| raw-window-handle = "0.6"
 | |
| serde = { version = "1.0", features = ["derive"], optional = true }
 | |
| 
 | |
| [target.'cfg(target_os = "android")'.dependencies]
 | |
| winit = { version = "0.29", default-features = false, features = [
 | |
|   "android-native-activity",
 | |
|   "rwh_06",
 | |
| ] }
 | |
| 
 | |
| [target.'cfg(target_arch = "wasm32")'.dependencies]
 | |
| wasm-bindgen = { version = "0.2" }
 | |
| web-sys = "0.3"
 | |
| crossbeam-channel = "0.5"
 | |
| 
 | |
| 
 | |
| [lints]
 | |
| workspace = true
 | |
| 
 | |
| [package.metadata.docs.rs]
 | |
| rustdoc-args = ["-Zunstable-options", "--cfg", "docsrs"]
 | |
| all-features = true
 |