2个不稳定版本
0.2.0 | 2020年3月29日 |
---|---|
0.1.0 | 2020年3月7日 |
#990 in 音频
用于 rusthesia
13KB
236 行
这是rusthesia的子包
lib.rs
:
Sdl2Timing
目的
此包支持为sdl2应用程序获取正确的时序。时序对于避免延迟(速度过慢)或高CPU负载(速度过快)非常重要。sdl2提供了启用vsync同步的可能性,这是在最低CPU负载下响应速度最好的解决方案。
使用CanvasBuilder启用vsync的示例
let mut canvas = sdl2::render::CanvasBuilder::new(window)
.accelerated()
.present_vsync()
.build()?;
那么为什么需要这个包呢?
至少在macbook air没有外接显示器的情况下,vsync根本不被使用。因此,依赖于vsync以获得适当的速率会导致主循环以最大速率旋转,并创建过高的负载。连接外接显示器后,vsync工作正常。因此,需要一种解决方案,既可以依赖于vsync,也可以使用延迟作为后备方案。
查询window.displayMode()以获取当前帧率并不可靠。至少在一台Linux机器上,报告了60Hz,而以41Hz的速率运行4K显示器。
即使是依赖于vsync也很棘手。首先,canvas.clear()和canvas.present()可以等待vsync发生。其次,对于移动元素的计算,知道下一个帧的时间对于正确的显示位置很重要。
解决方案
此包提供了一个名为Sdl2Timing的单个结构,它提供以下功能:
- 调用canvas present和canvas clear
- 主循环中的时序测量
- 输出时序数据以进行开发
- 有关实际帧率的详细信息...
- 下一个帧剩余时间
依赖项
~16MB
~347K SLoC