C++ 用sfml计算FPS

C++ 用sfml计算FPS,c++,sfml,frame-rate,C++,Sfml,Frame Rate,这个问题与sfml中的主循环无关。如何计算实际帧速率(例如,我启用了vsync,但主循环仍以高速运行),以便它实际显示屏幕更新的速度(而不是主循环的速度)。测量主循环速度对我来说并不重要,但实际的窗口更新速度是。SFML没有提供检索当前帧速率的方法,后端也不像OpenGL那样。因此,按照您的建议,唯一的方法是监控主回路速度 此外,60Hz监视器上的window.setFrameLimit(60)或window.setVerticalSyncEnabled(true)或内部循环sleep在我的SF

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

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

此外,60Hz监视器上的
window.setFrameLimit(60)
window.setVerticalSyncEnabled(true)
或内部循环
sleep
在我的SFML应用程序中也会产生相同的效果,V-Sync的区别在于CPU和GPU的成本更高(由于它们的同步方式)。 因此,您可以通过在主循环中使用
chrono
来计算FPS

确保使用
time\u point
(s)将
draw
调用包装为
start
end
点,并使用
std::chrono::time\u 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());
}
std::chrono::高分辨率时钟::时间点开始;
标准::时钟::高分辨率时钟::时间点结束;
浮式fps;
while(window.isOpen()){
//在那里执行一些非渲染逻辑。。。
//执行。现在执行GPU的东西。。。
开始=标准::时钟::高分辨率时钟::现在();
//窗、画等。
end=std::chrono::高分辨率时钟::现在();
fps=(float)1e9/(float)std::chrono::duration_cast(end-start).count());
}

sdl有计算fps(刷新率)的方法吗?从这个来源()看来,要计算fps,sdl的方法与我调用sdl_GetTicks时使用的方法类似。我认为准确度和目的是一样的。