diff options
Diffstat (limited to 'src/graphics/scene.rs')
| -rw-r--r-- | src/graphics/scene.rs | 51 |
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) }; |