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:尝试从输出(监视器)中获取正确的显示模式的主要内容,如果未能解决你的问题,请参考以下文章
DirectX:以 DXGI_FORMAT_NV12 格式从 ID3D11Texture2D 获取 RGB 数据的最佳方法?