1use winit::{event::{Event, WindowEvent}, event_loop::{EventLoop, ControlFlow}};
2use thyme::{bench};
3
4mod demo;
5
6fn main() -> Result<(), Box<dyn std::error::Error>> {
11 use glium::glutin::{window::WindowBuilder};
12 use glium::{Display, Surface};
13
14 thyme::log::init(log::Level::Warn).unwrap();
16
17 let window_size = [1280.0, 720.0];
18 let events_loop = EventLoop::new();
19
20 let builder = WindowBuilder::new()
22 .with_title("Thyme Demo")
23 .with_inner_size(glium::glutin::dpi::LogicalSize::new(window_size[0], window_size[1]));
24 let context = glium::glutin::ContextBuilder::new();
25 let display = Display::new(builder, context, &events_loop)?;
26
27 let mut renderer = thyme::GliumRenderer::new(&display)?;
29 let mut io = thyme::WinitIo::new(&events_loop, window_size.into())?;
30 let mut context_builder = thyme::ContextBuilder::with_defaults();
31
32 demo::register_assets(&mut context_builder);
33
34 let mut context = context_builder.build(&mut renderer, &mut io)?;
35
36 let mut party = demo::Party::default();
37
38 let mut last_frame = std::time::Instant::now();
39 let frame_time = std::time::Duration::from_millis(16);
40
41 events_loop.run(move |event, _, control_flow| match event {
43 Event::MainEventsCleared => {
44 if std::time::Instant::now() > last_frame + frame_time {
45 display.gl_window().window().request_redraw();
46 }
47 *control_flow = ControlFlow::WaitUntil(last_frame + frame_time);
48 },
49 Event::RedrawRequested(_) => {
50 last_frame = std::time::Instant::now();
51
52 party.check_context_changes(&mut context, &mut renderer);
53
54 let mut target = display.draw();
55 target.clear_color(0.21404, 0.21404, 0.21404, 1.0); bench::run("thyme", || {
58 display.gl_window().window().set_cursor_visible(!party.theme_has_mouse_cursor());
59
60 let mut ui = context.create_frame();
61
62 bench::run("frame", || {
63 demo::build_ui(&mut ui, &mut party);
64 });
65
66 bench::run("draw", || {
67 renderer.draw_frame(&mut target, ui).unwrap();
68 });
69 });
70
71 target.finish().unwrap();
72 },
73 Event::WindowEvent { event: WindowEvent::CloseRequested, .. } => *control_flow = ControlFlow::Exit,
74 event => {
75 io.handle_event(&mut context, &event);
76 }
77 })
78}