Partager via


ID3D12GraphicsCommandList ::RSSetScissorRects, méthode (d3d12.h)

Lie un tableau de rectangles en ciseaux à l’étape de rastériseur.

Syntaxe

void RSSetScissorRects(
  [in] UINT             NumRects,
  [in] const D3D12_RECT *pRects
);

Paramètres

[in] NumRects

Type : UINT

Nombre de rectangles en ciseaux à lier.

[in] pRects

Type : const D3D12_RECT*

Tableau de rectangles en ciseaux.

Valeur de retour

None

Remarques

Tous les rectangles en ciseaux doivent être définis atomiquement comme une seule opération. Tous les rectangles en ciseaux non définis par l’appel sont désactivés.

Le rectangle à ciseaux à utiliser est déterminé par la SV_ViewportArrayIndex sortie sémantique d’un nuanceur de géométrie (voir la syntaxe sémantique du nuanceur). Si un nuanceur de géométrie n’utilise pas la SV_ViewportArrayIndex sémantique, Direct3D utilise le premier rectangle de ciseaux dans le tableau.

Chaque rectangle en ciseaux dans le tableau correspond à une fenêtre d’affichage dans un tableau de fenêtres d’affichage (voir RSSetViewports).

Exemples

L’exemple D3D12HelloTriangle utilise ID3D12GraphicsCommandList ::RSSetScissorRects comme suit :

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());

Consultez l’exemple de code dans la référence D3D12.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête d3d12.h
Bibliothèque D3d12.lib
DLL D3d12.dll

Voir aussi

ID3D12GraphicsCommandList