c++ - D3D11CreateDeviceAndSwapChain 不会在第二台显示器上切换到全屏
问题描述
我遇到的最初问题是我无法让我的游戏在我的第二台显示器上全屏运行。转到显示设置并将主显示从第 2 个切换到第 1 个,让我的游戏全屏运行,没有任何问题。我的两台显示器的分辨率相同,因此问题必须出在其他地方。
负责全屏切换的代码如下所示:
// create device and front/back buffers
if( FAILED( hr = D3D11CreateDeviceAndSwapChain(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
nullptr,
createFlags,
nullptr,
0,
D3D11_SDK_VERSION,
&sd,
&pSwapChain,
&pDevice,
nullptr,
&pImmediateContext ) ) )
{
throw CHILI_GFX_EXCEPTION( hr,L"Creating device and swap chain" );
}
而交换链描述sd
之前是这样创建的:
// create device and swap chain/get render target view
DXGI_SWAP_CHAIN_DESC sd = {};
sd.BufferCount = 1;
sd.BufferDesc.Width = Graphics::ScreenWidth;
sd.BufferDesc.Height = Graphics::ScreenHeight;
sd.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
sd.BufferDesc.RefreshRate.Numerator = 1;
sd.BufferDesc.RefreshRate.Denominator = 60;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.OutputWindow = key.hWnd;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.Windowed = !f;
sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
f
设置为true
并且代码完全按照我希望它在监视器 1 上执行的操作,但是窗口在监视器 2 上保持窗口化。hr
也S_OK
表明一切正常。
DXGI 参考说:
我们建议您创建一个窗口化交换链,并允许最终用户通过 IDXGISwapChain::SetFullscreenState 将交换链更改为全屏;
使用交换链方法快速修改代码以设置全屏状态会导致:
hr = pSwapChain->SetFullscreenState(TRUE, vOutput[0]);
HRESULThr
表示该方法以E_FAIL
.
作为一项额外的测试,更改vOutput[0]
为vOutput[1]
让我的游戏在另一台显示器上全屏运行,没有任何问题。
试图找到这方面的信息导致我访问了多个 Steam 论坛帖子,其中不同的用户在尝试全屏播放诸如Devil May Cry 4、Company of Heroes 2或Resident Evil 5等游戏时遇到相同类型的错误。所有这些帖子的共同点是游戏没有在第二台显示器上全屏运行。从这些帖子中的信息中,我还发现如果屏幕分辨率设置为 1680x1050 或更低,则全屏将起作用。
这让我相信实际的错误可能在 direct3D 文件中的某个地方,但是在哪里呢?
为什么SetFullscreenState
返回E_FAIL
并且D3D11CreateDeviceAndSwapChain
什么都不做,我怎样才能让它工作?
如果不可能,那么SetFullscreenState
实现相同目标的替代品是什么?
解决方案
推荐阅读
- c++ - 丢失原始套接字上的有效负载数据,winSock2
- laravel - Laravel 验证 - 如果字段存在则拒绝
- java - 为什么接口的静态方法只能通过 Interface.method() 访问 为什么不能通过实现的类实例
- python - Python:在列表中搜索给出 TypeError
- mysql - MySQL 条件组_Concat
- angular - Angular `12.1.2 错误 NG8003:没有找到 exportAs 'ngForm' 的指令
- express - 远程用户音频和视频未在 Peerjs WebRTC 中显示
- c# - 如何调用异步任务
服务中的方法? - angular - 无法渲染某些 NG-ZORRO 图标
- html - 如何剪辑图像及其“工具提示”?