1use winit::{
2 event::*,
3 event_loop::{ControlFlow, EventLoop},
4 window::WindowBuilder,
5};
6use crate::renderer::Renderer;
7
8pub struct App;
9
10impl App {
11 pub async fn run() {
12 env_logger::init();
13 let event_loop = EventLoop::new().unwrap();
14 let window = WindowBuilder::new().build(&event_loop).unwrap();
15
16 let mut renderer = Renderer::new(&window).await;
17
18 event_loop.run(move |event, elwt| {
19 match event {
20 Event::WindowEvent {
21 ref event,
22 window_id,
23 } if window_id == window.id() => match event {
24 WindowEvent::CloseRequested
25 | WindowEvent::KeyboardInput {
26 event:
27 KeyEvent {
28 state: ElementState::Pressed,
29 physical_key: winit::keyboard::PhysicalKey::Code(winit::keyboard::KeyCode::Escape),
30 ..
31 },
32 ..
33 } => elwt.exit(),
34 WindowEvent::Resized(physical_size) => {
35 renderer.resize(*physical_size);
36 }
37 WindowEvent::RedrawRequested => {
38 match renderer.render() {
39 Ok(_) => {}
40 Err(wgpu::SurfaceError::Lost) => renderer.resize(renderer.size),
41 Err(wgpu::SurfaceError::OutOfMemory) => elwt.exit(),
42 Err(e) => eprintln!("{:?}", e),
43 }
44 }
45 _ => {}
46 },
47 Event::AboutToWait => {
48 window.request_redraw();
49 }
50 _ => {}
51 }
52 }).unwrap();
53 }
54}