ID3D12GraphicsCommandList::ClearRenderTargetView-Methode (d3d12.h)
Legt alle Elemente in einem Renderziel auf einen Wert fest.
Syntax
void ClearRenderTargetView(
[in] D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
[in] const FLOAT [4] ColorRGBA,
[in] UINT NumRects,
[in] const D3D12_RECT *pRects
);
Parameter
[in] RenderTargetView
Typ: D3D12_CPU_DESCRIPTOR_HANDLE
Gibt eine D3D12_CPU_DESCRIPTOR_HANDLE-Struktur an, die das CPU-Deskriptorhandle beschreibt, das den Start des Heaps für das zu löschende Renderziel darstellt.
[in] ColorRGBA
Typ: const FLOAT[4]
Ein 4-Komponenten-Array, das die Farbe darstellt, mit der das Renderziel gefüllt werden soll.
[in] NumRects
Typ: UINT
Die Anzahl der Rechtecke im Array, die der pRects-Parameter angibt.
[in] pRects
Typ: const D3D12_RECT*
Ein Array von D3D12_RECT Strukturen für die Rechtecke in der Ressourcenansicht zu löschen. Bei NULL löscht ClearRenderTargetView die gesamte Ressourcenansicht.
Rückgabewert
Keine
Bemerkungen
ClearRenderTargetView kann verwendet werden, um Ressourcen zu initialisieren, die denselben Heapspeicher alias. Weitere Informationen finden Sie unter CreatePlacedResource .
Laufzeitüberprüfung
Bei Gleitkommaeingaben legt die Runtime denormalisierte Werte auf 0 fest (unter Beibehaltung von NANs).Ein Überprüfungsfehler führt dazu, dass der Aufruf von CloseE_INVALIDARG zurückgibt.
Debugebene
Die Debugebene gibt Fehler aus, wenn die Eingabefarben denormalisiert sind.Die Debugebene gibt einen Fehler aus, wenn sich die von der Ansicht referenzierten Unterressourcen nicht im entsprechenden Zustand befinden. Für ClearRenderTargetView muss der Zustand D3D12_RESOURCE_STATE_RENDER_TARGET sein.
Beispiele
Das D3D12HelloTriangle-Beispiel verwendet ID3D12GraphicsCommandList::ClearRenderTargetView wie folgt:
D3D12_VIEWPORT m_viewport;
D3D12_RECT m_scissorRect;
ComPtr<IDXGISwapChain3> m_swapChain;
ComPtr<ID3D12Device> m_device;
ComPtr<ID3D12Resource> m_renderTargets[FrameCount];
ComPtr<ID3D12CommandAllocator> m_commandAllocator;
ComPtr<ID3D12CommandQueue> m_commandQueue;
ComPtr<ID3D12RootSignature> m_rootSignature;
ComPtr<ID3D12DescriptorHeap> m_rtvHeap;
ComPtr<ID3D12PipelineState> m_pipelineState;
ComPtr<ID3D12GraphicsCommandList> m_commandList;
UINT m_rtvDescriptorSize;
void D3D12HelloTriangle::PopulateCommandList()
{
// Command list allocators can only be reset when the associated
// command lists have finished execution on the GPU; apps should use
// fences to determine GPU execution progress.
ThrowIfFailed(m_commandAllocator->Reset());
// However, when ExecuteCommandList() is called on a particular command
// list, that command list can then be reset at any time and must be before
// re-recording.
ThrowIfFailed(m_commandList->Reset(m_commandAllocator.Get(), m_pipelineState.Get()));
// Set necessary state.
m_commandList->SetGraphicsRootSignature(m_rootSignature.Get());
m_commandList->RSSetViewports(1, &m_viewport);
m_commandList->RSSetScissorRects(1, &m_scissorRect);
// Indicate that the back buffer will be used as a render target.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
m_commandList->OMSetRenderTargets(1, &rtvHandle, FALSE, nullptr);
// Record commands.
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);
m_commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
m_commandList->IASetVertexBuffers(0, 1, &m_vertexBufferView);
m_commandList->DrawInstanced(3, 1, 0, 0);
// Indicate that the back buffer will now be used to present.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));
ThrowIfFailed(m_commandList->Close());
}
Das D3D12Multithreading-Beispiel verwendet ID3D12GraphicsCommandList::ClearRenderTargetView wie folgt:
// Frame resources.
FrameResource* m_frameResources[FrameCount];
FrameResource* m_pCurrentFrameResource;
int m_currentFrameResourceIndex;
// Assemble the CommandListPre command list.
void D3D12Multithreading::BeginFrame()
{
m_pCurrentFrameResource->Init();
// Indicate that the back buffer will be used as a render target.
m_pCurrentFrameResource->m_commandLists[CommandListPre]->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
// Clear the render target and depth stencil.
const float clearColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
m_pCurrentFrameResource->m_commandLists[CommandListPre]->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);
m_pCurrentFrameResource->m_commandLists[CommandListPre]->ClearDepthStencilView(m_dsvHeap->GetCPUDescriptorHandleForHeapStart(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr);
ThrowIfFailed(m_pCurrentFrameResource->m_commandLists[CommandListPre]->Close());
}
// Assemble the CommandListMid command list.
void D3D12Multithreading::MidFrame()
{
// Transition our shadow map from the shadow pass to readable in the scene pass.
m_pCurrentFrameResource->SwapBarriers();
ThrowIfFailed(m_pCurrentFrameResource->m_commandLists[CommandListMid]->Close());
}
Siehe Beispielcode in der D3D12-Referenz.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | d3d12.h |
Bibliothek | D3d12.lib |
DLL | D3d12.dll |