diff options
Diffstat (limited to 'src/renderer/mod.rs')
| -rw-r--r-- | src/renderer/mod.rs | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 3cf340d..8e94f55 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -1,5 +1,6 @@ mod debug; mod instances; +mod lighting; mod particles; mod ui; mod vfx; @@ -15,7 +16,8 @@ use crate::{ proc_gen::TilesetWorldGenerator, renderer::{ debug::PhysicsDebugRendererState, instances::InstancesRendererState, - particles::ParticlesRendererState, ui::draw_egui, vfx::VfxRendererState, + lighting::LightingRendererState, particles::ParticlesRendererState, ui::draw_egui, + vfx::VfxRendererState, }, sim::sim_manager::SimManager, vfx::VfxManager, @@ -51,6 +53,7 @@ pub struct RendererState { particles_renderer_state: ParticlesRendererState, vfx_renderer_state: VfxRendererState, physics_debug_renderer_state: PhysicsDebugRendererState, + lighting_renderer_state: LightingRendererState, } impl RendererState { @@ -150,8 +153,16 @@ impl RendererState { mapped_at_creation: false, }); - let instances_renderer_state = - InstancesRendererState::new(&device, &config, &camera_uniform_buffer, &palette_buffer); + let lighting_renderer_state = LightingRendererState::new(&device); + + let instances_renderer_state = InstancesRendererState::new( + &device, + &config, + &camera_uniform_buffer, + &palette_buffer, + &lighting_renderer_state.lighting_view(), + lighting_renderer_state.uniform_buffer(), + ); let particles_renderer_state = ParticlesRendererState::new(&device, &config, &camera_uniform_buffer, &palette_buffer); @@ -180,6 +191,7 @@ impl RendererState { particles_renderer_state, vfx_renderer_state, physics_debug_renderer_state, + lighting_renderer_state, } } @@ -295,6 +307,16 @@ impl RendererState { bytemuck::bytes_of(&camera.to_uniform()), ); + let lighting_recreated = self + .lighting_renderer_state + .update_scene_texture(&self.device, &self.queue, sim, camera); + if lighting_recreated { + self.instances_renderer_state.rebuild_bind_group( + &self.device, + &self.lighting_renderer_state.lighting_view(), + self.lighting_renderer_state.uniform_buffer(), + ); + } self.instances_renderer_state .update_buffers(&self.device, &self.queue, sim, camera); self.particles_renderer_state @@ -311,6 +333,17 @@ impl RendererState { } { + puffin::profile_scope!("Lighting compute pass"); + let mut compute_pass: wgpu::ComputePass = + encoder.begin_compute_pass(&wgpu::ComputePassDescriptor { + label: Some("Lighting compute pass"), + timestamp_writes: None, + }); + + self.lighting_renderer_state.compute(&mut compute_pass); + } + + { puffin::profile_scope!("Main render pass"); let mut render_pass: wgpu::RenderPass<'_> = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { |
