• Download programs from : https://github.com/Microsoft/DirectX-Graphics-Samples
• DirectX-Graphics-Samples-master\Samples\Desktop\D3D12HelloWorld\src\HelloFrameBuffersThere is D3D12Fullscreen desktop project but it is little bit complicated so I modified D3D12FrameBuffering desktop project to enable Fullscreen capability.
D3D12FrameBuffering Project setting
Right click D3D12FrameBuffering Project top open D3D12HelloFrameBuffering property pages.Select configuration to "All configurations"
On Configuration Options > Manifest Tool > All options, set DPI Awareness to Per Monitor High DPI Aware.
Win32Application class
Copy WM_SIZE handler from D3D12Fullscreen Win32Application to WindowProc()
DXSample class
Add OnSizeChanged() pure virtual function declaration to DXSample class
virtual void OnSizeChanged(UINT width, UINT height, bool minimized) = 0;
Copy SetWindowBounds() from D3D12Fullscreen DXSample.
Add RECT m_windowBounds; member.
D3D12HelloFrameBuffering class
Comment out following line to enable ALT+Enter
factory->MakeWindowAssociation(Win32Application::GetHwnd(), DXGI_MWA_NO_ALT_ENTER)
Add bool m_windowedMode variable to D3D12HelloFrameBuffering class.
Copy those functions from D3D12Fullscreen to D3D12HelloFrameBuffer
void LoadSizeDependentResources();
void UpdatePostViewAndScissor();
void LoadSceneResolutionDependentResources();
virtual void OnSizeChanged(UINT width, UINT height, bool minimized);
PopulateCommandList() is unchanged.
This is my UpdatePostViewAndScissor() implementation:
void D3D12HelloFrameBuffering::UpdatePostViewAndScissor()
{
float x = 1.0f;
float y = 1.0f;
m_viewport.TopLeftX = m_width * (1.0f - x) / 2.0f;
m_viewport.TopLeftY = m_height * (1.0f - y) / 2.0f;
m_viewport.Width = x * m_width;
m_viewport.Height = y * m_height;
m_scissorRect.left = static_cast<LONG>(m_viewport.TopLeftX);
m_scissorRect.right = static_cast<LONG>(m_viewport.TopLeftX + m_viewport.Width);
m_scissorRect.top = static_cast<LONG>(m_viewport.TopLeftY);
m_scissorRect.bottom = static_cast<LONG>(m_viewport.TopLeftY + m_viewport.Height);
}
m_resolutionOptions[], m_postViewport, m_postScissorRect, m_postCommandList and LoadSceneResolutionDependentResources() is not absolute necessary
Call LoadSizeDependentResources() on the last portion of LoadAssets()
Run and press ALT+Enter to switch fullscreen
Screen shot of D3D12HelloFrameBuffering, 3840x2160 fullscreen mode
No comments:
Post a Comment