用sfml计算FPS

问题描述 投票:1回答:1

这个问题与sfml的主循环无关。我如何计算实际的帧率(例如,我启用了vsync,但主循环仍在高速运行),以便实际显示屏幕更新的速度(而不是主循环的速度)。测量主循环速度对我来说并不重要,但实际的窗口更新速度很重要。

c++ sfml frame-rate
1个回答
1
投票

SFML没有提供检索你当前帧率的方法,像OpenGL这样的后端也没有。因此,唯一的办法就是按照你的建议,监控主循环的速度。

另外。window.setFrameLimit(60)window.setVerticalSyncEnabled(true) 或内环 sleep 在我的SFML应用中,60Hz显示器上的V-Sync也会产生同样的效果,不同的是V-Sync的CPU和GPU成本更高(由于它们的同步方式)。chrono 例如,在你的主循环中。

确保将你的 draw 通过使用 time_point(s),进入 startend 点,并计算所经过的时间与 std::chrono::time_duration.

例如:

std::chrono::high_resolution_clock::time_point start;
std::chrono::high_resolution_clock::time_point end;
float fps;
while(window.isOpen()){
    // Perform some non-rendering logic there...

    // Performed. Now perform GPU stuff...
    start = std::chrono::high_resolution_clock::now();
    // window.draw, etc.
    end = std::chrono::high_resolution_clock::now();

     fps = (float)1e9/(float)std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count());
}
© www.soinside.com 2019 - 2024. All rights reserved.