@@ -46,7 +46,7 @@ use bevy_window::{
46
46
WindowScaleFactorChanged ,
47
47
} ;
48
48
use derive_more:: derive:: From ;
49
- use tracing:: warn;
49
+ use tracing:: { error , warn} ;
50
50
use wgpu:: TextureFormat ;
51
51
52
52
#[ derive( Default ) ]
@@ -235,11 +235,15 @@ impl NormalizedRenderTarget {
235
235
scale_factor : window. resolution . scale_factor ( ) ,
236
236
} ) ,
237
237
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
+ }
243
247
}
244
248
NormalizedRenderTarget :: TextureView ( id) => {
245
249
manual_texture_views. get ( id) . map ( |tex| RenderTargetInfo {
@@ -332,27 +336,31 @@ pub fn camera_system(
332
336
// This can happen when the window is moved between monitors with different DPIs.
333
337
// Without this, the viewport will take a smaller portion of the window moved to
334
338
// a higher DPI monitor.
335
- if normalized_target
339
+ match normalized_target
336
340
. is_changed ( & scale_factor_changed_window_ids, & HashSet :: default ( ) )
337
341
{
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
+ }
354
361
}
355
362
}
363
+ false => ( ) ,
356
364
}
357
365
// This check is needed because when changing WindowMode to Fullscreen, the viewport may have invalid
358
366
// arguments due to a sudden change on the window size to a lower value.
0 commit comments