diff --git a/crates/bevy_render/src/camera/camera_driver_node.rs b/crates/bevy_render/src/camera/camera_driver_node.rs index b56bc52fc802a..38ba4ac185749 100644 --- a/crates/bevy_render/src/camera/camera_driver_node.rs +++ b/crates/bevy_render/src/camera/camera_driver_node.rs @@ -31,12 +31,24 @@ impl Node for CameraDriverNode { world: &World, ) -> Result<(), NodeRunError> { let sorted_cameras = world.resource::(); + let windows = world.resource::(); let mut camera_windows = HashSet::new(); for sorted_camera in &sorted_cameras.0 { - if let Ok(camera) = self.cameras.get_manual(world, sorted_camera.entity) { - if let Some(NormalizedRenderTarget::Window(window_ref)) = camera.target { - camera_windows.insert(window_ref.entity()); + let Ok(camera) = self.cameras.get_manual(world, sorted_camera.entity) else { + continue; + }; + + let mut run_graph = true; + if let Some(NormalizedRenderTarget::Window(window_ref)) = camera.target { + let window_entity = window_ref.entity(); + if windows.windows.get(&window_entity).is_some() { + camera_windows.insert(window_entity); + } else { + // The window doesn't exist anymore so we don't need to run the graph + run_graph = false; } + } + if run_graph { graph.run_sub_graph( camera.render_graph.clone(), vec![],