@@ -3,7 +3,7 @@ use crate::{
3
3
FullscreenShader ,
4
4
} ;
5
5
use bevy_app:: prelude:: * ;
6
- use bevy_asset:: { embedded_asset, load_embedded_asset} ;
6
+ use bevy_asset:: { embedded_asset, load_embedded_asset, AssetServer } ;
7
7
use bevy_ecs:: prelude:: * ;
8
8
use bevy_image:: ToExtents ;
9
9
use bevy_render:: {
@@ -12,7 +12,7 @@ use bevy_render::{
12
12
renderer:: RenderDevice ,
13
13
texture:: { CachedTexture , TextureCache } ,
14
14
view:: ViewTarget ,
15
- Render , RenderApp , RenderSystems ,
15
+ Render , RenderApp , RenderStartup , RenderSystems ,
16
16
} ;
17
17
18
18
use super :: DEFERRED_LIGHTING_PASS_ID_DEPTH_FORMAT ;
@@ -31,18 +31,12 @@ impl Plugin for CopyDeferredLightingIdPlugin {
31
31
let Some ( render_app) = app. get_sub_app_mut ( RenderApp ) else {
32
32
return ;
33
33
} ;
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
+ ) ;
46
40
}
47
41
}
48
42
@@ -118,47 +112,46 @@ struct CopyDeferredLightingIdPipeline {
118
112
pipeline_id : CachedRenderPipelineId ,
119
113
}
120
114
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
+ ) ;
132
129
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
+ } ) ;
162
155
}
163
156
164
157
#[ derive( Component ) ]
0 commit comments