@@ -25,6 +25,7 @@ use bevy_ecs::{
2525} ;
2626use bevy_image:: BevyDefault as _;
2727use bevy_reflect:: { std_traits:: ReflectDefault , Reflect } ;
28+ use bevy_render:: render_graph:: RenderGraph ;
2829use bevy_render:: {
2930 extract_component:: { ExtractComponent , ExtractComponentPlugin } ,
3031 render_graph:: { NodeRunError , RenderGraphApp , RenderGraphContext , ViewNode , ViewNodeRunner } ,
@@ -233,15 +234,37 @@ impl Plugin for ScreenSpaceReflectionsPlugin {
233234
234235 render_app
235236 . init_resource :: < ScreenSpaceReflectionsPipeline > ( )
236- . init_resource :: < SpecializedRenderPipelines < ScreenSpaceReflectionsPipeline > > ( )
237- . add_render_graph_edges (
237+ . init_resource :: < SpecializedRenderPipelines < ScreenSpaceReflectionsPipeline > > ( ) ;
238+
239+ // only reference the default deferred lighting pass
240+ // if it has been added
241+ let has_default_deferred_lighting_pass = render_app
242+ . world_mut ( )
243+ . get_resource_mut :: < RenderGraph > ( )
244+ . unwrap ( )
245+ . sub_graph ( Core3d )
246+ . get_node_state ( NodePbr :: DeferredLightingPass )
247+ . is_ok ( ) ;
248+
249+ if has_default_deferred_lighting_pass {
250+ render_app. add_render_graph_edges (
238251 Core3d ,
239252 (
240253 NodePbr :: DeferredLightingPass ,
241254 NodePbr :: ScreenSpaceReflections ,
242255 Node3d :: MainOpaquePass ,
243256 ) ,
244257 ) ;
258+ } else {
259+ render_app. add_render_graph_edges (
260+ Core3d ,
261+ (
262+ NodePbr :: ScreenSpaceReflections ,
263+ NodePbr :: ScreenSpaceReflections ,
264+ Node3d :: MainOpaquePass ,
265+ ) ,
266+ ) ;
267+ }
245268 }
246269}
247270
0 commit comments