【问题标题】:How to enable vsync in DirectX10如何在 DirectX10 中启用垂直同步
【发布时间】:2010-07-15 22:53:41
【问题描述】:

我正在使用 SlimDX 开发基于 DirectX10 的应用程序。我想启用类似于 DirectX9 的 vsync,但 fps 似乎没有锁定到 60Hz(如果我使用的是 Direct9,则会发生这种情况)。我正在使用这个设置 vsync

SwapChain.Present(1, PresentFlags.None);

我是不是做错了什么?

顺便说一句,我用 ATI HD5570 显卡运行 Win7。经过一番谷歌搜索,我推测 ATI 可以在某些游戏上强制 vsync。所以我想知道这是否相关。

对 C++ 代码的引用也可以。我会自己翻译。

谢谢

【问题讨论】:

  • 我也注意到输出很慢,经过一番挖掘,我发现DWM的内存实际上达到了1GB,它以200~300MB的增量上升,然后回落到不到100MB。这就是为什么我的应用程序的输出会跳过。也许那是我得到的频率低于 60Hz。知道是什么影响了 DWM 吗?我的应用程序只显示一个带有图片的旋转方形网格。就是这样,非全屏
  • 我发现在创建交换链时可以在 ModeDescription 设置刷新率。但它仍然不坚持 60Hz

标签: windows-7 directx slimdx directx-10


【解决方案1】:

SwapChain.Present 的第一个参数是 syncInterval。 0 表示应立即进行演示,无需同步。任何其他值表示演示应该与指定的下一个垂直空白同步。 所以像这样使用它:

SwapChain.Present(0, PresentFlags.None);

【讨论】:

  • 假设它应该像发布的那样工作,但它不在我的带有 ATI 5570HD 的机器上。我已经阅读了一些关于某些驱动程序版本的 ATI 问题的帖子,但我不确定我的是否受到影响。
  • 您是否尝试过运行 pix 来验证显示间隔的实际值并交换链 desc 或其他结构? msdn.microsoft.com/en-us/library/ee417062%28VS.85%29.aspx
【解决方案2】:

您可以尝试使用 Catalyst Control Center 强制 vsync

【讨论】:

  • 我也这样做了。还是不锁。它要么在 60 以上波动,要么在 50 到 60 之间波动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
相关资源
最近更新 更多