summary refs log tree commit diff
path: root/src/graphics_scene.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics_scene.rs')
-rw-r--r--src/graphics_scene.rs39
1 files changed, 18 insertions, 21 deletions
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)
 }