From 80a11d1836b2f296b775fb92f03c3cc7a990f640 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Sun, 15 Mar 2026 18:26:05 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=B0=86=20tests/D3D12=20=E7=9A=84?= =?UTF-8?q?=20SwapChain=20=E6=9B=BF=E6=8D=A2=E4=B8=BA=20D3D12SwapChain?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gSwapChain 替换为 D3D12SwapChain - 使用 Initialize 方法替代原生 CreateSwapChain - 使用 Present、GetCurrentBackBufferIndex 等 wrapper 方法 - 测试通过 --- tests/D3D12/main.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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); } //=================================================================================