From 533125adb5fc7439047f894802db724b6a43257d Mon Sep 17 00:00:00 2001 From: Daniel McNab <36049421+DJMcNab@users.noreply.github.com> Date: Mon, 9 May 2022 20:44:49 +0100 Subject: [PATCH] Merge problems and cleanup --- crates/bevy_pbr/src/render/light.rs | 19 +++++++++---------- crates/bevy_pbr/src/wireframe.rs | 9 +++++---- crates/bevy_render/src/camera/camera.rs | 16 ++++++++++------ crates/bevy_render/src/render_component.rs | 14 +++++++++----- crates/bevy_render/src/view/window.rs | 2 +- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/crates/bevy_pbr/src/render/light.rs b/crates/bevy_pbr/src/render/light.rs index f0cdba239f04fb..8f52fcb82457a2 100644 --- a/crates/bevy_pbr/src/render/light.rs +++ b/crates/bevy_pbr/src/render/light.rs @@ -421,16 +421,16 @@ pub fn extract_clusters( #[allow(clippy::too_many_arguments)] pub fn extract_lights( mut commands: Commands, - ambient_light: Extract>, - point_light_shadow_map: Extract>, - directional_light_shadow_map: Extract>, - global_point_lights: Extract>, - mut point_lights: Extract>, + mut ambient_light: Extract>, + mut point_light_shadow_map: Extract>, + mut directional_light_shadow_map: Extract>, + mut global_point_lights: Extract>, + mut point_lights: Extract>, mut directional_lights: Extract< Query<( Entity, &DirectionalLight, - &mut VisibleEntities, + &VisibleEntities, &GlobalTransform, &Visibility, )>, @@ -457,13 +457,12 @@ pub fn extract_lights( // https://catlikecoding.com/unity/tutorials/custom-srp/point-and-spot-shadows/ let point_light_texel_size = 2.0 / point_light_shadow_map.size as f32; - let point_lights = point_lights.value(); + let mut point_lights = point_lights.value(); let mut point_lights_values = Vec::with_capacity(*previous_point_lights_len); - for entity in global_point_lights.iter().copied() { + for entity in global_point_lights.value().iter().copied() { if let Ok((point_light, cubemap_visible_entities, transform)) = point_lights.get_mut(entity) { - let render_cubemap_visible_entities = - std::mem::take(cubemap_visible_entities.into_inner()); + let render_cubemap_visible_entities = cubemap_visible_entities.clone(); point_lights_values.push(( entity, ( diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index cfcb21ca9b4f58..0b57cd09e9c249 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -41,6 +41,7 @@ impl Plugin for WireframePlugin { render_app .add_render_command::() .init_resource::() + .init_resource::() .init_resource::>() .add_system_to_stage(RenderStage::Extract, extract_wireframes) .add_system_to_stage(RenderStage::Extract, extract_wireframe_config) @@ -50,12 +51,12 @@ impl Plugin for WireframePlugin { } fn extract_wireframe_config( - mut commands: Commands, + mut config: ResMut, mut wireframe_config: Extract>, ) { - let wireframe_config = wireframe_config.value(); - if wireframe_config.is_added() || wireframe_config.is_changed() { - commands.insert_resource(wireframe_config.into_inner().clone()); + let extracted_config = wireframe_config.value(); + if extracted_config.is_changed() { + *config = extracted_config.clone(); } } diff --git a/crates/bevy_render/src/camera/camera.rs b/crates/bevy_render/src/camera/camera.rs index 4d6ba776f62e38..12e07ac86cc1e8 100644 --- a/crates/bevy_render/src/camera/camera.rs +++ b/crates/bevy_render/src/camera/camera.rs @@ -244,7 +244,9 @@ impl Plugin for CameraTypePlugin { .add_startup_system_to_stage(StartupStage::PostStartup, set_active_camera::) .add_system_to_stage(CoreStage::PostUpdate, set_active_camera::); if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { - render_app.add_system_to_stage(RenderStage::Extract, extract_cameras::); + render_app + .init_resource::>() + .add_system_to_stage(RenderStage::Extract, extract_cameras::); } } } @@ -315,13 +317,17 @@ pub struct ExtractedCamera { pub fn extract_cameras( mut commands: Commands, + mut active_camera: ResMut>, mut windows: Extract>, mut images: Extract>>, - mut active_camera: Extract>>, + mut extracted_active_camera: Extract>>, mut query: Extract>>, ) { - let active_camera = active_camera.value(); - if let Some(entity) = active_camera.get() { + let extracted_active_camera = extracted_active_camera.value(); + if extracted_active_camera.is_changed() { + *active_camera = extracted_active_camera.clone(); + } + if let Some(entity) = extracted_active_camera.get() { if let Ok((camera, transform, visible_entities)) = query.value().get(entity) { if let Some(size) = camera .target @@ -346,6 +352,4 @@ pub fn extract_cameras( } } } - - commands.insert_resource(active_camera.clone()) } diff --git a/crates/bevy_render/src/render_component.rs b/crates/bevy_render/src/render_component.rs index 81057cee9639f4..3bf65ee564e5e6 100644 --- a/crates/bevy_render/src/render_component.rs +++ b/crates/bevy_render/src/render_component.rs @@ -9,8 +9,8 @@ use bevy_asset::{Asset, Handle}; use bevy_ecs::{ component::Component, prelude::*, - query::{QueryItem, ReadOnlyFetch, WorldQuery, WorldQueryGats}, - system::{lifetimeless::Read, StaticSystemParam}, + query::{QueryItem, WorldQuery}, + system::{lifetimeless::Read, ReadOnlySystemParamFetch, StaticSystemParam, SystemParam}, }; use std::{marker::PhantomData, ops::Deref}; @@ -155,7 +155,11 @@ impl ExtractComponentPlugin { } } -impl Plugin for ExtractComponentPlugin { +impl Plugin for ExtractComponentPlugin +where + for<'w, 's> as SystemParam>::Fetch: + ReadOnlySystemParamFetch, +{ fn build(&self, app: &mut App) { if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { if self.only_extract_visible { @@ -184,8 +188,8 @@ fn extract_components( mut previous_len: Local, mut query: Extract>, ) where - ::State: ReadOnlyFetch, - for<'x> <::Query as WorldQueryGats<'x>>::Fetch: ReadOnlyFetch, + for<'w, 's> as SystemParam>::Fetch: + ReadOnlySystemParamFetch, { let mut values = Vec::with_capacity(*previous_len); for (entity, query_item) in query.value().iter_mut() { diff --git a/crates/bevy_render/src/view/window.rs b/crates/bevy_render/src/view/window.rs index c12dec4b42837b..bc12da1a83d762 100644 --- a/crates/bevy_render/src/view/window.rs +++ b/crates/bevy_render/src/view/window.rs @@ -108,7 +108,7 @@ fn extract_windows( extracted_window.physical_height = new_height; } } - for closed_window in closed.iter() { + for closed_window in closed.value().iter() { extracted_windows.remove(&closed_window.id); } }