From 50022f6de76759660b95058b25ba78deb88dbd06 Mon Sep 17 00:00:00 2001 From: Sarthak Singh Date: Sun, 30 Nov 2025 03:11:44 +0530 Subject: [PATCH 1/3] Fix crash on exit due to destroyed surface texture --- crates/bevy_render/src/view/mod.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/bevy_render/src/view/mod.rs b/crates/bevy_render/src/view/mod.rs index 9a3d610087c63..317c0cda043a6 100644 --- a/crates/bevy_render/src/view/mod.rs +++ b/crates/bevy_render/src/view/mod.rs @@ -1050,10 +1050,14 @@ pub fn prepare_view_targets( for (entity, camera, view, texture_usage, msaa) in cameras.iter() { let (Some(target_size), Some(target)) = (camera.physical_target_size, &camera.target) else { + commands.entity(entity).try_remove::(); + continue; }; let Some(out_attachment) = view_target_attachments.get(target) else { + commands.entity(entity).try_remove::(); + continue; }; From 72bd05a0c4220f0cbd3f4e0f52931461987f9bf5 Mon Sep 17 00:00:00 2001 From: Sarthak Singh <35749450+SarthakSingh31@users.noreply.github.com> Date: Tue, 2 Dec 2025 10:22:43 +0530 Subject: [PATCH 2/3] Update crates/bevy_render/src/view/mod.rs Co-authored-by: IceSentry --- crates/bevy_render/src/view/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/bevy_render/src/view/mod.rs b/crates/bevy_render/src/view/mod.rs index 317c0cda043a6..4acbc93b33e71 100644 --- a/crates/bevy_render/src/view/mod.rs +++ b/crates/bevy_render/src/view/mod.rs @@ -1056,6 +1056,9 @@ pub fn prepare_view_targets( }; let Some(out_attachment) = view_target_attachments.get(target) else { + // If we can't find an output attachment we need to remove the ViewTarget + // component to make sure the camera doesn't try rendering to an invalid + // output attachment. commands.entity(entity).try_remove::(); continue; From 6dbff9c9233fc7a29abb0917c69af38f50e39033 Mon Sep 17 00:00:00 2001 From: Sarthak Singh Date: Tue, 2 Dec 2025 10:29:37 +0530 Subject: [PATCH 3/3] Cleaned up the code --- crates/bevy_render/src/view/mod.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/crates/bevy_render/src/view/mod.rs b/crates/bevy_render/src/view/mod.rs index 4acbc93b33e71..0226f22c770b8 100644 --- a/crates/bevy_render/src/view/mod.rs +++ b/crates/bevy_render/src/view/mod.rs @@ -1048,17 +1048,16 @@ pub fn prepare_view_targets( ) { let mut textures = >::default(); for (entity, camera, view, texture_usage, msaa) in cameras.iter() { - let (Some(target_size), Some(target)) = (camera.physical_target_size, &camera.target) - else { - commands.entity(entity).try_remove::(); - - continue; - }; - - let Some(out_attachment) = view_target_attachments.get(target) else { - // If we can't find an output attachment we need to remove the ViewTarget - // component to make sure the camera doesn't try rendering to an invalid - // output attachment. + let (Some(target_size), Some(out_attachment)) = ( + camera.physical_target_size, + camera + .target + .as_ref() + .and_then(|target| view_target_attachments.get(target)), + ) else { + // If we can't find an output attachment we need to remove the ViewTarget + // component to make sure the camera doesn't try rendering to an invalid + // output attachment. commands.entity(entity).try_remove::(); continue;