Поделиться через


Практическое руководство. Запись списка команд

Список команд — это записанный список команд отрисовки. В этом разделе показано, как создать и записать список команд. Используйте список команд для записи команд отрисовки и их последующего воспроизведения. Список команд удобен для разделения задач отрисовки между потоками.

Запись списка команд

  1. Список команд должен быть создан из отложенного контекста, который содержит состояние устройства и действия отрисовки. На устройстве создайте отложенный контекст, вызвав ID3D11Device::CreateDeferredContext.

    HRESULT hr;
    ID3D11DeviceContext* pDeferredContext = NULL;
    
    hr = g_pd3dDevice->CreateDeferredContext(0, &pDeferredContext);
    
  2. Используйте отложенный контекст для отрисовки.

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

    Этот простой пример очищает целевой объект отрисовки, но вы можете добавить дополнительные команды отрисовки.

  3. Создайте или запишите список команд, вызвав ID3D11DeviceContext::FinishCommandList и передав указатель на неинициализированный интерфейс ID3D11CommandList .

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

    При возврате метода создается список команд, содержащий все команды отрисовки, и в приложение возвращается интерфейс.

    Логический параметр сообщает среде выполнения, что делать с состоянием конвейера в отложенном контексте. Значение TRUE означает восстановление состояния контекста устройства до состояния списка предкоманд после завершения записи. Значение FALSE означает, что состояние не изменяется после записи. Это означает, что контекст устройства будет отражать изменения состояния, содержащиеся в списке команд.

Пример воспроизведения списка команд см. в разделе Практическое руководство. Воспроизведение списка команд.

Список команд

Использование Direct3D 11