|
1 | | -use crate::wgpu_renderer::swapchain::MySwapchainManager; |
2 | | -use anyhow::Context; |
3 | | -use mygraphics_shaders::ShaderConstants; |
4 | | -use std::sync::Arc; |
5 | | -use winit::event::{Event, WindowEvent}; |
6 | | -use winit::event_loop::{ActiveEventLoop, ControlFlow, EventLoop}; |
| 1 | +use crate::wgpu_renderer::app::App; |
| 2 | +use winit::event_loop::{ControlFlow, EventLoop}; |
7 | 3 |
|
| 4 | +mod app; |
8 | 5 | mod render_pipeline; |
9 | 6 | mod renderer; |
10 | | -mod swapchain; |
| 7 | +mod state; |
11 | 8 |
|
12 | 9 | pub fn main() -> anyhow::Result<()> { |
13 | 10 | env_logger::init(); |
14 | | - pollster::block_on(main_inner()) |
15 | | -} |
16 | 11 |
|
17 | | -pub async fn main_inner() -> anyhow::Result<()> { |
18 | | - // env_logger::init(); |
19 | 12 | let event_loop = EventLoop::new()?; |
20 | | - // FIXME(eddyb) incomplete `winit` upgrade, follow the guides in: |
21 | | - // https://github.com/rust-windowing/winit/releases/tag/v0.30.0 |
22 | | - #[allow(deprecated)] |
23 | | - let window = Arc::new( |
24 | | - event_loop.create_window( |
25 | | - winit::window::Window::default_attributes() |
26 | | - .with_title("Rust GPU - wgpu") |
27 | | - .with_inner_size(winit::dpi::LogicalSize::new( |
28 | | - f64::from(1280), |
29 | | - f64::from(720), |
30 | | - )), |
31 | | - )?, |
32 | | - ); |
33 | | - |
34 | | - let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::from_env_or_default()); |
35 | | - let surface = instance.create_surface(window.clone())?; |
36 | | - let adapter = |
37 | | - wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface)).await?; |
38 | | - |
39 | | - let required_features = wgpu::Features::PUSH_CONSTANTS; |
40 | | - let required_limits = wgpu::Limits { |
41 | | - max_push_constant_size: 128, |
42 | | - ..Default::default() |
43 | | - }; |
44 | | - let (device, queue) = adapter |
45 | | - .request_device(&wgpu::DeviceDescriptor { |
46 | | - label: None, |
47 | | - required_features, |
48 | | - required_limits, |
49 | | - experimental_features: wgpu::ExperimentalFeatures::disabled(), |
50 | | - memory_hints: wgpu::MemoryHints::Performance, |
51 | | - trace: Default::default(), |
52 | | - }) |
53 | | - .await |
54 | | - .context("Failed to create device")?; |
55 | | - |
56 | | - let mut swapchain = MySwapchainManager::new(adapter.clone(), device.clone(), window, surface); |
57 | | - let renderer = renderer::MyRenderer::new(device, queue, swapchain.format())?; |
| 13 | + event_loop.set_control_flow(ControlFlow::Poll); |
58 | 14 |
|
59 | | - let start = std::time::Instant::now(); |
60 | | - let mut event_handler = |
61 | | - move |event: Event<_>, event_loop_window_target: &ActiveEventLoop| match event { |
62 | | - Event::AboutToWait => swapchain.render(|render_target| { |
63 | | - renderer.render( |
64 | | - &ShaderConstants { |
65 | | - time: start.elapsed().as_secs_f32(), |
66 | | - width: render_target.texture().width(), |
67 | | - height: render_target.texture().height(), |
68 | | - }, |
69 | | - render_target, |
70 | | - ); |
71 | | - }), |
72 | | - Event::WindowEvent { event, .. } => { |
73 | | - match event { |
74 | | - WindowEvent::KeyboardInput { |
75 | | - event: |
76 | | - winit::event::KeyEvent { |
77 | | - logical_key: |
78 | | - winit::keyboard::Key::Named(winit::keyboard::NamedKey::Escape), |
79 | | - state: winit::event::ElementState::Pressed, |
80 | | - .. |
81 | | - }, |
82 | | - .. |
83 | | - } |
84 | | - | WindowEvent::CloseRequested => event_loop_window_target.exit(), |
85 | | - WindowEvent::Resized(_) => swapchain.should_recreate(), |
86 | | - _ => {} |
87 | | - } |
88 | | - Ok(()) |
89 | | - } |
90 | | - _ => { |
91 | | - event_loop_window_target.set_control_flow(ControlFlow::Poll); |
92 | | - Ok(()) |
93 | | - } |
94 | | - }; |
| 15 | + let mut app = App::new(); |
| 16 | + event_loop.run_app(&mut app)?; |
95 | 17 |
|
96 | | - // FIXME(eddyb) incomplete `winit` upgrade, follow the guides in: |
97 | | - // https://github.com/rust-windowing/winit/releases/tag/v0.30.0 |
98 | | - #[allow(deprecated)] |
99 | | - event_loop.run(move |event, event_loop_window_target| { |
100 | | - event_handler(event, event_loop_window_target).unwrap(); |
101 | | - })?; |
102 | 18 | Ok(()) |
103 | 19 | } |
0 commit comments