camera: always update camera uniform buffers

This commit is contained in:
Carter Anderson 2020-05-30 12:43:27 -07:00
parent 6e76296ce0
commit e59385472c

View File

@ -7,9 +7,7 @@ use crate::{
Camera, Camera,
}; };
use bevy_app::Events;
use bevy_transform::prelude::*; use bevy_transform::prelude::*;
use bevy_window::WindowResized;
use legion::prelude::*; use legion::prelude::*;
use std::borrow::Cow; use std::borrow::Cow;
use zerocopy::AsBytes; use zerocopy::AsBytes;
@ -47,15 +45,13 @@ impl Node for CameraNode {
impl SystemNode for CameraNode { impl SystemNode for CameraNode {
fn get_system(&self) -> Box<dyn Schedulable> { fn get_system(&self) -> Box<dyn Schedulable> {
let mut camera_buffer = None; let mut camera_buffer = None;
let mut window_resized_event_reader = None;
let mut command_queue = self.command_queue.clone(); let mut command_queue = self.command_queue.clone();
let uniform_name = self.uniform_name.clone(); let uniform_name = self.uniform_name.clone();
(move |world: &mut SubWorld, (move |world: &mut SubWorld,
render_resources: Res<RenderResources>, render_resources: Res<RenderResources>,
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel // PERF: this write on RenderResourceAssignments will prevent this system from running in parallel
// with other systems that do the same // with other systems that do the same
mut render_resource_assignments: ResMut<RenderResourceAssignments>, mut render_resource_assignments: ResMut<RenderResourceAssignments>,
window_resized_events: Res<Events<WindowResized>>,
query: &mut Query<(Read<Camera>, Read<LocalToWorld>)>| { query: &mut Query<(Read<Camera>, Read<LocalToWorld>)>| {
let render_resources = &render_resources.context; let render_resources = &render_resources.context;
if camera_buffer.is_none() { if camera_buffer.is_none() {
@ -75,14 +71,6 @@ impl SystemNode for CameraNode {
); );
camera_buffer = Some(buffer); camera_buffer = Some(buffer);
} }
if window_resized_event_reader.is_none() {
window_resized_event_reader = Some(window_resized_events.get_reader());
}
let primary_window_resized_event = window_resized_event_reader
.as_mut()
.unwrap()
.find_latest(&window_resized_events, |event| event.is_primary);
if let Some(_) = primary_window_resized_event {
let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>(); let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>();
if let Some((camera, local_to_world)) = query if let Some((camera, local_to_world)) = query
.iter(world) .iter(world)
@ -111,7 +99,6 @@ impl SystemNode for CameraNode {
); );
command_queue.free_buffer(tmp_buffer); command_queue.free_buffer(tmp_buffer);
} }
}
}) })
.system() .system()
} }