我在使用全屏模式設置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