# Objective - I'm compiling (parts of) bevy for an embedded platform with no 64bit atomic and ctrlc handler support. Some compilation errors came up. This PR contains the fixes for those. - Fix depth_bias casting in PBR material (Fixes #14169) - Negative depth_bias values were casted to 0 before this PR - f32::INFINITY depth_bias value was casted to -1 before this PR ## Solutions - Restrict 64bit atomic reflection to supported platforms - Restrict ctrlc handler to supported platforms (linux, windows or macos instead of "not wasm") - The depth bias value (f32) is first casted to i32 then u64 in order to preserve negative values ## Testing - This version compiles on a platform with no 64bit atomic support, and no ctrlc support - CtrlC handler still works on Linux and Windows (I can't test on Macos) - depth_bias: ```rust println!("{}",f32::INFINITY as u64 as i32); // Prints: -1 (old implementation) println!("{}",f32::INFINITY as i32 as u64 as i32); // Prints: 2147483647 (expected, new implementation) ``` Also ran a modified version of 3d_scene example with the following results: RED cube depth_bias: -1000.0 BLUE cube depth_bias: 0.0  RED cube depth_bias: -INF BLUE cube depth_bias: 0.0  RED cube depth_bias: INF (case reported in #14169) BLUE cube depth_bias: 0.0 (Im not completely sure whats going on with the shadows here, it seems like depth_bias has some affect to those aswell, if this is unintentional this issue was not introduced by this PR) 
123 lines
4.9 KiB
Rust
123 lines
4.9 KiB
Rust
use bevy_app::{plugin_group, Plugin};
|
|
|
|
plugin_group! {
|
|
/// This plugin group will add all the default plugins for a *Bevy* application:
|
|
pub struct DefaultPlugins {
|
|
bevy_app:::PanicHandlerPlugin,
|
|
bevy_log:::LogPlugin,
|
|
bevy_app:::TaskPoolPlugin,
|
|
bevy_diagnostic:::FrameCountPlugin,
|
|
bevy_time:::TimePlugin,
|
|
bevy_transform:::TransformPlugin,
|
|
bevy_hierarchy:::HierarchyPlugin,
|
|
bevy_diagnostic:::DiagnosticsPlugin,
|
|
bevy_input:::InputPlugin,
|
|
#[custom(cfg(not(feature = "bevy_window")))]
|
|
bevy_app:::ScheduleRunnerPlugin,
|
|
#[cfg(feature = "bevy_window")]
|
|
bevy_window:::WindowPlugin,
|
|
#[cfg(feature = "bevy_window")]
|
|
bevy_a11y:::AccessibilityPlugin,
|
|
#[custom(cfg(any(unix, windows)))]
|
|
bevy_app:::TerminalCtrlCHandlerPlugin,
|
|
#[cfg(feature = "bevy_asset")]
|
|
bevy_asset:::AssetPlugin,
|
|
#[cfg(feature = "bevy_scene")]
|
|
bevy_scene:::ScenePlugin,
|
|
#[cfg(feature = "bevy_winit")]
|
|
bevy_winit:::WinitPlugin,
|
|
#[cfg(feature = "bevy_render")]
|
|
bevy_render:::RenderPlugin,
|
|
// NOTE: Load this after renderer initialization so that it knows about the supported
|
|
// compressed texture formats.
|
|
#[cfg(feature = "bevy_render")]
|
|
bevy_render::texture:::ImagePlugin,
|
|
#[cfg(feature = "bevy_render")]
|
|
#[custom(cfg(all(not(target_arch = "wasm32"), feature = "multi_threaded")))]
|
|
bevy_render::pipelined_rendering:::PipelinedRenderingPlugin,
|
|
#[cfg(feature = "bevy_core_pipeline")]
|
|
bevy_core_pipeline:::CorePipelinePlugin,
|
|
#[cfg(feature = "bevy_sprite")]
|
|
bevy_sprite:::SpritePlugin,
|
|
#[cfg(feature = "bevy_text")]
|
|
bevy_text:::TextPlugin,
|
|
#[cfg(feature = "bevy_ui")]
|
|
bevy_ui:::UiPlugin,
|
|
#[cfg(feature = "bevy_pbr")]
|
|
bevy_pbr:::PbrPlugin,
|
|
// NOTE: Load this after renderer initialization so that it knows about the supported
|
|
// compressed texture formats.
|
|
#[cfg(feature = "bevy_gltf")]
|
|
bevy_gltf:::GltfPlugin,
|
|
#[cfg(feature = "bevy_audio")]
|
|
bevy_audio:::AudioPlugin,
|
|
#[cfg(feature = "bevy_gilrs")]
|
|
bevy_gilrs:::GilrsPlugin,
|
|
#[cfg(feature = "bevy_animation")]
|
|
bevy_animation:::AnimationPlugin,
|
|
#[cfg(feature = "bevy_gizmos")]
|
|
bevy_gizmos:::GizmoPlugin,
|
|
#[cfg(feature = "bevy_state")]
|
|
bevy_state::app:::StatesPlugin,
|
|
#[cfg(feature = "bevy_dev_tools")]
|
|
bevy_dev_tools:::DevToolsPlugin,
|
|
#[cfg(feature = "bevy_ci_testing")]
|
|
bevy_dev_tools::ci_testing:::CiTestingPlugin,
|
|
#[plugin_group]
|
|
#[cfg(feature = "bevy_picking")]
|
|
bevy_picking:::DefaultPickingPlugins,
|
|
#[doc(hidden)]
|
|
:IgnoreAmbiguitiesPlugin,
|
|
}
|
|
/// [`DefaultPlugins`] obeys *Cargo* *feature* flags. Users may exert control over this plugin group
|
|
/// by disabling `default-features` in their `Cargo.toml` and enabling only those features
|
|
/// that they wish to use.
|
|
///
|
|
/// [`DefaultPlugins`] contains all the plugins typically required to build
|
|
/// a *Bevy* application which includes a *window* and presentation components.
|
|
/// For the absolute minimum number of plugins needed to run a Bevy application, see [`MinimalPlugins`].
|
|
}
|
|
|
|
#[derive(Default)]
|
|
struct IgnoreAmbiguitiesPlugin;
|
|
|
|
impl Plugin for IgnoreAmbiguitiesPlugin {
|
|
#[allow(unused_variables)] // Variables are used depending on enabled features
|
|
fn build(&self, app: &mut bevy_app::App) {
|
|
// bevy_ui owns the Transform and cannot be animated
|
|
#[cfg(all(feature = "bevy_animation", feature = "bevy_ui"))]
|
|
if app.is_plugin_added::<bevy_animation::AnimationPlugin>()
|
|
&& app.is_plugin_added::<bevy_ui::UiPlugin>()
|
|
{
|
|
app.ignore_ambiguity(
|
|
bevy_app::PostUpdate,
|
|
bevy_animation::advance_animations,
|
|
bevy_ui::ui_layout_system,
|
|
);
|
|
app.ignore_ambiguity(
|
|
bevy_app::PostUpdate,
|
|
bevy_animation::animate_targets,
|
|
bevy_ui::ui_layout_system,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
plugin_group! {
|
|
/// This plugin group will add the minimal plugins for a *Bevy* application:
|
|
pub struct MinimalPlugins {
|
|
bevy_app:::TaskPoolPlugin,
|
|
bevy_diagnostic:::FrameCountPlugin,
|
|
bevy_time:::TimePlugin,
|
|
bevy_app:::ScheduleRunnerPlugin,
|
|
#[cfg(feature = "bevy_ci_testing")]
|
|
bevy_dev_tools::ci_testing:::CiTestingPlugin,
|
|
}
|
|
/// This plugin group represents the absolute minimum, bare-bones, bevy application.
|
|
/// Use this if you want to have absolute control over the plugins used.
|
|
///
|
|
/// It includes a [schedule runner (`ScheduleRunnerPlugin`)](crate::app::ScheduleRunnerPlugin)
|
|
/// to provide functionality that would otherwise be driven by a windowed application's
|
|
/// *event loop* or *message loop*.
|
|
}
|