Broken: Initial resizing support

Seems to crash after some random amount of resizes
pull/1/head
itycodes 3 weeks ago
parent 6f553ba400
commit ce697661ae

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

Loading…
Cancel
Save