From 2c8110d93e04a1bfd976fe20c8c7493a41d51eae Mon Sep 17 00:00:00 2001 From: Irene Knapp Date: Thu, 6 Aug 2026 16:43:02 -0700 Subject: 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 --- src/graphics_scene.rs | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'src/graphics_scene.rs') diff --git a/src/graphics_scene.rs b/src/graphics_scene.rs index 771255a..f3694f7 100644 --- a/src/graphics_scene.rs +++ b/src/graphics_scene.rs @@ -1,5 +1,6 @@ #![deny(unsafe_code)] use crate::error::*; +use crate::graphics_window_dressing::RenderState; use crate::linear_algebra::{ Vec3, Vec4, Transformation }; use crate::shader_data::VertexPushBlock; @@ -11,19 +12,15 @@ use vulkanalia::vk::{ self, HasBuilder, DeviceV1_0 }; #[allow(unsafe_code)] -pub fn generate_scene_commands(command_buffer: &vk::CommandBuffer, - time: f32, device: &Device, - extent: &vk::Extent2D, - framebuffer: &vk::Framebuffer, - render_pass: &vk::RenderPass, - pipeline_layout: &vk::PipelineLayout, - pipeline: &vk::Pipeline, - vertex_buffer: &vk::Buffer, - index_buffer: &vk::Buffer, - index_count: usize, - descriptor_set: &vk::DescriptorSet) - -> Result<()> +pub fn generate_scene_commands<'a>(image_index: usize, time: f32, + render_state: &'a RenderState, + device: &Device, extent: &vk::Extent2D) + -> Result<&'a vk::CommandBuffer> { + let command_buffer = &render_state.command_buffers[image_index]; + let framebuffer = &render_state.framebuffers[image_index]; + let descriptor_set = &render_state.descriptor_sets[image_index]; + let inheritance_info = vk::CommandBufferInheritanceInfo::builder(); let command_buffer_begin_info = vk::CommandBufferBeginInfo::builder() @@ -52,7 +49,7 @@ pub fn generate_scene_commands(command_buffer: &vk::CommandBuffer, let clear_values = [color_clear_value, depth_clear_value]; let begin_pass_info = vk::RenderPassBeginInfo::builder() - .render_pass(*render_pass) + .render_pass(render_state.render_pass) .framebuffer(*framebuffer) .render_area(render_area) .clear_values(&clear_values); @@ -65,23 +62,23 @@ pub fn generate_scene_commands(command_buffer: &vk::CommandBuffer, unsafe { device.cmd_bind_pipeline(*command_buffer, vk::PipelineBindPoint::GRAPHICS, - *pipeline) + render_state.pipeline) }; unsafe { device.cmd_bind_vertex_buffers(*command_buffer, 0, - &[*vertex_buffer], &[0]) + &[render_state.vertex_buffer], &[0]) }; unsafe { - device.cmd_bind_index_buffer(*command_buffer, *index_buffer, 0, - vk::IndexType::UINT32) + device.cmd_bind_index_buffer(*command_buffer, render_state.index_buffer, + 0, vk::IndexType::UINT32) }; unsafe { device.cmd_bind_descriptor_sets(*command_buffer, vk::PipelineBindPoint::GRAPHICS, - *pipeline_layout, + render_state.pipeline_layout, 0, &[*descriptor_set], &[]) @@ -101,14 +98,14 @@ pub fn generate_scene_commands(command_buffer: &vk::CommandBuffer, }; unsafe { - device.cmd_push_constants(*command_buffer, *pipeline_layout, + device.cmd_push_constants(*command_buffer, render_state.pipeline_layout, vk::ShaderStageFlags::VERTEX, 0, push_block_bytes) }; unsafe { - device.cmd_draw_indexed(*command_buffer, index_count as u32, + device.cmd_draw_indexed(*command_buffer, render_state.index_count as u32, 1, 0, 0, 0) }; @@ -116,6 +113,6 @@ pub fn generate_scene_commands(command_buffer: &vk::CommandBuffer, unsafe { device.end_command_buffer(*command_buffer) }?; - Ok(()) + Ok(command_buffer) } -- cgit 1.4.1