Freigeben über


ID3D12GraphicsCommandList::D rawIndexedInstanced-Methode (d3d12.h)

Zeichnet indizierte, instanzierte Grundtypen.

Syntax

void DrawIndexedInstanced(
  [in] UINT IndexCountPerInstance,
  [in] UINT InstanceCount,
  [in] UINT StartIndexLocation,
  [in] INT  BaseVertexLocation,
  [in] UINT StartInstanceLocation
);

Parameter

[in] IndexCountPerInstance

Typ: UINT

Anzahl der aus dem Indexpuffer gelesenen Indizes für jeden instance.

[in] InstanceCount

Typ: UINT

Anzahl der zu zeichnenden Instanzen.

[in] StartIndexLocation

Typ: UINT

Die Position des ersten Indexes, der von der GPU aus dem Indexpuffer gelesen wird.

[in] BaseVertexLocation

Typ: INT

Ein Wert, der jedem Index hinzugefügt wird, bevor ein Scheitelpunkt aus dem Vertexpuffer gelesen wird.

[in] StartInstanceLocation

Typ: UINT

Ein Wert, der jedem Index hinzugefügt wird, bevor instance Daten aus einem Vertexpuffer gelesen werden.

Rückgabewert

Keine

Bemerkungen

Eine Zeichnungs-API übermittelt Arbeit an die Renderingpipeline.

Durch das Durchstellen kann die Leistung verbessert werden, indem dieselbe Geometrie wiederverwendet wird, um mehrere Objekte in einer Szene zu zeichnen. Ein Beispiel für die Instanziierung könnte das Zeichnen desselben Objekts mit unterschiedlichen Positionen und Farben sein. Für die Instanziierung sind mehrere Vertexpuffer erforderlich: mindestens einen für Die Daten pro Vertex und ein zweiter Puffer für instance Daten.

Beispiele

Im D3D12Bundles-Beispiel wird ID3D12GraphicsCommandList::D rawIndexedInstanced wie folgt verwendet:

void FrameResource::PopulateCommandList(ID3D12GraphicsCommandList* pCommandList, ID3D12PipelineState* pPso1, ID3D12PipelineState* pPso2,
    UINT frameResourceIndex, UINT numIndices, D3D12_INDEX_BUFFER_VIEW* pIndexBufferViewDesc, D3D12_VERTEX_BUFFER_VIEW* pVertexBufferViewDesc,
    ID3D12DescriptorHeap* pCbvSrvDescriptorHeap, UINT cbvSrvDescriptorSize, ID3D12DescriptorHeap* pSamplerDescriptorHeap, ID3D12RootSignature* pRootSignature)
{
    // If the root signature matches the root signature of the caller, then
    // bindings are inherited, otherwise the bind space is reset.
    pCommandList->SetGraphicsRootSignature(pRootSignature);

    ID3D12DescriptorHeap* ppHeaps[] = { pCbvSrvDescriptorHeap, pSamplerDescriptorHeap };
    pCommandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps);
    pCommandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

    pCommandList->IASetIndexBuffer(pIndexBufferViewDesc);

    pCommandList->IASetVertexBuffers(0, 1, pVertexBufferViewDesc);

    pCommandList->SetGraphicsRootDescriptorTable(0, pCbvSrvDescriptorHeap->GetGPUDescriptorHandleForHeapStart());
    pCommandList->SetGraphicsRootDescriptorTable(1, pSamplerDescriptorHeap->GetGPUDescriptorHandleForHeapStart());

    // Calculate the descriptor offset due to multiple frame resources.
    // 1 SRV + how many CBVs we have currently.
    UINT frameResourceDescriptorOffset = 1 + (frameResourceIndex * m_cityRowCount * m_cityColumnCount);
    CD3DX12_GPU_DESCRIPTOR_HANDLE cbvSrvHandle(pCbvSrvDescriptorHeap->GetGPUDescriptorHandleForHeapStart(), frameResourceDescriptorOffset, cbvSrvDescriptorSize);

    BOOL usePso1 = TRUE;
    for (UINT i = 0; i < m_cityRowCount; i++)
    {
        for (UINT j = 0; j < m_cityColumnCount; j++)
        {
            // Alternate which PSO to use; the pixel shader is different on 
            // each just as a PSO setting demonstration.
            pCommandList->SetPipelineState(usePso1 ? pPso1 : pPso2);
            usePso1 = !usePso1;

            // Set this city's CBV table and move to the next descriptor.
            pCommandList->SetGraphicsRootDescriptorTable(2, cbvSrvHandle);
            cbvSrvHandle.Offset(cbvSrvDescriptorSize);

            pCommandList->DrawIndexedInstanced(numIndices, 1, 0, 0, 0);
        }
    }
}

Weitere Informationen finden Sie unter Beispielcode in der D3D12-Referenz.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d12.h
Bibliothek D3d12.lib
DLL D3d12.dll

Weitere Informationen

ID3D12GraphicsCommandList