I'm using glium as my opengl bindings, but it's impossible to get a reliable 60 FPS.
A minimal testcase is
#[macro_use]
extern crate glium;
extern crate clock_ticks;
use glium::Surface;
use glium::glutin;
fn main() {
use glium::DisplayBuild;
let display = glutin::WindowBuilder::new()
.build_glium()
.unwrap();
let frames = 60 * 5;
let trials = 3;
for _ in 0.. trials {
let start_ns = clock_ticks::precise_time_ns();
for _ in 0..frames {
display.draw().finish().unwrap();
}
let duration_ns = clock_ticks::precise_time_ns() - start_ns;
let duration_s = (duration_ns as f64) / 1_000_000_000f64;
let fps = (frames as f64) / duration_s;
let dropped = (duration_s - (frames as f64 * (1f64/60f64))) / (1f64/60f64);
println!("{} frames in {:.6} seconds = {:.3} fps (estimated {:.1} frames dropped)", frames, duration_s, fps, dropped);
}
}
Where I would expect 60 FPS, but is frequently showing 59 FPS when I'm running it (in OSX). The project is available on github for ease of compiling and running.
Is there any way I can tweak glium so that it won't drop frames? OSX is overriding the vsync
setting, so there's no way not to wait for vsync between each frame.