Replace swap chain back buffers with D3D12Texture wrapper
This commit is contained in:
@@ -59,7 +59,7 @@ XCEngine::RHI::D3D12CommandQueue gCommandQueue;
|
||||
XCEngine::RHI::D3D12SwapChain gSwapChain;
|
||||
|
||||
// 渲染目标 (SwapChain的后台Buffer)
|
||||
ID3D12Resource* gColorRTs[2]; // 颜色缓冲 (双缓冲)
|
||||
XCEngine::RHI::D3D12Texture gColorRTs[2]; // 颜色缓冲 (双缓冲)
|
||||
int gCurrentRTIndex = 0;
|
||||
|
||||
// 描述符堆
|
||||
@@ -438,10 +438,10 @@ bool InitD3D12(HWND inHWND, int inWidth, int inHeight) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
ID3D12Resource* buffer = nullptr;
|
||||
gSwapChain.GetSwapChain()->GetBuffer(i, IID_PPV_ARGS(&buffer));
|
||||
gColorRTs[i] = buffer;
|
||||
gColorRTs[i].InitializeFromExisting(buffer);
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE rtvPointer;
|
||||
rtvPointer.ptr = rtvHeapStart.ptr + i * gRTVDescriptorSize;
|
||||
gSwapChainRTVs[i].InitializeAt(device, gColorRTs[i], rtvPointer, nullptr);
|
||||
gSwapChainRTVs[i].InitializeAt(device, gColorRTs[i].GetResource(), rtvPointer, nullptr);
|
||||
}
|
||||
D3D12_DEPTH_STENCIL_VIEW_DESC d3dDSViewDesc = {};
|
||||
d3dDSViewDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
|
||||
@@ -493,7 +493,7 @@ void EndCommandList() {
|
||||
//=================================================================================
|
||||
void BeginRenderToSwapChain(ID3D12GraphicsCommandList* inCommandList) {
|
||||
gCurrentRTIndex = gSwapChain.GetCurrentBackBufferIndex();
|
||||
D3D12_RESOURCE_BARRIER barrier = InitResourceBarrier(gColorRTs[gCurrentRTIndex], D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET);
|
||||
D3D12_RESOURCE_BARRIER barrier = InitResourceBarrier(gColorRTs[gCurrentRTIndex].GetResource(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET);
|
||||
inCommandList->ResourceBarrier(1, &barrier);
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE colorRT, dsv;
|
||||
dsv.ptr = gSwapChainDSVHeap.GetCPUDescriptorHandleForHeapStart().ptr;
|
||||
@@ -513,7 +513,7 @@ void BeginRenderToSwapChain(ID3D12GraphicsCommandList* inCommandList) {
|
||||
// 状态转换: RENDER_TARGET → PRESENT
|
||||
//=================================================================================
|
||||
void EndRenderToSwapChain(ID3D12GraphicsCommandList* inCommandList) {
|
||||
D3D12_RESOURCE_BARRIER barrier = InitResourceBarrier(gColorRTs[gCurrentRTIndex], D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT);
|
||||
D3D12_RESOURCE_BARRIER barrier = InitResourceBarrier(gColorRTs[gCurrentRTIndex].GetResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT);
|
||||
inCommandList->ResourceBarrier(1, &barrier);
|
||||
}
|
||||
|
||||
@@ -526,7 +526,7 @@ bool SaveScreenshot(const char* filename, int width, int height) {
|
||||
|
||||
ID3D12Device* device = gDevice.GetDevice();
|
||||
ID3D12CommandQueue* queue = gCommandQueue.GetCommandQueue();
|
||||
ID3D12Resource* renderTarget = gColorRTs[gCurrentRTIndex];
|
||||
ID3D12Resource* renderTarget = gColorRTs[gCurrentRTIndex].GetResource();
|
||||
|
||||
Log("[DEBUG] SaveScreenshot: calling D3D12Screenshot::Capture\n");
|
||||
bool result = XCEngine::RHI::D3D12Screenshot::Capture(
|
||||
|
||||
Reference in New Issue
Block a user