From ce697661aebf1d86bc5cd4859c2d6fe0bafc9e19 Mon Sep 17 00:00:00 2001 From: itycodes Date: Mon, 31 Mar 2025 13:32:12 +0200 Subject: [PATCH] Broken: Initial resizing support Seems to crash after some random amount of resizes --- src/main.rs | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 43e289f..4081884 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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), ..