1#[macro_use]
4extern crate gust_render as gust;
5extern crate glfw;
6
7use gust::prelude::*;
8use gust::shared_window::SharedWindow;
9use std::rc::Rc;
10use std::sync::mpsc;
11use std::thread;
12
13fn main() {
14 let mut window = Window::new(gust::WIDTH, gust::HEIGHT, "Hello");
15 let event_handler = EventHandler::new(&window);
16 let mut shared = SharedWindow::new(&mut window);
17 let (send, recv) = mpsc::channel();
18
19 let renderer = thread::spawn(move || {
20 render(&mut shared, recv);
21 });
22
23 window.poll(None);
24 while window.is_open() {
25 window.poll_events();
26
27 for event in event_handler.fetch() {
28 match event.1 {
29 pressed!(Escape) => window.close(),
30 _ => {}
31 }
32 }
33 }
34 send.send(()).ok().expect("Failed to send ()");
35
36 renderer.join().unwrap();
37}
38
39fn render(shared: &mut SharedWindow, recv: mpsc::Receiver<()>) {
40 shared.active();
41 let texture_rc =
42 Rc::new(Texture::from_path("examples/texture/Dirt.png").expect("Cannot open New.png"));
43 let sprite = Sprite::from(&texture_rc);
44
45 loop {
46 if recv.try_recv() == Ok(()) {
47 break;
48 }
49 shared.clear(Color::red());
50 shared.draw(&sprite);
51 shared.display();
52 }
53}