METODE ID3D12GraphicsCommandList::RSSetViewports (d3d12.h)

Ikat array viewports ke tahap rasterizer alur.

Sintaks

void RSSetViewports(
  [in] UINT                 NumViewports,
  [in] const D3D12_VIEWPORT *pViewports
);

Parameter

[in] NumViewports

Jenis: UINT

Jumlah viewport yang akan diikat. Rentang nilai yang valid adalah (0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE).

[in] pViewports

Jenis: const D3D12_VIEWPORT*

Array struktur D3D12_VIEWPORT untuk mengikat perangkat.

Mengembalikan nilai

Tidak ada

Keterangan

Semua viewport harus diatur secara atomik sebagai satu operasi. Viewport apa pun yang tidak ditentukan oleh panggilan dinonaktifkan.

Viewport mana yang akan digunakan ditentukan oleh output semantik SV_ViewportArrayIndex oleh shader geometri; jika shader geometri tidak menentukan semantik, Direct3D akan menggunakan viewport pertama dalam array.

Contoh

Sampel D3D12HelloTriangle menggunakan ID3D12GraphicsCommandList::RSSetViewports sebagai berikut:

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

Lihat Contoh Kode di Referensi D3D12.

Persyaratan

   
Target Platform Windows
Header d3d12.h
Pustaka D3d12.lib
DLL D3d12.dll

Lihat juga

ID3D12GraphicsCommandList