refactor: 将 tests/D3D12 的 SwapChain 替换为 D3D12SwapChain

- gSwapChain 替换为 D3D12SwapChain
- 使用 Initialize 方法替代原生 CreateSwapChain
- 使用 Present、GetCurrentBackBufferIndex 等 wrapper 方法
- 测试通过
This commit is contained in:
2026-03-15 18:26:05 +08:00
parent f187aa3b37
commit 80a11d1836

View File

@@ -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<IDXGISwapChain3*>(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);
}
//=================================================================================