我在使用全屏模式设置DirectX10(Win32/C++)应用程序时遇到了一些问题。问题是我想从一开始就让我的应用全屏运行。这可以通过使用DXGISwapChain :: SetFullScreenState函数来完成。这工作,但我得到我的VISUALC++ 2008调试一个小提示,其中规定:D3D10(DirectX10)全屏显示性能问题
“DXGI警告:IDXGISwapChain ::现在:由此而发生的应用程序全屏演示低效不恰当地使用IDXGISwapChain :: ResizeBuffers,指定DXGI_MODE_DESC不在IDXGIOutput :: GetDisplayModeList中可用,或者不使用DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH。“
这意味着DirectX将不会完全拥有图形卡并将图像从前端翻转到后端缓冲区,而是将它们的速度慢一些。
现在,我确实启用了DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH,并且尝试调整缓冲区大小,但我完全不知道什么才是进入全屏模式的最佳方式。我曾在MSDN上看过,但他们大多假设你只能通过按Alt + Enter进入全屏,以免DXGI完成所有工作。如果有人请发布一些将DirectX10转换为全屏模式并充分利用“翻转”的代码,它将会非常受欢迎!
对于任何人有兴趣在调整大小使用的代码:
ReleaseCOM(m_pD3DRenderTargetView);
ReleaseCOM(m_pD3DDepthStencilView);
ReleaseCOM(m_pD3DDepthStencilBuffer);
DXGI_MODE_DESC* mod = new DXGI_MODE_DESC;
mod->Format = DXGI_FORMAT_R8G8B8A8_UNORM;
mod->Height = m_ScreenHeight;
mod->Width = m_ScreenWidth;
mod->RefreshRate.Denominator = 0;
mod->RefreshRate.Numerator = 0;
mod->ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
mod->Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
delete mod; mod = 0;
m_pSwapChain->ResizeTarget(mod);
HR(m_pSwapChain->ResizeBuffers(1, m_ScreenWidth, m_ScreenHeight, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH))
throw(Exception(GET_BUFFER_FAIL, AT));
//problem area
m_pSwapChain->SetFullscreenState(TRUE, NULL);
ID3D10Texture2D* pBackBuffer;
HR(m_pSwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*)&pBackBuffer))
throw(Exception(GET_BUFFER_FAIL, AT)); //continues as usual
你做第二部分? “指定DXGI_MODE_DESC在IDXGIOutput :: GetDisplayModeList中不可用” – Ricket 2009-06-17 16:57:54