使用 sfml 计算 FPS

Calculate FPS with sfml

本文关键字:FPS 计算 sfml 使用      更新时间:2023-10-16

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

SFML没有提供一种检索当前帧速率的方法,也没有像OpenGL那样的后端。因此,唯一的方法是按照您的建议监控主回路速度。

此外,60Hz 显示器上的window.setFrameLimit(60)window.setVerticalSyncEnabled(true)或内部环路sleep在我的 SFML 应用程序中会产生相同的效果,V-Sync 的差异是 CPU 和 GPU 更昂贵(由于它们的同步方式(。 因此,您可以依靠使用chrono例如在主循环中计算 FPS。

确保使用time_pointdraw呼叫包装为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());
}