Skip to content

Commit 6526c8a

Browse files
committed
Don't reference non-existent default deferred lighting pass
Fixes a crash when using DefaultPlugins with `PbrPlugin { add_default_deferred_lighting_plugin: false, ..default() }`
1 parent 2027700 commit 6526c8a

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

crates/bevy_pbr/src/ssr/mod.rs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use bevy_ecs::{
2525
};
2626
use bevy_image::BevyDefault as _;
2727
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
28+
use bevy_render::render_graph::RenderGraph;
2829
use 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

Comments
 (0)