小智 6
FRAPS 和类似程序通过挂钩用于显示渲染帧的 API 调用来工作(例如IDirect3DDevice9::Present方法或 OpenGL SwapBuffers())
本质上,当游戏即将显示新帧时,程序执行会转移到 FRAPS 安装的钩子上。该代码可以以任何方式修改帧,在其上绘制 FPS 计数器,更改颜色或截取视频录制的屏幕截图。完成后 FRAPS 调用原始 API 来显示帧。
不同的图形 API 需要不同的钩子,所以 FRAPS 必须有针对 OpenGL 和 Direct3D 8 / 9 / 10 等的单独实现。这也意味着当新技术(如 Direct2D)发布时,FRAPS 需要更新来处理这些。
安装和移除钩子的实际过程相当复杂;您可以在此 StackOverflow 问题中找到更多信息:
或在这里:案例研究:Fraps
计算 FPS 很简单;程序只需要帧之间经过的时间。例如:帧时间 = 20 ms;FPS = 1000 毫秒 / 20 毫秒 = 50;
如果帧时间变化很大,FPS 值会剧烈波动。更好的方法是计算最后 10 帧的平均值或计算最后一秒绘制的帧数。尽管 FRAPS 中的数字似乎变化太快。
| 归档时间: |
|
| 查看次数: |
11309 次 |
| 最近记录: |