Método ID3D12GraphicsCommandList::RSSetScissorRects (d3d12.h)
Associa uma matriz de retângulos de tesoura ao estágio do rasterizador.
Sintaxe
void RSSetScissorRects(
[in] UINT NumRects,
[in] const D3D12_RECT *pRects
);
Parâmetros
[in] NumRects
Tipo: UINT
O número de retângulos de tesoura a serem associados.
[in] pRects
Tipo: const D3D12_RECT*
Uma matriz de retângulos de tesoura.
Retornar valor
Nenhum
Comentários
Todos os retângulos de tesoura devem ser definidos atomicamente como uma operação. Todos os retângulos de tesoura não definidos pela chamada são desabilitados.
Qual retângulo de tesoura usar é determinado pela SV_ViewportArrayIndex
saída semântica por um sombreador geometry (consulte sintaxe semântica do sombreador). Se um sombreador de geometria não usar a semântica, o SV_ViewportArrayIndex
Direct3D usará o primeiro retângulo de tesoura na matriz.
Cada retângulo de tesoura na matriz corresponde a um visor em uma matriz de visores (consulte RSSetViewports).
Exemplos
O exemplo D3D12HelloTriangle usa ID3D12GraphicsCommandList::RSSetScissorRects da seguinte maneira:
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;
// 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());
Consulte Código de exemplo na referência D3D12.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | d3d12.h |
Biblioteca | D3d12.lib |
DLL | D3d12.dll |