Skip to content

Commit c61515d

Browse files
committed
Use RenderStartup for CopyDeferredLightingIdPipeline.
1 parent face4f1 commit c61515d

File tree

1 file changed

+47
-54
lines changed

1 file changed

+47
-54
lines changed

crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs

Lines changed: 47 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::{
33
FullscreenShader,
44
};
55
use bevy_app::prelude::*;
6-
use bevy_asset::{embedded_asset, load_embedded_asset};
6+
use bevy_asset::{embedded_asset, load_embedded_asset, AssetServer};
77
use bevy_ecs::prelude::*;
88
use bevy_image::ToExtents;
99
use bevy_render::{
@@ -12,7 +12,7 @@ use bevy_render::{
1212
renderer::RenderDevice,
1313
texture::{CachedTexture, TextureCache},
1414
view::ViewTarget,
15-
Render, RenderApp, RenderSystems,
15+
Render, RenderApp, RenderStartup, RenderSystems,
1616
};
1717

1818
use super::DEFERRED_LIGHTING_PASS_ID_DEPTH_FORMAT;
@@ -31,18 +31,12 @@ impl Plugin for CopyDeferredLightingIdPlugin {
3131
let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
3232
return;
3333
};
34-
render_app.add_systems(
35-
Render,
36-
(prepare_deferred_lighting_id_textures.in_set(RenderSystems::PrepareResources),),
37-
);
38-
}
39-
40-
fn finish(&self, app: &mut App) {
41-
let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
42-
return;
43-
};
44-
45-
render_app.init_resource::<CopyDeferredLightingIdPipeline>();
34+
render_app
35+
.add_systems(RenderStartup, init_copy_deferred_lighting_id_pipeline)
36+
.add_systems(
37+
Render,
38+
(prepare_deferred_lighting_id_textures.in_set(RenderSystems::PrepareResources),),
39+
);
4640
}
4741
}
4842

@@ -118,47 +112,46 @@ struct CopyDeferredLightingIdPipeline {
118112
pipeline_id: CachedRenderPipelineId,
119113
}
120114

121-
impl FromWorld for CopyDeferredLightingIdPipeline {
122-
fn from_world(world: &mut World) -> Self {
123-
let render_device = world.resource::<RenderDevice>();
124-
125-
let layout = render_device.create_bind_group_layout(
126-
"copy_deferred_lighting_id_bind_group_layout",
127-
&BindGroupLayoutEntries::single(
128-
ShaderStages::FRAGMENT,
129-
texture_2d(TextureSampleType::Uint),
130-
),
131-
);
115+
pub fn init_copy_deferred_lighting_id_pipeline(
116+
mut commands: Commands,
117+
render_device: Res<RenderDevice>,
118+
fullscreen_shader: Res<FullscreenShader>,
119+
asset_server: Res<AssetServer>,
120+
pipeline_cache: Res<PipelineCache>,
121+
) {
122+
let layout = render_device.create_bind_group_layout(
123+
"copy_deferred_lighting_id_bind_group_layout",
124+
&BindGroupLayoutEntries::single(
125+
ShaderStages::FRAGMENT,
126+
texture_2d(TextureSampleType::Uint),
127+
),
128+
);
132129

133-
let vertex_state = world.resource::<FullscreenShader>().to_vertex_state();
134-
let shader = load_embedded_asset!(world, "copy_deferred_lighting_id.wgsl");
135-
136-
let pipeline_id =
137-
world
138-
.resource_mut::<PipelineCache>()
139-
.queue_render_pipeline(RenderPipelineDescriptor {
140-
label: Some("copy_deferred_lighting_id_pipeline".into()),
141-
layout: vec![layout.clone()],
142-
vertex: vertex_state,
143-
fragment: Some(FragmentState {
144-
shader,
145-
..default()
146-
}),
147-
depth_stencil: Some(DepthStencilState {
148-
format: DEFERRED_LIGHTING_PASS_ID_DEPTH_FORMAT,
149-
depth_write_enabled: true,
150-
depth_compare: CompareFunction::Always,
151-
stencil: StencilState::default(),
152-
bias: DepthBiasState::default(),
153-
}),
154-
..default()
155-
});
156-
157-
Self {
158-
layout,
159-
pipeline_id,
160-
}
161-
}
130+
let vertex_state = fullscreen_shader.to_vertex_state();
131+
let shader = load_embedded_asset!(asset_server.as_ref(), "copy_deferred_lighting_id.wgsl");
132+
133+
let pipeline_id = pipeline_cache.queue_render_pipeline(RenderPipelineDescriptor {
134+
label: Some("copy_deferred_lighting_id_pipeline".into()),
135+
layout: vec![layout.clone()],
136+
vertex: vertex_state,
137+
fragment: Some(FragmentState {
138+
shader,
139+
..default()
140+
}),
141+
depth_stencil: Some(DepthStencilState {
142+
format: DEFERRED_LIGHTING_PASS_ID_DEPTH_FORMAT,
143+
depth_write_enabled: true,
144+
depth_compare: CompareFunction::Always,
145+
stencil: StencilState::default(),
146+
bias: DepthBiasState::default(),
147+
}),
148+
..default()
149+
});
150+
151+
commands.insert_resource(CopyDeferredLightingIdPipeline {
152+
layout,
153+
pipeline_id,
154+
});
162155
}
163156

164157
#[derive(Component)]

0 commit comments

Comments
 (0)