summaryrefslogtreecommitdiff
path: root/src/renderer/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/mod.rs')
-rw-r--r--src/renderer/mod.rs39
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 {