diff options
Diffstat (limited to 'examples/vsync.rs')
-rw-r--r-- | examples/vsync.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/examples/vsync.rs b/examples/vsync.rs new file mode 100644 index 0000000..ec9ea79 --- /dev/null +++ b/examples/vsync.rs @@ -0,0 +1,46 @@ +#[cfg(target_os = "android")] +#[macro_use] +extern crate android_glue; + +extern crate clock_ticks; +extern crate glutin; + +mod support; + +#[cfg(target_os = "android")] +android_start!(main); + +#[cfg(not(feature = "window"))] +fn main() { println!("This example requires glutin to be compiled with the `window` feature"); } + +#[cfg(feature = "window")] +fn resize_callback(width: u32, height: u32) { + println!("Window resized to {}x{}", width, height); +} + +#[cfg(feature = "window")] +fn main() { + println!("Vsync example. This example may panic if your driver or your system forces \ + you out of vsync. This is intended when `build_strict` is used."); + + let mut window = glutin::WindowBuilder::new().with_vsync().build_strict().unwrap(); + window.set_window_resize_callback(Some(resize_callback as fn(u32, u32))); + unsafe { window.make_current() }; + + let context = support::load(&window); + + while !window.is_closed() { + let before = clock_ticks::precise_time_ns(); + + context.draw_frame((0.0, 1.0, 0.0, 1.0)); + window.swap_buffers(); + + for ev in window.poll_events() { + println!("{:?}", ev); + } + + let after = clock_ticks::precise_time_ns(); + println!("Vsync example - Time of previous frame: {}ms", + (after - before) as f32 / 1000000.0); + } +} |