@ -1,4 +1,3 @@
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					#![ feature(inherent_str_constructors) ] 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					#![ allow(unused_variables, unused_mut) ] 
 
					 
					 
					 
					#![ allow(unused_variables, unused_mut) ] 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					use   ash ::Device ; 
 
					 
					 
					 
					use   ash ::Device ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -6,6 +5,7 @@ use ash::Entry;
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					use   ash ::Instance ; 
 
					 
					 
					 
					use   ash ::Instance ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					use   ash ::khr ::{ surface ,   swapchain } ; 
 
					 
					 
					 
					use   ash ::khr ::{ surface ,   swapchain } ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					use   ash ::vk ; 
 
					 
					 
					 
					use   ash ::vk ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					use   ash ::vk ::ImageCreateFlags ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					use   sdl2 ::mouse ::MouseUtil ; 
 
					 
					 
					 
					use   sdl2 ::mouse ::MouseUtil ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					use   std ::cmp ; 
 
					 
					 
					 
					use   std ::cmp ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -26,7 +26,6 @@ use sdl2::video::Window;
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					const   APP_NAME : & str  =   "MineClone" ; 
 
					 
					 
					 
					const   APP_NAME : & str  =   "MineClone" ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					const   MOV_STEP : f32  =   0.05 ; 
 
					 
					 
					 
					const   MOV_STEP : f32  =   0.05 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					const   ROT_STEP : f32  =   0.05 ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					const   ROT_MOUSE_SCALE : f32  =   0.001 ; 
 
					 
					 
					 
					const   ROT_MOUSE_SCALE : f32  =   0.001 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					const   MAX_WIDTH : u32  =   3440 ; 
 
					 
					 
					 
					const   MAX_WIDTH : u32  =   3440 ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -34,26 +33,123 @@ const MAX_HEIGHT: u32 = 1440;
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					const   MESH_SIZE : u64  =   36   *   2   *   4   *   4 ; 
 
					 
					 
					 
					const   MESH_SIZE : u64  =   36   *   2   *   4   *   4 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					#[ rustfmt::skip ] 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					const   POSITIONS : [ f32 ;   36   *   2   *   4 ]   =   [ 
 
					 
					 
					 
					const   POSITIONS : [ f32 ;   36   *   2   *   4 ]   =   [ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     // BOTTOM
 
 
					 
					 
					 
					     // BOTTOM
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     - 0.5 ,   0.5 ,   1.0 ,   1.0 ,   0.0 ,   1.0 ,   0.0 ,   0.0 ,   0.5 ,   0.5 ,   2.0 ,   1.0 ,   0.0 ,   1.0 ,   0.0 ,   0.0 ,   - 0.5 ,   0.5 ,   2.0 , 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     1.0 ,   0.0 ,   1.0 ,   0.0 ,   0.0 ,   0.5 ,   0.5 ,   1.0 ,   1.0 ,   0.0 ,   1.0 ,   0.0 ,   0.0 ,   0.5 ,   0.5 ,   2.0 ,   1.0 ,   0.0 ,   1.0 , 
 
					 
					 
					 
					     - 0.5 ,   0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     0.0 ,   0.0 ,   - 0.5 ,   0.5 ,   1.0 ,   1.0 ,   0.0 ,   1.0 ,   0.0 ,   0.0 ,   // TOP
 
 
					 
					 
					 
					     0.0 ,   1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     0.5 ,   - 0.5 ,   2.0 ,   1.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.0 ,   - 0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.0 ,   - 0.5 , 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     - 0.5 ,   2.0 ,   1.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.0 ,   0.5 ,   - 0.5 ,   2.0 ,   1.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.0 ,   0.5 ,   - 0.5 ,   1.0 , 
 
					 
					 
					 
					     0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     1.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.0 ,   - 0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.0 ,   // FRONT
 
 
					 
					 
					 
					     0.0 ,   1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.5 ,   0.5 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   - 1.0 ,   0.0 ,   - 0.5 ,   0.5 , 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     1.0 ,   1.0 ,   0.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   - 1.0 ,   0.0 ,   0.5 ,   0.5 ,   1.0 ,   1.0 , 
 
					 
					 
					 
					     - 0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     0.0 ,   0.0 ,   - 1.0 ,   0.0 ,   - 0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   - 1.0 ,   0.0 ,   // BACK
 
 
					 
					 
					 
					     0.0 ,   1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     0.5 ,   0.5 ,   2.0 ,   1.0 ,   0.0 ,   0.0 ,   1.0 ,   0.0 ,   - 0.5 ,   - 0.5 ,   2.0 ,   1.0 ,   0.0 ,   0.0 ,   1.0 ,   0.0 ,   - 0.5 ,   0.5 , 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     2.0 ,   1.0 ,   0.0 ,   0.0 ,   1.0 ,   0.0 ,   0.5 ,   0.5 ,   2.0 ,   1.0 ,   0.0 ,   0.0 ,   1.0 ,   0.0 ,   0.5 ,   - 0.5 ,   2.0 ,   1.0 ,   0.0 , 
 
					 
					 
					 
					     0.5 ,   0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     0.0 ,   1.0 ,   0.0 ,   - 0.5 ,   - 0.5 ,   2.0 ,   1.0 ,   0.0 ,   0.0 ,   1.0 ,   0.0 ,   // LEFT
 
 
					 
					 
					 
					     0.0 ,   1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   - 1.0 ,   0.0 ,   0.0 ,   0.0 ,   - 0.5 ,   0.5 ,   2.0 ,   1.0 ,   - 1.0 ,   0.0 ,   0.0 ,   0.0 ,   - 0.5 , 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     - 0.5 ,   2.0 ,   1.0 ,   - 1.0 ,   0.0 ,   0.0 ,   0.0 ,   - 0.5 ,   0.5 ,   1.0 ,   1.0 ,   - 1.0 ,   0.0 ,   0.0 ,   0.0 ,   - 0.5 ,   0.5 ,   2.0 , 
 
					 
					 
					 
					     0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     1.0 ,   - 1.0 ,   0.0 ,   0.0 ,   0.0 ,   - 0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   - 1.0 ,   0.0 ,   0.0 ,   0.0 ,   // RIGHT
 
 
					 
					 
					 
					     0.0 ,   1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     0.5 ,   0.5 ,   2.0 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   0.0 ,   0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   0.0 ,   0.5 ,   - 0.5 , 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     2.0 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   0.0 ,   0.5 ,   0.5 ,   2.0 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   0.0 ,   0.5 ,   0.5 ,   1.0 ,   1.0 ,   1.0 , 
 
					 
					 
					 
					     - 0.5 ,   0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     0.0 ,   0.0 ,   0.0 ,   0.5 ,   - 0.5 ,   1.0 ,   1.0 ,   1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
					 
					 
					 
					     0.0 ,   1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     // TOP
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   - 0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   - 1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   - 1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   - 1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   - 0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   - 1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   - 1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   - 1.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     // FRONT
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   - 1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   - 1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   - 1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   - 1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   - 1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   - 1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     // BACK
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   - 0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.0 ,   0.0 ,   1.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     // LEFT
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     - 1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     // RIGHT
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   - 0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   0.5 ,   0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     0.5 ,   - 0.5 ,   - 0.5 ,   1.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     1.0 ,   0.0 ,   0.0 ,   0.0 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					] ; 
 
					 
					 
					 
					] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					fn  create_instance ( window : & Window ,   entry : & Entry )   -> Instance   { 
 
					 
					 
					 
					fn  create_instance ( window : & Window ,   entry : & Entry )   -> Instance   { 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -106,7 +202,7 @@ fn find_pdev_dgpu(instance: &Instance) -> vk::PhysicalDevice {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 // Fix.
 
 
					 
					 
					 
					                 // Fix.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 println! ( 
 
					 
					 
					 
					                 println! ( 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     "Found discrete GPU: {}" , 
 
					 
					 
					 
					                     "Found discrete GPU: {}" , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     str ::from_utf8 ( std ::mem ::transmute ( props . device_name . as_slice ( ) ) ) . unwrap ( ) 
 
					 
					 
					 
					                     std ::str ::from_utf8 ( std ::mem ::transmute ( props . device_name . as_slice ( ) ) ) . unwrap ( ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					                 ) ; 
 
					 
					 
					 
					                 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 return   pdevs . remove ( i ) ; 
 
					 
					 
					 
					                 return   pdevs . remove ( i ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -339,7 +435,12 @@ fn setup_desc_layout(dev: &Device) -> vk::DescriptorSetLayout {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . descriptor_type ( vk ::DescriptorType ::STORAGE_BUFFER ) 
 
					 
					 
					 
					         . descriptor_type ( vk ::DescriptorType ::STORAGE_BUFFER ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . descriptor_count ( 1 ) 
 
					 
					 
					 
					         . descriptor_count ( 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . stage_flags ( vk ::ShaderStageFlags ::VERTEX ) ; 
 
					 
					 
					 
					         . stage_flags ( vk ::ShaderStageFlags ::VERTEX ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   layouts   =   [ storage_binding ] ; 
 
					 
					 
					 
					     let   image_binding   =   vk ::DescriptorSetLayoutBinding ::default ( ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . binding ( 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . descriptor_type ( vk ::DescriptorType ::COMBINED_IMAGE_SAMPLER ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . descriptor_count ( 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . stage_flags ( vk ::ShaderStageFlags ::FRAGMENT ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   layouts   =   [ storage_binding ,   image_binding ] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   layout_info   =   vk ::DescriptorSetLayoutCreateInfo ::default ( ) . bindings ( & layouts ) ; 
 
					 
					 
					 
					     let   layout_info   =   vk ::DescriptorSetLayoutCreateInfo ::default ( ) . bindings ( & layouts ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   layout   =   unsafe   { 
 
					 
					 
					 
					     let   layout   =   unsafe   { 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -453,11 +554,11 @@ fn setup_shader_stage(
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   vert_stage   =   vk ::PipelineShaderStageCreateInfo ::default ( ) 
 
					 
					 
					 
					     let   vert_stage   =   vk ::PipelineShaderStageCreateInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . stage ( vk ::ShaderStageFlags ::VERTEX ) 
 
					 
					 
					 
					         . stage ( vk ::ShaderStageFlags ::VERTEX ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . module ( vert_shader ) 
 
					 
					 
					 
					         . module ( vert_shader ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . name ( CStr::from_bytes_with_nul ( b" main \0 " ) . unwrap ( )  ) ; 
 
					 
					 
					 
					         . name ( c"main"  ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					     let   frag_stage   =   vk ::PipelineShaderStageCreateInfo ::default ( ) 
 
					 
					 
					 
					     let   frag_stage   =   vk ::PipelineShaderStageCreateInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . stage ( vk ::ShaderStageFlags ::FRAGMENT ) 
 
					 
					 
					 
					         . stage ( vk ::ShaderStageFlags ::FRAGMENT ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . module ( frag_shader ) 
 
					 
					 
					 
					         . module ( frag_shader ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . name ( CStr::from_bytes_with_nul ( b" main \0 " ) . unwrap ( )  ) ; 
 
					 
					 
					 
					         . name ( c"main"  ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					     [ vert_stage ,   frag_stage ] 
 
					 
					 
					 
					     [ vert_stage ,   frag_stage ] 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -474,7 +575,7 @@ fn setup_pipeline(
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . topology ( vk ::PrimitiveTopology ::TRIANGLE_LIST ) ; 
 
					 
					 
					 
					         . topology ( vk ::PrimitiveTopology ::TRIANGLE_LIST ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   rasterization   =   vk ::PipelineRasterizationStateCreateInfo ::default ( ) 
 
					 
					 
					 
					     let   rasterization   =   vk ::PipelineRasterizationStateCreateInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . polygon_mode ( vk ::PolygonMode ::FILL ) 
 
					 
					 
					 
					         . polygon_mode ( vk ::PolygonMode ::FILL ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . cull_mode ( vk ::CullModeFlags ::BACK ) 
 
					 
					 
					 
					         . cull_mode ( vk ::CullModeFlags ::NONE ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         . front_face ( vk ::FrontFace ::CLOCKWISE ) 
 
					 
					 
					 
					         . front_face ( vk ::FrontFace ::CLOCKWISE ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . line_width ( 1.0 ) ; 
 
					 
					 
					 
					         . line_width ( 1.0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   multisample   =   vk ::PipelineMultisampleStateCreateInfo ::default ( ) 
 
					 
					 
					 
					     let   multisample   =   vk ::PipelineMultisampleStateCreateInfo ::default ( ) 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -601,10 +702,14 @@ fn setup_swapchain(
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					fn  setup_desc_pool ( dev : & Device )   -> vk ::DescriptorPool   { 
 
					 
					 
					 
					fn  setup_desc_pool ( dev : & Device )   -> vk ::DescriptorPool   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   pool_size   =   vk ::DescriptorPoolSize ::default ( ) 
 
					 
					 
					 
					     let   pool_size _storage   =   vk ::DescriptorPoolSize ::default ( ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         . ty ( vk ::DescriptorType ::STORAGE_BUFFER ) 
 
					 
					 
					 
					         . ty ( vk ::DescriptorType ::STORAGE_BUFFER ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . descriptor_count ( 1 ) ; 
 
					 
					 
					 
					         . descriptor_count ( 1 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   pool_sizes   =   [ pool_size ] ; 
 
					 
					 
					 
					     let   pool_size_image   =   vk ::DescriptorPoolSize ::default ( ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . ty ( vk ::DescriptorType ::COMBINED_IMAGE_SAMPLER ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . descriptor_count ( 1 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   pool_sizes   =   [ pool_size_storage ,   pool_size_image ] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   pool_info   =   vk ::DescriptorPoolCreateInfo ::default ( ) 
 
					 
					 
					 
					     let   pool_info   =   vk ::DescriptorPoolCreateInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . max_sets ( 1 ) 
 
					 
					 
					 
					         . max_sets ( 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . pool_sizes ( & pool_sizes ) ; 
 
					 
					 
					 
					         . pool_sizes ( & pool_sizes ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -718,7 +823,13 @@ fn make_desc_sets(dev: &Device, desc_pool: &vk::DescriptorPool) -> Vec<vk::Descr
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     sets 
 
					 
					 
					 
					     sets 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					fn  write_desc_sets ( dev : & Device ,   desc_sets : & Vec < vk ::DescriptorSet > ,   mesh_buf : & vk ::Buffer )   { 
 
					 
					 
					 
					fn  write_desc_sets ( 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     dev : & Device , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     desc_sets : & Vec < vk ::DescriptorSet > , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     mesh_buf : & vk ::Buffer , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     image_view : vk ::ImageView , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     skybox_sampler : vk ::Sampler 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					)   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   buf_info   =   vk ::DescriptorBufferInfo ::default ( ) 
 
					 
					 
					 
					     let   buf_info   =   vk ::DescriptorBufferInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . buffer ( * mesh_buf ) 
 
					 
					 
					 
					         . buffer ( * mesh_buf ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . offset ( 0 ) 
 
					 
					 
					 
					         . offset ( 0 ) 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -730,8 +841,21 @@ fn write_desc_sets(dev: &Device, desc_sets: &Vec<vk::DescriptorSet>, mesh_buf: &
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . dst_array_element ( 0 ) 
 
					 
					 
					 
					         . dst_array_element ( 0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . descriptor_type ( vk ::DescriptorType ::STORAGE_BUFFER ) 
 
					 
					 
					 
					         . descriptor_type ( vk ::DescriptorType ::STORAGE_BUFFER ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . buffer_info ( & buf_infos ) ; 
 
					 
					 
					 
					         . buffer_info ( & buf_infos ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   img_info   =   vk ::DescriptorImageInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . image_layout ( vk ::ImageLayout ::GENERAL ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . image_view ( image_view ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . sampler ( skybox_sampler ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   img_infos   =   & [ img_info ] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   img_desc   =   vk ::WriteDescriptorSet ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . dst_set ( desc_sets [ 0 ] ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . dst_binding ( 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . dst_array_element ( 0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . descriptor_type ( vk ::DescriptorType ::COMBINED_IMAGE_SAMPLER ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . image_info ( img_infos ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     unsafe   { 
 
					 
					 
					 
					     unsafe   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         dev . update_descriptor_sets ( & [ buf_desc ] ,   & [ ] ) ; 
 
					 
					 
					 
					         dev . update_descriptor_sets ( & [ buf_desc ,  img_desc  ],   & [ ] ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -794,6 +918,8 @@ fn record_commands(
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     pipe : & vk ::Pipeline , 
 
					 
					 
					 
					     pipe : & vk ::Pipeline , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     desc_sets : & Vec < vk ::DescriptorSet > , 
 
					 
					 
					 
					     desc_sets : & Vec < vk ::DescriptorSet > , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     camera : & Camera , 
 
					 
					 
					 
					     camera : & Camera , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     skybox_buffer : & vk ::Buffer , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     skybox_image : & vk ::Image , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					)   { 
 
					 
					 
					 
					)   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   clear_vals   =   [ 
 
					 
					 
					 
					     let   clear_vals   =   [ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         vk ::ClearValue   { 
 
					 
					 
					 
					         vk ::ClearValue   { 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -820,6 +946,30 @@ fn record_commands(
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         . clear_values ( & clear_vals ) ; 
 
					 
					 
					 
					         . clear_values ( & clear_vals ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     unsafe   { 
 
					 
					 
					 
					     unsafe   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   regions   =   ( 0 .. 6 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . map ( | i |   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             vk ::BufferImageCopy ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 . buffer_offset ( 3   *   2048   *   2048   *   i ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 . buffer_row_length ( 0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 . buffer_image_height ( 0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 . image_offset ( vk ::Offset3D ::default ( ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 . image_extent ( vk ::Extent3D ::default ( ) . width ( 2048 ) . height ( 2048 ) . depth ( 1 ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 . image_subresource ( 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     vk ::ImageSubresourceLayers ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                         . aspect_mask ( vk ::ImageAspectFlags ::COLOR ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                         . mip_level ( 0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                         . layer_count ( 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                         . base_array_layer ( i   as   u32 ) , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         . collect ::< Vec < _ > > ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         dev . cmd_copy_buffer_to_image ( 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             * cmd_buf , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             * skybox_buffer , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             * skybox_image , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             vk ::ImageLayout ::GENERAL , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             & regions , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         dev . cmd_begin_render_pass ( * cmd_buf ,   & render_pass_info ,   vk ::SubpassContents ::INLINE ) ; 
 
					 
					 
					 
					         dev . cmd_begin_render_pass ( * cmd_buf ,   & render_pass_info ,   vk ::SubpassContents ::INLINE ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         dev . cmd_bind_pipeline ( * cmd_buf ,   vk ::PipelineBindPoint ::GRAPHICS ,   * pipe ) ; 
 
					 
					 
					 
					         dev . cmd_bind_pipeline ( * cmd_buf ,   vk ::PipelineBindPoint ::GRAPHICS ,   * pipe ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         dev . cmd_bind_descriptor_sets ( 
 
					 
					 
					 
					         dev . cmd_bind_descriptor_sets ( 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -886,6 +1036,9 @@ fn record_commands(
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             48 , 
 
					 
					 
					 
					             48 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             base_color . as_ref ( ) , 
 
					 
					 
					 
					             base_color . as_ref ( ) , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         ) ; 
 
					 
					 
					 
					         ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         dev . cmd_draw ( * cmd_buf ,   36 ,   1 ,   0 ,   0 ) ; 
 
					 
					 
					 
					         dev . cmd_draw ( * cmd_buf ,   36 ,   1 ,   0 ,   0 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         dev . cmd_end_render_pass ( * cmd_buf ) ; 
 
					 
					 
					 
					         dev . cmd_end_render_pass ( * cmd_buf ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -993,6 +1146,10 @@ fn handle_cont_key(keycode: Keycode, camera: &mut Camera, mouse: &MouseUtil) {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					fn  decode_rif ( raw : & [ u8 ] )   -> & [ u8 ]   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     & raw [ 17 .. ] 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					fn  main ( )   { 
 
					 
					 
					 
					fn  main ( )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   sdl_context   =   sdl2 ::init ( ) . unwrap ( ) ; 
 
					 
					 
					 
					     let   sdl_context   =   sdl2 ::init ( ) . unwrap ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   video_subsystem   =   sdl_context . video ( ) . unwrap ( ) ; 
 
					 
					 
					 
					     let   video_subsystem   =   sdl_context . video ( ) . unwrap ( ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1069,6 +1226,75 @@ fn main() {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         std ::ptr ::copy ( POSITIONS . as_ptr ( ) ,   mesh_mem   as   * mut   f32 ,   POSITIONS . len ( ) ) ; 
 
					 
					 
					 
					         std ::ptr ::copy ( POSITIONS . as_ptr ( ) ,   mesh_mem   as   * mut   f32 ,   POSITIONS . len ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    
 
 
					 
					 
					 
					    
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   ( skybox_image ,   skybox_image_view ,   skybox_sampler )   =   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   qf_idxs   =   [ rcs_queue_inx ] ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   create_info   =   vk ::ImageCreateInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . flags ( ImageCreateFlags ::CUBE_COMPATIBLE ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . image_type ( vk ::ImageType ::TYPE_2D ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . format ( vk ::Format ::R8G8B8_UNORM ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . extent ( vk ::Extent3D ::default ( ) . width ( 2048 ) . height ( 2048 ) . depth ( 1 ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . mip_levels ( 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . array_layers ( 6 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . samples ( vk ::SampleCountFlags ::TYPE_1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . tiling ( vk ::ImageTiling ::OPTIMAL ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . usage ( vk ::ImageUsageFlags ::TRANSFER_DST   |   vk ::ImageUsageFlags ::SAMPLED ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . sharing_mode ( vk ::SharingMode ::EXCLUSIVE ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . initial_layout ( vk ::ImageLayout ::UNDEFINED ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . queue_family_indices ( & qf_idxs ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   image   = 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             unsafe   {   dev . create_image ( & create_info ,   None )   } . expect ( "Failed to create image" ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   skybox_mem_size : vk ::MemoryRequirements   =   unsafe   { dev . get_image_memory_requirements ( image ) } ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   skybox_dev_mem   =   mem_alloc ( & dev ,   host_invisible_inx ,   skybox_mem_size . size ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         unsafe   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             dev . bind_image_memory ( image ,   skybox_dev_mem ,   0 ) . expect ( "Failed to bind image memory" ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   create_info   =   vk ::ImageViewCreateInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . image ( image ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . view_type ( vk ::ImageViewType ::CUBE ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . format ( vk ::Format ::R8G8B8_UNORM ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . components ( vk ::ComponentMapping ::default ( ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . subresource_range ( 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 vk ::ImageSubresourceRange ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     . aspect_mask ( vk ::ImageAspectFlags ::COLOR ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     . base_mip_level ( 0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     . level_count ( 1 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     . base_array_layer ( 0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     . layer_count ( 6 ) , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   image_view   =   unsafe   {   dev . create_image_view ( & create_info ,   None )   } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . expect ( "Failed to create image view" ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   create_info   =   vk ::SamplerCreateInfo ::default ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . mag_filter ( vk ::Filter ::LINEAR ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . min_filter ( vk ::Filter ::LINEAR ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . mipmap_mode ( vk ::SamplerMipmapMode ::LINEAR ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . address_mode_u ( vk ::SamplerAddressMode ::CLAMP_TO_EDGE ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . address_mode_v ( vk ::SamplerAddressMode ::CLAMP_TO_EDGE ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . address_mode_w ( vk ::SamplerAddressMode ::CLAMP_TO_EDGE ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . max_anisotropy ( 1.0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . max_lod ( 1.0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             . border_color ( vk ::BorderColor ::FLOAT_OPAQUE_WHITE ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         let   sampler   = 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             unsafe   {   dev . create_sampler ( & create_info ,   None )   } . expect ( "Failed to create sampler" ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         ( image ,   image_view ,   sampler ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     } ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   skybox_mem   =   mem_alloc ( & dev ,   host_visible_inx ,   3   *   2048   *   2048   *   6 ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   skybox_buf   =   alloc_buf ( 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         & dev , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         & skybox_mem , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         3   *   2048   *   2048   *   6 , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         vk ::BufferUsageFlags ::TRANSFER_SRC , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   skybox_ptr   =   buf_to_ptr ( & dev ,   & skybox_mem ,   & skybox_buf ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   img   =   std ::fs ::read ( "resources/skybox.rif" ) . unwrap ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     let   data   =   decode_rif ( & img ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     unsafe   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         std ::ptr ::copy ( data . as_ptr ( ) ,   skybox_ptr   as   * mut   u8 ,   data . len ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   vert_shader_bin   =   std ::fs ::read ( "shaders/vert.spv" ) . unwrap ( ) ; 
 
					 
					 
					 
					     let   vert_shader_bin   =   std ::fs ::read ( "shaders/vert.spv" ) . unwrap ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   frag_shader_bin   =   std ::fs ::read ( "shaders/frag.spv" ) . unwrap ( ) ; 
 
					 
					 
					 
					     let   frag_shader_bin   =   std ::fs ::read ( "shaders/frag.spv" ) . unwrap ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1127,7 +1353,7 @@ fn main() {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   desc_sets   =   make_desc_sets ( & dev ,   & desc_pool ) ; 
 
					 
					 
					 
					     let   desc_sets   =   make_desc_sets ( & dev ,   & desc_pool ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     write_desc_sets ( & dev ,   & desc_sets ,   & mesh_buf  ); 
 
					 
					 
					 
					     write_desc_sets ( & dev ,   & desc_sets ,   & mesh_buf ,  skybox_image_view ,   skybox_sampler  ); 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   sem_avail   =   make_sem ( & dev ) ; 
 
					 
					 
					 
					     let   sem_avail   =   make_sem ( & dev ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     let   sem_finish   =   make_sem ( & dev ) ; 
 
					 
					 
					 
					     let   sem_finish   =   make_sem ( & dev ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1164,7 +1390,7 @@ fn main() {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                             . expect ( "Failed to wait for device idle" ) ; 
 
					 
					 
					 
					                             . expect ( "Failed to wait for device idle" ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                         swapchain_loader . destroy_swapchain ( swapchain ,   None ) ; 
 
					 
					 
					 
					                         swapchain_loader . destroy_swapchain ( swapchain ,   None ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     } 
 
					 
					 
					 
					                     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     ( swapchain ,   extents )   =   setup_swapchain ( 
 
					 
					 
					 
					                     ( swapchain ,   _ )   =   setup_swapchain ( 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					                         & pdev , 
 
					 
					 
					 
					                         & pdev , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                         & dev , 
 
					 
					 
					 
					                         & dev , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                         & surface , 
 
					 
					 
					 
					                         & surface , 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1202,10 +1428,9 @@ fn main() {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     xrel , 
 
					 
					 
					 
					                     xrel , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     yrel , 
 
					 
					 
					 
					                     yrel , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     .. 
 
					 
					 
					 
					                     .. 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 }   
 
 
					 
					 
					 
					                 }   if   mouse . relative_mouse_mode ( )   = >   { 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					                     // We only wanna do movement if the mouse is in relative mode (ie. its pinned to
 
 
					 
					 
					 
					                     // We only wanna do movement if the mouse is in relative mode (ie. its pinned to
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     // the center of the window and hidden)
 
 
					 
					 
					 
					                     // the center of the window and hidden)
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 if   mouse . relative_mouse_mode ( )   = >   { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     camera . rotation . y   - =   xrel   as   f32   *   ROT_MOUSE_SCALE ; 
 
					 
					 
					 
					                     camera . rotation . y   - =   xrel   as   f32   *   ROT_MOUSE_SCALE ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     camera . rotation . x   - =   yrel   as   f32   *   ROT_MOUSE_SCALE ; 
 
					 
					 
					 
					                     camera . rotation . x   - =   yrel   as   f32   *   ROT_MOUSE_SCALE ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     mouse . warp_mouse_in_window ( & window ,   width   as   i32   /   2 ,   height   as   i32   /   2 ) ; 
 
					 
					 
					 
					                     mouse . warp_mouse_in_window ( & window ,   width   as   i32   /   2 ,   height   as   i32   /   2 ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1244,6 +1469,8 @@ fn main() {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             & pipe , 
 
					 
					 
					 
					             & pipe , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             & desc_sets , 
 
					 
					 
					 
					             & desc_sets , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             & camera , 
 
					 
					 
					 
					             & camera , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             & skybox_buf , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             & skybox_image , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         ) ; 
 
					 
					 
					 
					         ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         end_cmd_buf ( & dev ,   & cmd_buf ) ; 
 
					 
					 
					 
					         end_cmd_buf ( & dev ,   & cmd_buf ) ;