From b05ef16d817af85d175d60422591d90fe3ec4218 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Fri, 23 Jan 2015 09:31:05 +0100 Subject: Implement vsync for x11 and add vsync example --- examples/vsync.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 examples/vsync.rs (limited to 'examples') 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); + } +} -- cgit v1.2.3