@@ -23,7 +23,7 @@ use bevy_app::{App, Plugin};
23
23
use bevy_core:: FloatOrd ;
24
24
use bevy_ecs:: prelude:: * ;
25
25
use bevy_render:: {
26
- camera:: { ActiveCameras , CameraPlugin , RenderTarget } ,
26
+ camera:: { ActiveCameras , CameraPlugin , ExtractedCamera , RenderTarget } ,
27
27
color:: Color ,
28
28
render_graph:: { EmptyNode , RenderGraph , SlotInfo , SlotType } ,
29
29
render_phase:: {
@@ -393,32 +393,43 @@ pub fn prepare_core_views_system(
393
393
msaa : Res < Msaa > ,
394
394
render_device : Res < RenderDevice > ,
395
395
views_3d : Query <
396
- ( Entity , & ExtractedView ) ,
396
+ ( Entity , & ExtractedView , Option < & ExtractedCamera > ) ,
397
397
(
398
398
With < RenderPhase < Opaque3d > > ,
399
399
With < RenderPhase < AlphaMask3d > > ,
400
400
With < RenderPhase < Transparent3d > > ,
401
401
) ,
402
402
> ,
403
403
) {
404
- for ( entity, view) in views_3d. iter ( ) {
405
- let cached_texture = texture_cache. get (
406
- & render_device,
407
- TextureDescriptor {
408
- label : Some ( "view_depth_texture" ) ,
409
- size : Extent3d {
410
- depth_or_array_layers : 1 ,
411
- width : view. width as u32 ,
412
- height : view. height as u32 ,
404
+ let mut textures = HashMap :: default ( ) ;
405
+ for ( entity, view, camera) in views_3d. iter ( ) {
406
+ let mut get_cached_texture = || {
407
+ texture_cache. get (
408
+ & render_device,
409
+ TextureDescriptor {
410
+ label : Some ( "view_depth_texture" ) ,
411
+ size : Extent3d {
412
+ depth_or_array_layers : 1 ,
413
+ width : view. width as u32 ,
414
+ height : view. height as u32 ,
415
+ } ,
416
+ mip_level_count : 1 ,
417
+ sample_count : msaa. samples ,
418
+ dimension : TextureDimension :: D2 ,
419
+ format : TextureFormat :: Depth32Float , /* PERF: vulkan docs recommend using 24
420
+ * bit depth for better performance */
421
+ usage : TextureUsages :: RENDER_ATTACHMENT ,
413
422
} ,
414
- mip_level_count : 1 ,
415
- sample_count : msaa. samples ,
416
- dimension : TextureDimension :: D2 ,
417
- format : TextureFormat :: Depth32Float , /* PERF: vulkan docs recommend using 24
418
- * bit depth for better performance */
419
- usage : TextureUsages :: RENDER_ATTACHMENT ,
420
- } ,
421
- ) ;
423
+ )
424
+ } ;
425
+ let cached_texture = if let Some ( camera) = camera {
426
+ textures
427
+ . entry ( camera. target . clone ( ) )
428
+ . or_insert_with ( get_cached_texture)
429
+ . clone ( )
430
+ } else {
431
+ get_cached_texture ( )
432
+ } ;
422
433
commands. entity ( entity) . insert ( ViewDepthTexture {
423
434
texture : cached_texture. texture ,
424
435
view : cached_texture. default_view ,
0 commit comments