1+ use bevy_camera:: { MainPassResolutionOverride , Viewport } ;
12use bevy_ecs:: { query:: QueryItem , system:: lifetimeless:: Read , world:: World } ;
23use bevy_math:: { UVec2 , Vec3Swizzles } ;
34use bevy_render:: {
5+ camera:: ExtractedCamera ,
46 diagnostic:: RecordDiagnostics ,
57 extract_component:: DynamicUniformIndex ,
68 render_graph:: { NodeRunError , RenderGraphContext , RenderLabel , ViewNode } ,
@@ -165,6 +167,7 @@ pub(super) struct RenderSkyNode;
165167
166168impl ViewNode for RenderSkyNode {
167169 type ViewQuery = (
170+ Read < ExtractedCamera > ,
168171 Read < AtmosphereBindGroups > ,
169172 Read < ViewTarget > ,
170173 Read < DynamicUniformIndex < GpuAtmosphere > > ,
@@ -173,13 +176,15 @@ impl ViewNode for RenderSkyNode {
173176 Read < ViewUniformOffset > ,
174177 Read < ViewLightsUniformOffset > ,
175178 Read < RenderSkyPipelineId > ,
179+ Option < Read < MainPassResolutionOverride > > ,
176180 ) ;
177181
178182 fn run < ' w > (
179183 & self ,
180184 _graph : & mut RenderGraphContext ,
181185 render_context : & mut RenderContext < ' w > ,
182186 (
187+ camera,
183188 atmosphere_bind_groups,
184189 view_target,
185190 atmosphere_uniforms_offset,
@@ -188,6 +193,7 @@ impl ViewNode for RenderSkyNode {
188193 view_uniforms_offset,
189194 lights_uniforms_offset,
190195 render_sky_pipeline_id,
196+ resolution_override,
191197 ) : QueryItem < ' w , ' _ , Self :: ViewQuery > ,
192198 world : & ' w World ,
193199 ) -> Result < ( ) , NodeRunError > {
@@ -200,19 +206,22 @@ impl ViewNode for RenderSkyNode {
200206
201207 let diagnostics = render_context. diagnostic_recorder ( ) ;
202208
203- let mut render_sky_pass =
204- render_context
205- . command_encoder ( )
206- . begin_render_pass ( & RenderPassDescriptor {
207- label : Some ( "render_sky" ) ,
208- color_attachments : & [ Some ( view_target. get_color_attachment ( ) ) ] ,
209- depth_stencil_attachment : None ,
210- timestamp_writes : None ,
211- occlusion_query_set : None ,
212- } ) ;
209+ let mut render_sky_pass = render_context. begin_tracked_render_pass ( RenderPassDescriptor {
210+ label : Some ( "render_sky" ) ,
211+ color_attachments : & [ Some ( view_target. get_color_attachment ( ) ) ] ,
212+ depth_stencil_attachment : None ,
213+ timestamp_writes : None ,
214+ occlusion_query_set : None ,
215+ } ) ;
213216 let pass_span = diagnostics. pass_span ( & mut render_sky_pass, "render_sky" ) ;
214217
215- render_sky_pass. set_pipeline ( render_sky_pipeline) ;
218+ if let Some ( viewport) =
219+ Viewport :: from_viewport_and_override ( camera. viewport . as_ref ( ) , resolution_override)
220+ {
221+ render_sky_pass. set_camera_viewport ( & viewport) ;
222+ }
223+
224+ render_sky_pass. set_render_pipeline ( render_sky_pipeline) ;
216225 render_sky_pass. set_bind_group (
217226 0 ,
218227 & atmosphere_bind_groups. render_sky ,
0 commit comments