2023-04-05 10:48:25 -04:00
|
|
|
mod app;
|
|
|
|
pub use app::App;
|
|
|
|
|
2023-04-05 13:04:20 -04:00
|
|
|
use ::anyhow::Result;
|
2023-04-07 10:48:51 -04:00
|
|
|
use ::winit::dpi::LogicalSize;
|
|
|
|
use ::winit::event::{Event, WindowEvent};
|
|
|
|
use ::winit::event_loop::{ControlFlow, EventLoop};
|
|
|
|
use ::winit::window::WindowBuilder;
|
2023-04-05 10:48:25 -04:00
|
|
|
|
|
|
|
pub const VALIDATION_ENABLED: bool = cfg!(debug_assertions);
|
|
|
|
|
2023-04-07 10:48:51 -04:00
|
|
|
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 = unsafe { App::create(&window)? };
|
|
|
|
let mut destroying = 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 => unsafe { app.render(&window) }.unwrap(),
|
|
|
|
// Destroy our Vulkan app.
|
|
|
|
Event::WindowEvent {
|
|
|
|
event: WindowEvent::CloseRequested,
|
|
|
|
..
|
|
|
|
} => {
|
|
|
|
destroying = true;
|
|
|
|
*control_flow = ControlFlow::Exit;
|
|
|
|
unsafe {
|
|
|
|
app.destroy();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_ => {}
|
|
|
|
}
|
|
|
|
});
|
2023-04-05 10:48:25 -04:00
|
|
|
}
|