Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.22 KB | None | 0 0
  1. use config::Config;
  2. use sdl2;
  3. use std::thread;
  4. use std::time;
  5.  
  6. pub fn run(conf: Config) {
  7.     trace!("Initializing SDL.");
  8.     let sdl = sdl2::init().unwrap();
  9.     trace!("Initializing video.");
  10.     let video = sdl.video().unwrap();
  11.     trace!("Initializing events.");
  12.     let event = sdl.event().unwrap();
  13.     let mut event_pump = sdl.event_pump().unwrap();
  14.     trace!("Loading OpenGL library.");
  15.     video.gl_load_library_default().unwrap();
  16.     debug!(
  17.         "Detected video driver {} with {} displays.",
  18.         video.current_video_driver(),
  19.         video.num_video_displays().unwrap()
  20.     );
  21.  
  22.     // Create 800x480 window. These are the dimensions of the Raspberry Pi 7"
  23.     // Touchscreen Display.
  24.     debug!("Creating window.");
  25.     let window = video
  26.         .window("oribi", 800, 480)
  27.         .opengl()
  28.         .resizable()
  29.         .build()
  30.         .unwrap();
  31.     if conf.hide_cursor {
  32.         sdl.mouse().show_cursor(false);
  33.     }
  34.     let mut canvas = window.into_canvas().accelerated().build().unwrap();
  35.     canvas.set_draw_color(sdl2::pixels::Color::RGB(255, 255, 255));
  36.  
  37.     let frame_duration = time::Duration::new(0, 1000000000 / 60);
  38.     let mut done = false;
  39.     while !done {
  40.         let start_time = time::Instant::now();
  41.         // Handle events
  42.         for e in event_pump.poll_iter() {
  43.             let status = match e.clone() {
  44.                 sdl2::event::Event::Quit { .. } |
  45.                 sdl2::event::Event::AppTerminating { .. } => {
  46.                     done = true;
  47.                     Ok(())
  48.                 }
  49.                 sdl2::event::Event::KeyUp {
  50.                     keycode: Some(sdl2::keyboard::Keycode::Escape), ..
  51.                 } => event.push_event(sdl2::event::Event::Quit { timestamp: 0 }),
  52.                 e => {
  53.                     trace!("Event {:?}.", e);
  54.                     Ok(())
  55.                 }
  56.             };
  57.             if let Err(err) = status {
  58.                 warn!("Error handling event {:?}: {:?}.", e, err);
  59.             }
  60.         }
  61.         // Render
  62.         canvas.clear();
  63.         canvas.present();
  64.         if let Some(sleep_time) = frame_duration.checked_sub(start_time.elapsed()) {
  65.             thread::sleep(sleep_time);
  66.         }
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement