|  |  |  | @ -14,6 +14,7 @@ use raw_window_handle::HasDisplayHandle; | 
			
		
	
		
			
				
					|  |  |  |  | use raw_window_handle::HasWindowHandle; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | use sdl2::event::Event; | 
			
		
	
		
			
				
					|  |  |  |  | use sdl2::event::WindowEvent; | 
			
		
	
		
			
				
					|  |  |  |  | use sdl2::keyboard::Keycode; | 
			
		
	
		
			
				
					|  |  |  |  | use sdl2::video::Window; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -539,6 +540,8 @@ fn setup_swapchain( | 
			
		
	
		
			
				
					|  |  |  |  |             .expect("Failed to get surface capabilities") | 
			
		
	
		
			
				
					|  |  |  |  |     }; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     println!("Extents: {:?}", caps.current_extent); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let formats = unsafe { | 
			
		
	
		
			
				
					|  |  |  |  |         surface_loader | 
			
		
	
		
			
				
					|  |  |  |  |             .get_physical_device_surface_formats(*pdev, *surface) | 
			
		
	
	
		
			
				
					|  |  |  | @ -943,8 +946,8 @@ struct Camera { | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | fn handle_key(keycode: Keycode, camera: &mut Camera) { | 
			
		
	
		
			
				
					|  |  |  |  |     let mov_scale = 0.01; | 
			
		
	
		
			
				
					|  |  |  |  |     let rot_scale = 0.01; | 
			
		
	
		
			
				
					|  |  |  |  |     let mov_scale = 0.05; | 
			
		
	
		
			
				
					|  |  |  |  |     let rot_scale = 0.05; | 
			
		
	
		
			
				
					|  |  |  |  |     match keycode { | 
			
		
	
		
			
				
					|  |  |  |  |         Keycode::W => { | 
			
		
	
		
			
				
					|  |  |  |  |             camera.origin.x -= -camera.rotation.y.sin() * mov_scale; | 
			
		
	
	
		
			
				
					|  |  |  | @ -957,7 +960,7 @@ fn handle_key(keycode: Keycode, camera: &mut Camera) { | 
			
		
	
		
			
				
					|  |  |  |  |         Keycode::A => { | 
			
		
	
		
			
				
					|  |  |  |  |             camera.origin.x += camera.rotation.y.cos() * mov_scale; | 
			
		
	
		
			
				
					|  |  |  |  |             camera.origin.z += camera.rotation.y.sin() * mov_scale; | 
			
		
	
		
			
				
					|  |  |  |  |         }        
 | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         Keycode::D => { | 
			
		
	
		
			
				
					|  |  |  |  |             camera.origin.z -= camera.rotation.y.sin() * mov_scale; | 
			
		
	
		
			
				
					|  |  |  |  |             camera.origin.x -= camera.rotation.y.cos() * mov_scale; | 
			
		
	
	
		
			
				
					|  |  |  | @ -997,6 +1000,7 @@ fn main() { | 
			
		
	
		
			
				
					|  |  |  |  |     let window = video_subsystem | 
			
		
	
		
			
				
					|  |  |  |  |         .window(APP_NAME, width, height) | 
			
		
	
		
			
				
					|  |  |  |  |         .vulkan() | 
			
		
	
		
			
				
					|  |  |  |  |         .resizable() | 
			
		
	
		
			
				
					|  |  |  |  |         .build() | 
			
		
	
		
			
				
					|  |  |  |  |         .unwrap(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1033,7 +1037,7 @@ fn main() { | 
			
		
	
		
			
				
					|  |  |  |  |     // Max viewport size is 3440x1440
 | 
			
		
	
		
			
				
					|  |  |  |  |     let depth_mem = mem_alloc(&dev, host_invisible_inx, max_width * max_height * 8); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let depth_img = make_depth_img( | 
			
		
	
		
			
				
					|  |  |  |  |     let mut depth_img = make_depth_img( | 
			
		
	
		
			
				
					|  |  |  |  |         &dev, | 
			
		
	
		
			
				
					|  |  |  |  |         host_invisible_inx, | 
			
		
	
		
			
				
					|  |  |  |  |         width, | 
			
		
	
	
		
			
				
					|  |  |  | @ -1089,7 +1093,7 @@ fn main() { | 
			
		
	
		
			
				
					|  |  |  |  |     let surface_loader = surface::Instance::new(&entry, &instance); | 
			
		
	
		
			
				
					|  |  |  |  |     let swapchain_loader = swapchain::Device::new(&instance, &dev); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let swapchain = setup_swapchain( | 
			
		
	
		
			
				
					|  |  |  |  |     let mut swapchain = setup_swapchain( | 
			
		
	
		
			
				
					|  |  |  |  |         &pdev, | 
			
		
	
		
			
				
					|  |  |  |  |         &dev, | 
			
		
	
		
			
				
					|  |  |  |  |         &surface, | 
			
		
	
	
		
			
				
					|  |  |  | @ -1100,13 +1104,13 @@ fn main() { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let desc_pool = setup_desc_pool(&dev); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let swap_images = make_swap_images(&dev, &swapchain, &swapchain_loader); | 
			
		
	
		
			
				
					|  |  |  |  |     let mut swap_images = make_swap_images(&dev, &swapchain, &swapchain_loader); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let swap_views = make_swap_views(&dev, &swap_images, vk::Format::B8G8R8A8_UNORM); | 
			
		
	
		
			
				
					|  |  |  |  |     let mut swap_views = make_swap_views(&dev, &swap_images, vk::Format::B8G8R8A8_UNORM); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let depth_view = make_depth_view(&dev, &depth_img, vk::Format::D32_SFLOAT); | 
			
		
	
		
			
				
					|  |  |  |  |     let mut depth_view = make_depth_view(&dev, &depth_img, vk::Format::D32_SFLOAT); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let framebufs = make_framebufs(&dev, &swap_views, &depth_view, &pass, width, height); | 
			
		
	
		
			
				
					|  |  |  |  |     let mut framebufs = make_framebufs(&dev, &swap_views, &depth_view, &pass, width, height); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let desc_sets = make_desc_sets(&dev, &desc_pool); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1135,6 +1139,34 @@ fn main() { | 
			
		
	
		
			
				
					|  |  |  |  |         for event in event_pump.poll_iter() { | 
			
		
	
		
			
				
					|  |  |  |  |             match event { | 
			
		
	
		
			
				
					|  |  |  |  |                 Event::Quit { .. } => running = false, | 
			
		
	
		
			
				
					|  |  |  |  |                 Event::Window { | 
			
		
	
		
			
				
					|  |  |  |  |                     win_event: WindowEvent::Resized(w, h), | 
			
		
	
		
			
				
					|  |  |  |  |                     .. | 
			
		
	
		
			
				
					|  |  |  |  |                 } => { | 
			
		
	
		
			
				
					|  |  |  |  |                     width = w as u32; | 
			
		
	
		
			
				
					|  |  |  |  |                     height = h as u32; | 
			
		
	
		
			
				
					|  |  |  |  |                     swapchain = setup_swapchain( | 
			
		
	
		
			
				
					|  |  |  |  |                         &pdev, | 
			
		
	
		
			
				
					|  |  |  |  |                         &dev, | 
			
		
	
		
			
				
					|  |  |  |  |                         &surface, | 
			
		
	
		
			
				
					|  |  |  |  |                         &surface_loader, | 
			
		
	
		
			
				
					|  |  |  |  |                         &swapchain_loader, | 
			
		
	
		
			
				
					|  |  |  |  |                         &instance, | 
			
		
	
		
			
				
					|  |  |  |  |                     ); | 
			
		
	
		
			
				
					|  |  |  |  |                     swap_images = make_swap_images(&dev, &swapchain, &swapchain_loader); | 
			
		
	
		
			
				
					|  |  |  |  |                     swap_views = make_swap_views(&dev, &swap_images, vk::Format::B8G8R8A8_UNORM); | 
			
		
	
		
			
				
					|  |  |  |  |                     depth_img = make_depth_img( | 
			
		
	
		
			
				
					|  |  |  |  |                         &dev, | 
			
		
	
		
			
				
					|  |  |  |  |                         host_invisible_inx, | 
			
		
	
		
			
				
					|  |  |  |  |                         width, | 
			
		
	
		
			
				
					|  |  |  |  |                         height, | 
			
		
	
		
			
				
					|  |  |  |  |                         depth_mem, | 
			
		
	
		
			
				
					|  |  |  |  |                         rcs_queue_inx, | 
			
		
	
		
			
				
					|  |  |  |  |                     ); | 
			
		
	
		
			
				
					|  |  |  |  |                     depth_view = make_depth_view(&dev, &depth_img, vk::Format::D32_SFLOAT); | 
			
		
	
		
			
				
					|  |  |  |  |                     framebufs = | 
			
		
	
		
			
				
					|  |  |  |  |                         make_framebufs(&dev, &swap_views, &depth_view, &pass, width, height); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 Event::KeyDown { | 
			
		
	
		
			
				
					|  |  |  |  |                     keycode: Some(keycode), | 
			
		
	
		
			
				
					|  |  |  |  |                     .. | 
			
		
	
	
		
			
				
					|  |  |  | 
 |