|
|
@ -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),
|
|
|
|
..
|
|
|
|
..
|
|
|
|