mod app; pub use app::App; use ::anyhow::Result; use ::vulkanalia::vk::DeviceV1_0; use ::winit::dpi::LogicalSize; use ::winit::event::{Event, WindowEvent}; use ::winit::event_loop::{ControlFlow, EventLoop}; use ::winit::window::WindowBuilder; pub const VALIDATION_ENABLED: bool = cfg!(debug_assertions); pub fn run() -> Result<()> { // Window let event_loop = EventLoop::new(); let window = WindowBuilder::new() .with_title("Vulkan Tutorial (Rust)") .with_inner_size(LogicalSize::new(1024, 768)) .build(&event_loop)?; // App let mut app = App::create(&window)?; let mut destroying = false; let mut minimized = false; event_loop.run(move |event, _, control_flow| { *control_flow = ControlFlow::Poll; match event { // Render a frame if our Vulkan app is not being destroyed Event::MainEventsCleared if !destroying && !minimized => app.render(&window).unwrap(), // Let the app know it has been resized Event::WindowEvent { event: WindowEvent::Resized(size), .. } => { if size.width == 0 || size.height == 0 { minimized = true; } else { minimized = false; app.resized = true; } } // Destroy our Vulkan app. Event::WindowEvent { event: WindowEvent::CloseRequested, .. } => { destroying = true; *control_flow = ControlFlow::Exit; unsafe { app.device.device_wait_idle().unwrap(); app.destroy(); } } _ => {} } }); }