简体   繁体   English

避免在glium中丢帧

[英]Avoiding dropped frames in glium

I'm using glium as my opengl bindings, but it's impossible to get a reliable 60 FPS. 我使用glium作为我的opengl绑定,但是不可能获得可靠的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). 我期望60 FPS,但在我运行它时经常显示59 FPS(在OSX中)。 The project is available on github for ease of compiling and running. 该项目可在github上获得,以便于编译和运行。

Is there any way I can tweak glium so that it won't drop frames? 有什么方法可以调整glium以便它不会丢帧吗? OSX is overriding the vsync setting, so there's no way not to wait for vsync between each frame. OSX覆盖了vsync设置,因此无法在每个帧之间等待vsync。

Yes, like @8bitree, I suspected that you are measuring incorrectly, rather than it being an actual problem. 是的,就像@ 8bitree一样,我怀疑你的测量不正确,而不是实际问题。 On my system, Debian: 在我的系统上,Debian:

steve@warmachine:~/tmp/guess$ cargo run
     Running `target/debug/guess`
300 frames in 4.427656 seconds = 67.756 fps (estimated -34.3 frames dropped)
300 frames in 0.006892 seconds = 43529.834 fps (estimated -299.6 frames dropped)
300 frames in 0.006522 seconds = 45997.412 fps (estimated -299.6 frames dropped)
steve@warmachine:~/tmp/guess$ cargo run
     Running `target/debug/guess`
300 frames in 4.953447 seconds = 60.564 fps (estimated -2.8 frames dropped)
300 frames in 4.999410 seconds = 60.007 fps (estimated -0.0 frames dropped)
300 frames in 1.608712 seconds = 186.485 fps (estimated -203.5 frames dropped)

So yeah, something is a bit... odd. 所以,是的,有点......奇怪。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM