diff --git a/tests/D3D12/main.cpp b/tests/D3D12/main.cpp index 6821bca5..a643d87b 100644 --- a/tests/D3D12/main.cpp +++ b/tests/D3D12/main.cpp @@ -20,6 +20,7 @@ #include "XCEngine/RHI/D3D12/D3D12CommandList.h" #include "XCEngine/RHI/D3D12/D3D12DescriptorHeap.h" #include "XCEngine/RHI/D3D12/D3D12Fence.h" +#include "XCEngine/RHI/D3D12/D3D12SwapChain.h" #include "XCEngine/RHI/D3D12/D3D12Screenshot.h" #include "XCEngine/Debug/Logger.h" #include "XCEngine/Debug/ConsoleLogSink.h" @@ -48,7 +49,7 @@ void Log(const char* format, ...) { //================================================================================= XCEngine::RHI::D3D12Device gDevice; XCEngine::RHI::D3D12CommandQueue gCommandQueue; -IDXGISwapChain3* gSwapChain = nullptr; +XCEngine::RHI::D3D12SwapChain gSwapChain; // 渲染目标 (SwapChain的后台Buffer) ID3D12Resource* gDSRT = nullptr; // 深度模板缓冲 @@ -605,7 +606,7 @@ bool InitD3D12(HWND inHWND, int inWidth, int inHeight) { IDXGISwapChain* swapChain = nullptr; dxgiFactory->CreateSwapChain(gCommandQueue.GetCommandQueue(), &swapChainDesc, &swapChain); - gSwapChain = static_cast(swapChain); + gSwapChain.Initialize(dxgiFactory, gCommandQueue.GetCommandQueue(), inHWND, inWidth, inHeight, 2); D3D12_HEAP_PROPERTIES d3dHeapProperties = {}; d3dHeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT; @@ -650,7 +651,9 @@ bool InitD3D12(HWND inHWND, int inWidth, int inHeight) { D3D12_CPU_DESCRIPTOR_HANDLE rtvHeapStart = gSwapChainRTVHeap.GetCPUDescriptorHandleForHeapStart(); for (int i = 0; i < 2; i++) { - gSwapChain->GetBuffer(i, IID_PPV_ARGS(&gColorRTs[i])); + ID3D12Resource* buffer = nullptr; + gSwapChain.GetSwapChain()->GetBuffer(i, IID_PPV_ARGS(&buffer)); + gColorRTs[i] = buffer; D3D12_CPU_DESCRIPTOR_HANDLE rtvPointer; rtvPointer.ptr = rtvHeapStart.ptr + i * gRTVDescriptorSize; device->CreateRenderTargetView(gColorRTs[i], nullptr, rtvPointer); @@ -712,7 +715,7 @@ void EndCommandList() { // 5. Clear Color/Depth //================================================================================= void BeginRenderToSwapChain(ID3D12GraphicsCommandList* inCommandList) { - gCurrentRTIndex = gSwapChain->GetCurrentBackBufferIndex(); + gCurrentRTIndex = gSwapChain.GetCurrentBackBufferIndex(); D3D12_RESOURCE_BARRIER barrier = InitResourceBarrier(gColorRTs[gCurrentRTIndex], D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET); inCommandList->ResourceBarrier(1, &barrier); D3D12_CPU_DESCRIPTOR_HANDLE colorRT, dsv; @@ -741,7 +744,7 @@ void EndRenderToSwapChain(ID3D12GraphicsCommandList* inCommandList) { // 交换缓冲区 (显示渲染结果) //================================================================================= void SwapD3D12Buffers() { - gSwapChain->Present(0, 0); + gSwapChain.Present(0, 0); } //=================================================================================