diff options
| author | Irene Knapp <ireneista@irenes.space> | 2026-08-06 16:43:02 -0700 |
|---|---|---|
| committer | Irene Knapp <ireneista@irenes.space> | 2026-08-06 16:43:02 -0700 |
| commit | 2c8110d93e04a1bfd976fe20c8c7493a41d51eae (patch) | |
| tree | ac7b4271e07e58bdc61e009a06f56164186c08aa /src/main.rs | |
| parent | 5b5f7bb4b3cac1fa96b2325e7c3d0784ade28ebf (diff) | |
state needed when rendering is now in its own struct
subdividing the lifetimes of all our various objects may feel questionable in general, but this particular division is a very natural one Force-Push: yes Change-Id: I499a32875a4d75965944af720e7bfd6ec5965c15
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/src/main.rs b/src/main.rs index 8a42147..10b203a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ use crate::graphics_permanent::{ PermanentGraphicsState, GraphicsStateForReinit }; use crate::graphics_window_dressing::{ - WindowDressing, N_SIMULTANEOUS_FRAMES + WindowDressing, RenderState, N_SIMULTANEOUS_FRAMES }; use crate::linear_algebra::{ Vec3, Mat4, Transformation }; use crate::shader_data::UniformBlock; @@ -34,6 +34,7 @@ struct Surreality { permanent: RefCell<Option<PermanentGraphicsState>>, for_reinit: RefCell<Option<GraphicsStateForReinit>>, window_dressing: RefCell<Option<WindowDressing>>, + render_state: RefCell<Option<RenderState>>, is_minimized: bool, is_reinit_queued: bool, frame_index: usize, @@ -50,6 +51,7 @@ impl Surreality { permanent: RefCell::new(None), for_reinit: RefCell::new(None), window_dressing: RefCell::new(None), + render_state: RefCell::new(None), is_minimized: false, is_reinit_queued: false, frame_index: 0, @@ -66,9 +68,13 @@ impl Surreality { = PermanentGraphicsState::new(event_loop)?; if enable_swapchain.0 { - *self.window_dressing.get_mut() - = Some(WindowDressing::new(&permanent, &for_reinit, - enable_anisotropy)?); + let window_dressing = WindowDressing::new(&permanent, &for_reinit, + enable_anisotropy)?; + let render_state = RenderState::new(&permanent, &for_reinit, + &window_dressing)?; + + *self.window_dressing.get_mut() = Some(window_dressing); + *self.render_state.get_mut() = Some(render_state); } *self.permanent.get_mut() = Some(permanent); @@ -82,8 +88,10 @@ impl Surreality { && let Some(for_reinit) = self.for_reinit.borrow().as_ref() && let Some(window_dressing) = self.window_dressing.borrow_mut().as_mut() + && let Some(render_state) = self.render_state.borrow_mut().as_mut() { window_dressing.reinit(permanent, for_reinit)?; + render_state.reinit(permanent, for_reinit, &window_dressing)?; } Ok(()) @@ -109,6 +117,7 @@ impl Surreality { if let Some(permanent) = self.permanent.borrow().as_ref() && let Some(window_dressing) = self.window_dressing.borrow_mut().as_mut() + && let Some(render_state) = self.render_state.borrow_mut().as_mut() && window_id == permanent.window.id() { let device = &permanent.device; @@ -141,16 +150,9 @@ impl Surreality { let time = self.simulation_start.elapsed().as_secs_f32(); - let command_buffer = window_dressing.command_buffers[image_index]; - let framebuffer = window_dressing.framebuffers[image_index]; - let descriptor_set = window_dressing.descriptor_sets[image_index]; - - crate::graphics_scene::generate_scene_commands( - &command_buffer, time, device, &window_dressing.swapchain.extent, - &framebuffer, &window_dressing.render_pass, - &window_dressing.pipeline_layout, &window_dressing.pipeline, - &window_dressing.vertex_buffer, &window_dressing.index_buffer, - window_dressing.index_count, &descriptor_set)?; + let command_buffer = crate::graphics_scene::generate_scene_commands( + image_index, time, &render_state, device, + &window_dressing.swapchain.extent)?; render_uniforms(time, device, &window_dressing.uniform_buffer_memory[image_index], @@ -160,7 +162,7 @@ impl Surreality { let second_semaphores = [*rendering_finished_semaphore]; let wait_stages = [vk::PipelineStageFlags::COLOR_ATTACHMENT_OUTPUT]; - let command_buffers = [command_buffer]; + let command_buffers = [*command_buffer]; let submit_info = vk::SubmitInfo::builder() .wait_semaphores(&first_semaphores) .wait_dst_stage_mask(&wait_stages) @@ -213,6 +215,10 @@ impl Drop for Surreality { unsafe { permanent.device.device_wait_idle() }.unwrap(); if let Some(window_dressing) = self.window_dressing.replace(None) { + if let Some(render_state) = self.render_state.replace(None) { + render_state.destroy(&permanent.device, &window_dressing); + } + window_dressing.destroy(&permanent.device); } |