У меня возникла небольшая проблема при настройке приложения DirectX10 (Win32 / c ++) для полноэкранного режима. Проблема в том, что я хочу, чтобы мое приложение работало в полноэкранном режиме с самого начала. Это можно сделать, взяв функцию DXGISwapChain :: SetFullScreenState. Это работает, но я получаю небольшое уведомление в моем отладчике Visualc ++ 2008, в котором говорится:
"DXGI Предупреждение: IDXGISwapChain ::. Присутствуют: Fullscreen неэффективностью презентационные понесены в связи с применением не используя 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