Skip to content

Commit 76654cd

Browse files
committed
warn on unloaded image render target
1 parent 40b6940 commit 76654cd

File tree

1 file changed

+31
-23
lines changed

1 file changed

+31
-23
lines changed

crates/bevy_render/src/camera.rs

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use bevy_window::{
4646
WindowScaleFactorChanged,
4747
};
4848
use derive_more::derive::From;
49-
use tracing::warn;
49+
use tracing::{error, warn};
5050
use wgpu::TextureFormat;
5151

5252
#[derive(Default)]
@@ -235,11 +235,15 @@ impl NormalizedRenderTarget {
235235
scale_factor: window.resolution.scale_factor(),
236236
}),
237237
NormalizedRenderTarget::Image(image_target) => {
238-
let image = images.get(&image_target.handle)?;
239-
Some(RenderTargetInfo {
240-
physical_size: image.size(),
241-
scale_factor: image_target.scale_factor.0,
242-
})
238+
if let Some(image) = images.get(&image_target.handle) {
239+
Some(RenderTargetInfo {
240+
physical_size: image.size(),
241+
scale_factor: image_target.scale_factor.0,
242+
})
243+
} else {
244+
error!("ImageRenderTarget handle unloaded. Make sure the Image's usages include RenderAssetUsages::MAIN_WORLD");
245+
None
246+
}
243247
}
244248
NormalizedRenderTarget::TextureView(id) => {
245249
manual_texture_views.get(id).map(|tex| RenderTargetInfo {
@@ -332,27 +336,31 @@ pub fn camera_system(
332336
// This can happen when the window is moved between monitors with different DPIs.
333337
// Without this, the viewport will take a smaller portion of the window moved to
334338
// a higher DPI monitor.
335-
if normalized_target
339+
match normalized_target
336340
.is_changed(&scale_factor_changed_window_ids, &HashSet::default())
337341
{
338-
if let (Some(new_scale_factor), Some(old_scale_factor)) = (
339-
new_computed_target_info
340-
.as_ref()
341-
.map(|info| info.scale_factor),
342-
camera
343-
.computed
344-
.target_info
345-
.as_ref()
346-
.map(|info| info.scale_factor),
347-
) {
348-
let resize_factor = new_scale_factor / old_scale_factor;
349-
if let Some(ref mut viewport) = camera.viewport {
350-
let resize = |vec: UVec2| (vec.as_vec2() * resize_factor).as_uvec2();
351-
viewport.physical_position = resize(viewport.physical_position);
352-
viewport.physical_size = resize(viewport.physical_size);
353-
viewport_size = Some(viewport.physical_size);
342+
true => {
343+
if let (Some(new_scale_factor), Some(old_scale_factor)) = (
344+
new_computed_target_info
345+
.as_ref()
346+
.map(|info| info.scale_factor),
347+
camera
348+
.computed
349+
.target_info
350+
.as_ref()
351+
.map(|info| info.scale_factor),
352+
) {
353+
let resize_factor = new_scale_factor / old_scale_factor;
354+
if let Some(ref mut viewport) = camera.viewport {
355+
let resize =
356+
|vec: UVec2| (vec.as_vec2() * resize_factor).as_uvec2();
357+
viewport.physical_position = resize(viewport.physical_position);
358+
viewport.physical_size = resize(viewport.physical_size);
359+
viewport_size = Some(viewport.physical_size);
360+
}
354361
}
355362
}
363+
false => (),
356364
}
357365
// This check is needed because when changing WindowMode to Fullscreen, the viewport may have invalid
358366
// arguments due to a sudden change on the window size to a lower value.

0 commit comments

Comments
 (0)