refactor: 将 tests/D3D12 的 SwapChain 替换为 D3D12SwapChain
- gSwapChain 替换为 D3D12SwapChain - 使用 Initialize 方法替代原生 CreateSwapChain - 使用 Present、GetCurrentBackBufferIndex 等 wrapper 方法 - 测试通过
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
|
||||
Reference in New Issue
Block a user