# Objective Create new `NonSendMarker` that does not depend on `NonSend`. Required, in order to accomplish #17682. In that issue, we are trying to replace `!Send` resources with `thread_local!` in order to unblock the resources-as-components effort. However, when we remove all the `!Send` resources from a system, that allows the system to run on a thread other than the main thread, which is against the design of the system. So this marker gives us the control to require a system to run on the main thread without depending on `!Send` resources. ## Solution Create a new `NonSendMarker` to replace the existing one that does not depend on `NonSend`. ## Testing Other than running tests, I ran a few examples: - `window_resizing` - `wireframe` - `volumetric_fog` (looks so cool) - `rotation` - `button` There is a Mac/iOS-specific change and I do not have a Mac or iOS device to test it. I am doubtful that it would cause any problems for 2 reasons: 1. The change is the same as the non-wasm change which I did test 2. The Pixel Eagle tests run Mac tests But it wouldn't hurt if someone wanted to spin up an example that utilizes the `bevy_render` crate, which is where the Mac/iSO change was. ## Migration Guide If `NonSendMarker` is being used from `bevy_app::prelude::*`, replace it with `bevy_ecs::system::NonSendMarker` or use it from `bevy_ecs::prelude::*`. In addition to that, `NonSendMarker` does not need to be wrapped like so: ```rust fn my_system(_non_send_marker: Option<NonSend<NonSendMarker>>) { ... } ``` Instead, it can be used without any wrappers: ```rust fn my_system(_non_send_marker: NonSendMarker) { ... } ``` --------- Co-authored-by: Chris Russell <8494645+chescock@users.noreply.github.com>
64 lines
1.7 KiB
Rust
64 lines
1.7 KiB
Rust
#![cfg_attr(
|
|
any(docsrs, docsrs_dep),
|
|
expect(
|
|
internal_features,
|
|
reason = "rustdoc_internals is needed for fake_variadic"
|
|
)
|
|
)]
|
|
#![cfg_attr(any(docsrs, docsrs_dep), feature(doc_auto_cfg, rustdoc_internals))]
|
|
#![forbid(unsafe_code)]
|
|
#![doc(
|
|
html_logo_url = "https://bevyengine.org/assets/icon.png",
|
|
html_favicon_url = "https://bevyengine.org/assets/icon.png"
|
|
)]
|
|
#![no_std]
|
|
|
|
//! This crate is about everything concerning the highest-level, application layer of a Bevy app.
|
|
|
|
#[cfg(feature = "std")]
|
|
extern crate std;
|
|
|
|
extern crate alloc;
|
|
|
|
// Required to make proc macros work in bevy itself.
|
|
extern crate self as bevy_app;
|
|
|
|
mod app;
|
|
mod main_schedule;
|
|
mod panic_handler;
|
|
mod plugin;
|
|
mod plugin_group;
|
|
mod schedule_runner;
|
|
mod sub_app;
|
|
mod task_pool_plugin;
|
|
#[cfg(all(any(unix, windows), feature = "std"))]
|
|
mod terminal_ctrl_c_handler;
|
|
|
|
pub use app::*;
|
|
pub use main_schedule::*;
|
|
pub use panic_handler::*;
|
|
pub use plugin::*;
|
|
pub use plugin_group::*;
|
|
pub use schedule_runner::*;
|
|
pub use sub_app::*;
|
|
pub use task_pool_plugin::*;
|
|
#[cfg(all(any(unix, windows), feature = "std"))]
|
|
pub use terminal_ctrl_c_handler::*;
|
|
|
|
/// The app prelude.
|
|
///
|
|
/// This includes the most common types in this crate, re-exported for your convenience.
|
|
pub mod prelude {
|
|
#[doc(hidden)]
|
|
pub use crate::{
|
|
app::{App, AppExit},
|
|
main_schedule::{
|
|
First, FixedFirst, FixedLast, FixedPostUpdate, FixedPreUpdate, FixedUpdate, Last, Main,
|
|
PostStartup, PostUpdate, PreStartup, PreUpdate, RunFixedMainLoop,
|
|
RunFixedMainLoopSystem, SpawnScene, Startup, Update,
|
|
},
|
|
sub_app::SubApp,
|
|
Plugin, PluginGroup, TaskPoolOptions, TaskPoolPlugin,
|
|
};
|
|
}
|