diff options
Diffstat (limited to 'core/src/Entrypoint/Backend_DirectX12.cpp')
-rw-r--r-- | core/src/Entrypoint/Backend_DirectX12.cpp | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/core/src/Entrypoint/Backend_DirectX12.cpp b/core/src/Entrypoint/Backend_DirectX12.cpp index c0492c2..fd4a531 100644 --- a/core/src/Entrypoint/Backend_DirectX12.cpp +++ b/core/src/Entrypoint/Backend_DirectX12.cpp @@ -15,9 +15,11 @@ constexpr int kNumBackBuffers = 3; // Forward declare message handler from imgui_impl_win32.cpp extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); -class DirectX12Backend : public RenderingBackend { +class DirectX12Backend : public RenderingBackend +{ private: - struct FrameContext { + struct FrameContext + { ID3D12CommandAllocator* CommandAllocator; UINT64 FenceValue; }; @@ -42,7 +44,8 @@ private: D3D12_CPU_DESCRIPTOR_HANDLE mMainRenderTargetDescriptor[kNumBackBuffers] = {}; public: - DirectX12Backend() { + DirectX12Backend() + { ImGui_ImplWin32_EnableDpiAwareness(); wc.cbSize = sizeof(WNDCLASSEX); @@ -88,7 +91,8 @@ public: ImGui_ImplDX12_Init(mD3dDevice, kNumFramesInFlight, DXGI_FORMAT_R8G8B8A8_UNORM, mD3dSrvDescHeap, mD3dSrvDescHeap->GetCPUDescriptorHandleForHeapStart(), mD3dSrvDescHeap->GetGPUDescriptorHandleForHeapStart()); } - virtual ~DirectX12Backend() { + virtual ~DirectX12Backend() + { WaitForLastSubmittedFrame(); // Cleanup @@ -101,7 +105,8 @@ public: ::UnregisterClass(wc.lpszClassName, wc.hInstance); } - virtual void RunUntilWindowClose(void (*windowContent)()) { + virtual void RunUntilWindowClose(void (*windowContent)()) + { while (true) { MSG msg; bool done = false; @@ -161,7 +166,8 @@ public: } private: - bool CreateDeviceD3D() { + bool CreateDeviceD3D() + { // Setup swap chain DXGI_SWAP_CHAIN_DESC1 sd; { @@ -260,7 +266,8 @@ private: return true; } - void CleanupDeviceD3D() { + void CleanupDeviceD3D() + { CleanupRenderTarget(); if (mSwapChain) { mSwapChain->Release(); @@ -304,7 +311,8 @@ private: } } - void CreateRenderTarget() { + void CreateRenderTarget() + { for (UINT i = 0; i < kNumBackBuffers; i++) { ID3D12Resource* pBackBuffer = nullptr; @@ -314,7 +322,8 @@ private: } } - void CleanupRenderTarget() { + void CleanupRenderTarget() + { WaitForLastSubmittedFrame(); for (UINT i = 0; i < kNumBackBuffers; i++) @@ -324,7 +333,8 @@ private: } } - void WaitForLastSubmittedFrame() { + void WaitForLastSubmittedFrame() + { FrameContext* frameCtx = &mFrameContext[mFrameIndex % kNumFramesInFlight]; UINT64 fenceValue = frameCtx->FenceValue; @@ -339,7 +349,8 @@ private: WaitForSingleObject(mFenceEvent, INFINITE); } - FrameContext* WaitForNextFrameResources() { + FrameContext* WaitForNextFrameResources() + { UINT nextFrameIndex = mFrameIndex + 1; mFrameIndex = nextFrameIndex; @@ -361,7 +372,8 @@ private: return frameCtx; } - void ResizeSwapChain(int width, int height) { + void ResizeSwapChain(int width, int height) + { DXGI_SWAP_CHAIN_DESC1 sd; mSwapChain->GetDesc1(&sd); sd.Width = width; @@ -385,7 +397,8 @@ private: assert(mSwapChainWaitableObject != nullptr); } - static LRESULT CALLBACK StaticWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + static LRESULT CALLBACK StaticWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) + { DirectX12Backend* self; if (uMsg == WM_NCCREATE) { auto lpcs = reinterpret_cast<LPCREATESTRUCT>(lParam); @@ -403,7 +416,8 @@ private: } } - LRESULT WndProc(UINT msg, WPARAM wParam, LPARAM lParam) { + LRESULT WndProc(UINT msg, WPARAM wParam, LPARAM lParam) + { if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam)) { return true; } @@ -437,7 +451,8 @@ private: } }; -std::unique_ptr<RenderingBackend> RenderingBackend::CreateDx12Backend() { +std::unique_ptr<RenderingBackend> RenderingBackend::CreateDx12Backend() +{ try { return std::make_unique<DirectX12Backend>(); } catch (std::exception& e) { @@ -447,7 +462,8 @@ std::unique_ptr<RenderingBackend> RenderingBackend::CreateDx12Backend() { #else // ^^ BUILD_CORE_WITH_DX12_BACKEND | BUILD_CORE_WITH_DX12_BACKEND vv -std::unique_ptr<RenderingBackend> RenderingBackend::CreateDx12Backend() { +std::unique_ptr<RenderingBackend> RenderingBackend::CreateDx12Backend() +{ return nullptr; } |