DXGI:尝试从输出(监视器)中获取正确的显示模式

Posted

技术标签:

【中文标题】DXGI:尝试从输出(监视器)中获取正确的显示模式【英文标题】:DXGI: trying to get correct display mode from output (monitor) 【发布时间】:2013-04-15 14:18:53 【问题描述】:

我目前遇到了一个令人讨厌的小问题。我开发了一个将 DXGI 模式描述归零的应用程序。结构并调用 FindClosestMatchingMode(),正如宣传的那样,“倾向于桌面分辨率”。

如果笔记本电脑完全在自己的显示器上运行,这会很好——只要我插入另一台显示器,它就会发疯。在我扩展我的桌面的情况下,它仍然可以正确获得笔记本电脑显示器的分辨率,但附加的显示器(运行 1080p)会产生 800*480 的偏好:)(当然,穷人的 16:10,但是......)

对克隆/组合的显示器做同样的事情(导致 1 个输出设备),即使它们的分辨率相同,也会产生相同的 800*480 废话。

什么给了?有没有人可能找到一种方法来通过 DXGI 正确获取显示器的当前模式,或者找到一个完全不同但功能强大的方法来解决这个问题的指针?

在 D3D9 的日子里生活更轻松 =)

-- 更新

事实证明,与内部显示器相比,对属于外部显示器的 IDXGIOutput 实例进行的任何 FindClosestMatchingMode() 调用的行为都不同(并且在大多数情况下是完全错误的),即使它们的原始分辨率相同。最重要的是,其他系统没有这个问题,但我无法绕过支持这台特定的笔记本电脑,包括它的驱动程序。

是时候开始一个好的旧设置对话框了。

【问题讨论】:

【参考方案1】:

不是最好的解决方案,但由于我被限制在这些确切的机器上,我决定通过 GetSystemMetrics() (SM_CXSCREEN/SM_CYSCREEN) 获取显示器的当前分辨率,这无疑只适用于主显示器,但还有其他方法,并提供这个对提供给 FindClosestMatchingMode() 的 ModeToMatch 结构的分辨率。

然后它会选择正确的(桌面)分辨率。

当然欢迎更好的答案;)

【讨论】:

以上是关于DXGI:尝试从输出(监视器)中获取正确的显示模式的主要内容,如果未能解决你的问题,请参考以下文章

DXGI 文本输出轨迹

ubuntu不识别显示器要怎么设置高分辨率

DirectX:以 DXGI_FORMAT_NV12 格式从 ID3D11Texture2D 获取 RGB 数据的最佳方法?

Direct3D 和 DXGI 之间的区别

自定义输出分辨率 DuplicateOutput DXGI

如何从显示设备名称中获取 HMONITOR 句柄?