//---------------------------------------------------------------------------// void RenderContextDX12::ApplyRenderTargets() { if (!myRenderTargetsDirty) return; myRenderTargetsDirty = false; D3D12_CPU_DESCRIPTOR_HANDLE rtDescriptors[Rendering::Constants::kMaxNumRenderTargets]; GpuResource* rtResources[Rendering::Constants::kMaxNumRenderTargets]; uint32 numRtsToSet = 0u; for (uint32 i = 0u; i < Rendering::Constants::kMaxNumRenderTargets; ++i) { Texture* rt = myRenderTargets[i]; if (rt != nullptr) { rtResources[numRtsToSet] = rt; rtDescriptors[numRtsToSet] = rt->GetRtv().myCpuHandle; ++numRtsToSet; } } for (uint32 i = 0u; i < numRtsToSet; ++i) { TransitionResource(rtResources[i], D3D12_RESOURCE_STATE_RENDER_TARGET); } if (myDepthStencilTarget) TransitionResource(myDepthStencilTarget, D3D12_RESOURCE_STATE_DEPTH_WRITE); KickoffResourceBarriers(); if (myDepthStencilTarget) myCommandList->OMSetRenderTargets(numRtsToSet, rtDescriptors, false, &myDepthStencilTarget->GetDsv().myCpuHandle); else myCommandList->OMSetRenderTargets(numRtsToSet, rtDescriptors, false, nullptr); }