summary refs log tree commit diff
path: root/src/graphics/scene.rs
diff options
context:
space:
mode:
authorIrene Knapp <ireneista@irenes.space>2026-08-08 05:13:18 -0700
committerIrene Knapp <ireneista@irenes.space>2026-08-08 05:13:18 -0700
commitecee10d87f5f2c8b56647ce2a2790f03880f573c (patch)
treeebd1078caa5f727acedd4641f102024ce9370148 /src/graphics/scene.rs
parent698c9493c89fb0c41eb7a10186c6befc7ad01d79 (diff)
move models into their own struct and file
Force-Push: yes
Change-Id: Ic6aa38b7d069825beadeb144eace5a9d23f0d21b
Diffstat (limited to 'src/graphics/scene.rs')
-rw-r--r--src/graphics/scene.rs51
1 files changed, 3 insertions, 48 deletions
diff --git a/src/graphics/scene.rs b/src/graphics/scene.rs
index b5cf7bd..f1399b2 100644
--- a/src/graphics/scene.rs
+++ b/src/graphics/scene.rs
@@ -1,11 +1,6 @@
 #![deny(unsafe_code)]
 use crate::error::*;
 use crate::graphics::render_state::RenderState;
-use crate::linear_algebra::{ Vec3, Vec4, Transformation };
-use crate::shader_data::VertexPushBlock;
-
-use std::f32::consts::{ TAU };
-use std::mem::size_of;
 
 use vulkanalia::Device;
 use vulkanalia::vk::{ self, HasBuilder, DeviceV1_0 };
@@ -65,49 +60,9 @@ pub fn generate_scene_commands<'a>(image_index: usize, time: f32,
                              render_state.pipeline)
   };
 
-  unsafe {
-    device.cmd_bind_vertex_buffers(*command_buffer, 0,
-                                   &[render_state.vertex_buffer], &[0])
-  };
-
-  unsafe {
-    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,
-                                    render_state.pipeline_layout,
-                                    0,
-                                    &[*descriptor_set],
-                                    &[])
-  };
-
-  let scale = Vec3::new(1.0, 1.0, 1.0);
-  let model = Transformation {
-    rotation: Vec4::rotation_quaternion(&Vec3::new(0.0, 1.0, 0.0), time % TAU),
-    translation: Vec3::new(0.0, 0.0, 0.0),
-  };
-  let push_block = VertexPushBlock::<f32> { scale, model };
-  let size = size_of::<VertexPushBlock::<f32>>();
-  let push_block_bytes = unsafe {
-    std::slice::from_raw_parts(&push_block as *const VertexPushBlock<f32>
-                                           as *const u8,
-                               size)
-  };
-
-  unsafe {
-    device.cmd_push_constants(*command_buffer, render_state.pipeline_layout,
-                              vk::ShaderStageFlags::VERTEX,
-                              0,
-                              push_block_bytes)
-  };
-
-  unsafe {
-    device.cmd_draw_indexed(*command_buffer, render_state.index_count as u32,
-                            1, 0, 0, 0)
-  };
+  if let Some(model) = &render_state.model {
+    model.render(time, device, render_state, command_buffer, descriptor_set);
+  }
 
   unsafe { device.cmd_end_render_pass(*command_buffer) };