全屏独家:如何更改原始分辨率?
Fullscreen Exclusive: How to change the native resolution?
我可以通过在传递给 CreateSwapChainForHwnd
的 DXGI_SWAP_CHAIN_FULLSCREEN_DESC
中指定刷新率来成功控制本机刷新率。
我原以为本机分辨率会更改为由交换链的高度和宽度指定的分辨率。然而,我就没这么幸运了。
此外,CreateSwapChainForHwnd
建议您无法控制显示器的原始分辨率,因为您可以指定 DXGI_SWAP_CHAIN_FULLSCREEN_DESC
具有缩放参数
typedef enum DXGI_MODE_SCALING {
DXGI_MODE_SCALING_UNSPECIFIED = 0,
DXGI_MODE_SCALING_CENTERED = 1,
DXGI_MODE_SCALING_STRETCHED = 2
} DXGI_MODE_SCALING;
但是,视频游戏在全屏独占模式下更改分辨率时显然会触发模式更改(临时黑屏)。所以他们必须能够改变原始分辨率。他们是怎么做到的?
另外,我想知道为什么 DXGI_MODE_SCALING_STRETCHED
只填充屏幕的一个子矩形(DXGI_MODE_SCALING_CENTERED
以这个子矩形为中心,并且 DXGI_MODE_SCALING_UNSPECIFIED
将交换链的右上角与这个子矩形的右上角)。这个子矩形也会随着传递给 CreateSwapChainForHwnd
的高度和宽度的变化而变化。也许是因为我真的在全屏优化而不是全屏独占 并且这个子矩形与我的 window 大小相同(更改 window 大小没有'影响观察到的行为)。
DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH
Set this flag to enable an application to switch modes by calling IDXGISwapChain::ResizeTarget.
When switching from windowed to full-screen mode, the display mode (or monitor resolution) will be changed to match the dimensions of the application window.
https://docs.microsoft.com/en-us/windows/win32/api/dxgi/ne-dxgi-dxgi_swap_chain_flag
有趣的是,模式开关在更改刷新率时可以在没有标志的情况下正常工作,但在更改分辨率时不会
我可以通过在传递给 CreateSwapChainForHwnd
的 DXGI_SWAP_CHAIN_FULLSCREEN_DESC
中指定刷新率来成功控制本机刷新率。
我原以为本机分辨率会更改为由交换链的高度和宽度指定的分辨率。然而,我就没这么幸运了。
此外,CreateSwapChainForHwnd
建议您无法控制显示器的原始分辨率,因为您可以指定 DXGI_SWAP_CHAIN_FULLSCREEN_DESC
具有缩放参数
typedef enum DXGI_MODE_SCALING {
DXGI_MODE_SCALING_UNSPECIFIED = 0,
DXGI_MODE_SCALING_CENTERED = 1,
DXGI_MODE_SCALING_STRETCHED = 2
} DXGI_MODE_SCALING;
但是,视频游戏在全屏独占模式下更改分辨率时显然会触发模式更改(临时黑屏)。所以他们必须能够改变原始分辨率。他们是怎么做到的?
另外,我想知道为什么 DXGI_MODE_SCALING_STRETCHED
只填充屏幕的一个子矩形(DXGI_MODE_SCALING_CENTERED
以这个子矩形为中心,并且 DXGI_MODE_SCALING_UNSPECIFIED
将交换链的右上角与这个子矩形的右上角)。这个子矩形也会随着传递给 CreateSwapChainForHwnd
的高度和宽度的变化而变化。也许是因为我真的在全屏优化而不是全屏独占 并且这个子矩形与我的 window 大小相同(更改 window 大小没有'影响观察到的行为)。
DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH
Set this flag to enable an application to switch modes by calling IDXGISwapChain::ResizeTarget. When switching from windowed to full-screen mode, the display mode (or monitor resolution) will be changed to match the dimensions of the application window.
https://docs.microsoft.com/en-us/windows/win32/api/dxgi/ne-dxgi-dxgi_swap_chain_flag
有趣的是,模式开关在更改刷新率时可以在没有标志的情况下正常工作,但在更改分辨率时不会