如何找出真实屏幕刷新率(不是四舍五入的数字)

2024-01-01

根据微软的这篇文章 http://support.microsoft.com/kb/2006076/en-us用户设置的屏幕刷新率可以(并且大部分是)小数。用户设置为 59Hz,但屏幕按照屏幕显示 60Hz 运行,但实际上是 59.94Hz。我需要 59.94Hz 才能获得极其流畅的动画。

Using IDirect3DDevice9::获取显示模式 http://msdn.microsoft.com/en-us/library/windows/desktop/bb174387%28v=vs.85%29.aspx我只得到一个int根据定义不能代表真实时间的值(同样适用枚举显示设置 http://msdn.microsoft.com/en-us/library/dd162611%28v=VS.85%29.aspx)。我每秒都会遇到明显的卡顿,因为它报告四舍五入/截断的 59。如果我手动将应用程序中报告的计时更正为 59.94,它会运行顺利。

有人知道如何检索真实的屏幕刷新率吗?

我当前的解决方法是将 60Hz 和 59Hz 都映射到恒定的 59.94Hz,但这并不令人满意。


如果您的目标是 Windows Vista 或更高版本,则答案取决于您的应用程序运行的模式。

如果它是窗口应用程序(或全屏窗口),刷新率是根据用户设置和其他因素通过桌面窗口管理器(DWM)控制的。使用DwmGetCompositionTimingInfo http://msdn.microsoft.com/en-us/library/windows/desktop/aa969514%28v=vs.85%29.aspx并查看 DWM_TIMING_INFO::rateRefresh 以获取监视器刷新率。

如果应用程序是真正的全屏,那么您创建的全屏交换链将覆盖系统默认值。但是,您选择的刷新率 (DXGI_SWAP_CHAIN_FULLSCREEN_DESC::RefreshRate) 应与显示器支持的刷新率之一匹配。您可以使用以下命令获取支持的刷新率列表IDXGIOutput::获取显示模式列表 http://msdn.microsoft.com/en-us/library/windows/desktop/bb174549%28v=vs.85%29.aspx。以下是如何执行此操作的示例:

UINT numModes = 0;
dxgiOutput->GetDisplayModeList(DXGI_FORMAT_B8G8R8A8_UNORM, 0, &numModes, NULL);
DXGI_MODE_DESC* modes = new DXGI_MODE_DESC[numModes];
dxgiOutput->GetDisplayModeList(DXGI_FORMAT_B8G8R8A8_UNORM, 0, &numModes, modes);
// see modes[i].RefreshRate

无论如何,如果您是三重缓冲的,您就不应该看到故障。您应该尽可能快地呈现,操作系统就会按时呈现。如果将三重缓冲与自定义托管帧计时相结合,则保证实际上不会获得三重缓冲,并且只要 vblank 阶段出现漂移,您就会遇到故障(即使您具有完美的值,这种情况也会逐渐发生)刷新率)。如果您想坚持使用三重缓冲,请尽可能快地呈现,并让操作系统负责呈现时间。如果您使用自己的计时来驱动 Present()(例如,为了获得低延迟响应),您应该调用IDXGIOutput::等待VBlank http://msdn.microsoft.com/en-us/library/windows/desktop/bb174559%28v=vs.85%29.aspx在另一个线程上帮助同步帧时序。如果你最终这样做了,你也应该使用IDXGISwapChain::GetFrameStatistics http://msdn.microsoft.com/en-us/library/windows/desktop/bb174573%28v=vs.85%29.aspx确保您从任何虚假故障中恢复过来,否则您最终会落后一帧。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找出真实屏幕刷新率(不是四舍五入的数字) 的相关文章

