You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

屏幕撕裂的原理是什么?60Hz屏每33ms调用present(0,0)仍撕裂原因

问题解答

一、屏幕显示的基本机制

60Hz刷新率的屏幕,每16.6ms完成一整帧的完整显示流程:从屏幕左上角开始逐行扫描像素到右下角,结束后会有一段不可见的垂直回扫时间,整个周期刚好是1000/60≈16.6ms,绝非你猜测的2ms。

屏幕是连续逐行更新画面的,而非瞬间刷新整个屏幕。如果在扫描过程中,显卡突然替换了帧缓冲区的内容,屏幕上就会同时出现旧帧的下半部分和新帧的上半部分,这就是你看到的撕裂现象。

二、为什么33ms调用present(0,0)仍会撕裂?

你调用的present(0, 0)里,第二个参数是同步间隔(sync interval),设为0意味着显卡不会等待屏幕的垂直同步信号,直接提交帧内容。哪怕你固定每33ms调用一次,只要提交时机刚好落在屏幕的扫描过程中(而非垂直回扫的间隙),就会触发撕裂。

另外,60Hz屏幕的单帧间隔是16.6ms,你每33ms提交一帧相当于每秒30帧,但这并不代表提交时机能自动和屏幕的垂直回扫对齐。哪怕是全屏独占模式,只要没开启垂直同步(即把同步间隔设为1),显卡就会无视屏幕的扫描状态,直接更新帧缓存,撕裂必然会发生。

还有一种可能是计时误差:33ms的间隔如果存在波动(比如操作系统调度延迟、渲染耗时不稳定),也会导致提交时机偏离垂直回扫窗口,进而出现撕裂。

解决建议

  • 把present的同步间隔参数改为1,强制显卡等待垂直同步信号后再提交帧,这样能保证帧更新刚好在垂直回扫的间隙完成,彻底避免撕裂。
  • 确保帧生成和提交的间隔稳定,尽量减少渲染耗时的波动,避免因系统调度延迟导致的时机偏差。

内容的提问来源于stack exchange,提问作者jiafeng chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:33:03