如何在 HTML5 画布上垂直同步回调?
2 回答
没有这样的事情。浏览器应该负责进行适当的同步,您可以通过使用来帮助它requestAnimationFrame()
- 例如,请参阅http://paulirish.com/2011/requestanimationframe-for-smart-animating/和https://developer.mozilla .org/en-US/docs/Web/API/window/requestAnimationFrame。
* 2017 年新答案 *
尽管这是 2011 年的旧答案,并且在当时是准确的,但“没有这样的事情”的旧答案现在有些过时了。
目前,截至 2017 年,requestAnimationFrame() 已在实践中广泛用于同步刷新周期,因此它现在已成为 VSYNC 回调。
只要浏览器性能不受限制(例如快速桌面),它在 120Hz 游戏监视器上每秒有 120 次回调,因此它现在可以扩展以监视所有 Web 浏览器中的刷新率(除了少数例外,例如 Microsoft IE/Edge 的 105Hz 限制)。
在 Chrome 中,requestAnimationFrame() 的时间参数是 VSYNC 时间,根据 www.vsynctester.com,requestAnimationFrame() 的现代实现现在已成为事实上的 VSYNC 回调——它通常在前一个 VSYNC 页面翻转后立即回调,以为下一个刷新周期(或 Windows 合成管理器,就此而言)渲染一个框架。
PS 我现在是 W3C Web 平台工作组的特邀专家,目前有一项修改 HTML 5.2 DRAFT 8 以阐明 rAF() 同步以刷新周期。另外,我写了一篇文章来进一步改进 HTML 5.2 或更高版本的 VSYNC API:http: //www.blurbusters.com/blur-busters-working-on-changes-to-html-5-2/