获取 DirectX 设备的分辨率

Posted

技术标签:

【中文标题】获取 DirectX 设备的分辨率【英文标题】:Get resolution of DirectX device 【发布时间】:2010-08-16 05:43:37 【问题描述】:

我应该在哪里寻找 DirectX (3D) 设备的分辨率? getViewport 似乎有宽度和高度,但据我所知,视口应该是一个区域,而不是具有这些属性的 2D“画布”。

(我希望“分辨率”适用于设备,而不是直接适用于D3D。如果这部分有错误,请纠正我。)

简单的 MSDN 链接也是不错的答案,但是我已经浏览过它并找不到它。

编辑:getDisplayMode 似乎适用于更改分辨率的全屏应用程序,因为它返回显示适配器模式,但我也希望能够获得 d3d 窗口的大小。

【问题讨论】:

【参考方案1】:

DirectX 实际上并不拥有一个窗口。如果你记得初始化设备时,你会给它一个窗口句柄。它接受它并在此窗口中显示到它的视口。

因此,如果您专门寻找窗口大小,那么您会希望在操作系统级别获得它。

This question 讨论如何处理它。

GetWindowRect/GetClientRect(HWND, LPRECT)

【讨论】:

【参考方案2】:

如果由于某种原因您只有 d3d 接口,您可以使用 getcreationparameters 获取原始 hwnd,然后您可以按照之前的建议使用 GetWindowRect 或 GetClientRect。

D3DDEVICE_CREATION_PARAMETERS cparams;
RECT rect;

device->GetCreationParameters(&cparams);
GetWindowRect(cparams.hFocusWindow, &rect);

//rect.width  
//rect.height

【讨论】:

你不想要GetClientRect,它代表窗口内的实际屏幕区域,而不是包含窗口本身的大小(包括框架、标题等?)【参考方案3】:

也许这就是你需要的:IDirect3D9::GetAdapterDisplayMode 方法

http://msdn.microsoft.com/en-us/library/bb174316%28v=VS.85%29.aspx

【讨论】:

恐怕这还会返回适配器分辨率(全屏),而不仅仅是窗口大小本身。 我想当你处于全屏模式时,你可能会发现这个功能很有用。否则,没那么多。【参考方案4】:

如果您想要窗口大小,请在您设置的 hWnd 上调用“GetClientRect”。

【讨论】:

那是可能的,但我只有应用程序的 D3D 界面,没有别的。我正在寻找使用 DirectX 来查找大小的答案。

以上是关于获取 DirectX 设备的分辨率的主要内容,如果未能解决你的问题,请参考以下文章

如何获取linux设备分辨率

用Microsoft DirectX光线跟踪改善渲染质量

Qt安卓。获取设备屏幕分辨率

在 Unity 中获取真实设备的相机分辨率(即百万像素)

在 Windows Phone 8.1 XAML 中获取设备屏幕分辨率

Unity 之 代码获取IOS设备型号 -- 做分辨率适配