随机推荐

  • 如何在 remix run 中从实用程序函数重定向

    我正在使用 Remix run 我想从 auth 实用程序函数重定向到我的登录页面 但它不起作用 这是与我的身份验证实用程序方法类似的功能 import redirect from remix async function authenti
  • 在 for 循环中使用“else”的 Pythonic 方法[重复]

    这个问题在这里已经有答案了 我几乎没有注意到Python程序在for循环中使用了else 我最近使用它在退出时根据循环变量条件执行操作 因为它在范围内 在 for 循环中使用 else 的 Python 方式是什么 有什么值得注意的用例吗
  • Jquery找到所有以字符串开头的id?

    只是想知道如何在整个页面中搜索以 content 开头的所有 id 以及如何仅在名为 extra content 的命名 div 中找到它们 一旦我有了所有的ID 我想隐藏它们 下面是我想找到的示例 div div lt Find div
  • 使用 Maven 的 JavaScript 缩小工作流程

    我想知道是否有任何 最佳实践 可以将 现代 JavaScript 构建工作流程 集成到生成 WAR 工件的 Maven 构建中 我发现了几个处理串联和缩小的 Maven 插件 WRO4J https code google com p wr
  • 如何开始 VOIP 编程? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何开始开发 VoIP 产品 想听听
  • 抛出异常时不调用析构函数

    考虑以下代码 include
  • MongoDB 和 C#:不区分大小写的搜索

    我在用MongoDB http www mongodb org 和MongoDB 的 C 驱动程序 http www mongodb org display DOCS CSharp Language Center CSharpLanguag
  • Android GUI架构-Surface/view/window/canvas之间的关系

    更新 经过几天的谷歌搜索和实验 https github com pierrchen understandAndroidUI 我已经找到了大部分愚蠢问题的答案 查看我提交的答案 Android Window 的职责是什么 这里有一些问题 它
  • 给定替换 S 和列表 X,如何将 S 应用于 X

    假设我有一个替代品S并列出Xs 其中每个变量出现在Xs也发生在S 我如何找到该列表S Xs 即通过应用替换获得的列表S到列表Xs 更具体地说 我有一组谓词和 DCG 规则 看起来像 pat P gt seg P seg seg X Y Z
  • Android - 构建通知,TaskStackBuilder.addParentStack 不起作用

    我正在尝试从 Android 文档解释的通知启动活动 但是当我打开通知然后按后退按钮时 HomeActivity 父级 不会打开 而是应用程序关闭 我究竟做错了什么 Intent resultIntent new Intent contex
  • 以同样的方式处理由空格分隔的单词

    我试图找到同时出现在多个文档中的单词 让我们举个例子 doc1 this is a document about milkyway doc2 milky way is huge 正如您在上面两个文档中看到的 单词 milkyway 在两个文
  • 为什么 C 中的 struct 关键字必须位于结构实例之前?

    假设我在 C 中定义了一个结构体 如果我声明该结构体的一个实例 则必须在其前面包含 struct 关键字 Define struct struct Book char title 50 char author 50 char subject
  • iphone:使视图透明但子视图不透明

    我有一个名为 A 的自定义 UIViewController 我想将其视图添加到另一个控制器 名为 B 视图作为子视图 A 的视图包含两个按钮作为子视图 我想让 A 的视图透明 但其中的按钮不透明 我想知道有什么办法可以做到吗 据我观察 如
  • gcc、严格别名和通过联合进行转换

    你有什么恐怖故事要讲吗 GCC 手册最近添加了有关 fstrict aliasing 和通过联合强制转换指针的警告 获取地址 转换结果指针并取消引用结果未定义的行为 强调 即使强制转换使用联合类型 例如 union a union int
  • Facebook Messenger 机器人应用程序 - 持久菜单未出现

    我正在构建一个 Facebook 聊天机器人应用程序 我已经使用 HTTP POST 和有效的页面访问令牌通过一些 JSON 设置了持久菜单 为了检查我的设置是否正确 我发出了 GET 请求https graph facebook com
  • 在设计模式下锁定 .NET 自定义控件中的高度调整大小

    我正在开发一个 C NET 自定义控件 我想防止用户在设计模式下调整高度大小 同时允许他们调整宽度 我知道这个问题有点老了 但以防万一有人寻找这个我会尝试回答它 你必须覆盖设置边界核心 http msdn microsoft com en
  • 使用 django 动态生成 PDF 并通过电子邮件发送

    我有一个 django 应用程序 可以根据 HTML 表单上的用户输入动态生成 PDF 使用 reportlab pypdf 并返回带有以下内容的 HTTP 响应 application pdfMIME 类型 我想选择执行上述操作或通过电子
  • 在 DART 中创建泛型类型的实例

    我想知道是否可以在 Dart 中创建泛型类型的实例 在 Java 等其他语言中 您可以使用反射来解决这个问题 但我不确定这在 Dart 中是否可行 我有这门课 class GenericController
  • Pandas 不会就地 fillna()

    我正在尝试在数据框中的 4 个特定列 字符串 对象类型 上用 填充 NA 我可以在 fillna 时将这些列分配给新变量 但是当我 fillna 就位时 基础数据不会改变 a n6 a n6 PROV LAST PROV FIRST PRO
  • 如何找出真实屏幕刷新率(不是四舍五入的数字)

    根据微软的这篇文章 http support microsoft com kb 2006076 en us用户设置的屏幕刷新率可以 并且大部分是 小数 用户设置为 59Hz 但屏幕按照屏幕显示 60Hz 运行 但实际上是 59 94Hz 我