Vorgehensweise: Aufzeichnen einer Befehlsliste

Eine Befehlsliste ist eine aufgezeichnete Liste von Renderingbefehlen. In diesem Thema wird gezeigt, wie Sie eine Befehlsliste erstellen und aufzeichnen. Verwenden Sie eine Befehlsliste, um Renderbefehle aufzuzeichnen und später wiederzugeben. Eine Befehlsliste eignet sich zum Aufteilen von Renderingtasks zwischen Threads.

So zeichnen Sie eine Befehlsliste auf

  1. Eine Befehlsliste muss aus einem verzögerten Kontext erstellt werden, der Gerätezustands- und Renderingaktionen enthält. Erstellen Sie bei einem Gerät einen verzögerten Kontext, indem Sie ID3D11Device::CreateDeferredContext aufrufen.

    HRESULT hr;
    ID3D11DeviceContext* pDeferredContext = NULL;
    
    hr = g_pd3dDevice->CreateDeferredContext(0, &pDeferredContext);
    
  2. Verwenden Sie den verzögerten Kontext zum Rendern.

    float ClearColor[4] = { 0.0f, 0.125f, 0.3f, 1.0f };
    pDeferredContext->ClearRenderTargetView( g_pRenderTargetView, ClearColor );
    
    // Add additional rendering commands
    ...
    

    In diesem einfachen Beispiel wird ein Renderziel gelöscht, Sie können jedoch zusätzliche Renderbefehle hinzufügen.

  3. Erstellen/aufzeichnen Sie eine Befehlsliste, indem Sie ID3D11DeviceContext::FinishCommandList aufrufen und einen Zeiger auf eine nicht initialisierte ID3D11CommandList-Schnittstelle übergeben.

    ID3D11CommandList* pd3dCommandList = NULL;
    HRESULT hr;
    hr = pDeferredContext->FinishCommandList(FALSE, &pd3dCommandList);
    

    Wenn die Methode zurückgibt, wird eine Befehlsliste erstellt, die alle Renderbefehle enthält, und eine Schnittstelle wird an die Anwendung zurückgegeben.

    Der boolesche Parameter teilt der Runtime mit, was mit dem Pipelinestatus im verzögerten Kontext zu tun ist. TRUE bedeutet, dass der Zustand des Gerätekontexts nach Abschluss der Aufzeichnung nicht geändert wird, wenn die Aufzeichnung abgeschlossen ist. False bedeutet, dass der Zustand nach der Aufzeichnung nicht geändert wird. Dies bedeutet, dass der Gerätekontext die in der Befehlsliste enthaltenen Zustandsänderungen widerspiegelt.

Ein Beispiel für die Wiedergabe einer Befehlsliste finden Sie unter Vorgehensweise: Wiedergeben einer Befehlsliste.

Befehlsliste

Verwenden von Direct3D 11