aboutsummaryrefslogtreecommitdiff
path: root/core/src/Entrypoint/Backend_DirectX12.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Entrypoint/Backend_DirectX12.cpp')
-rw-r--r--core/src/Entrypoint/Backend_DirectX12.cpp48
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;
}