2015-10-29 5 views
0

я обнаружил, что в примере образца Microsoft:DirectX12 - ExecuteCommandLists и Present функция

void D3D12HelloTriangle::OnRender() 
{ 
// Record all the commands we need to render the scene into the command list. 
PopulateCommandList(); 

// Execute the command list. 
ID3D12CommandList* ppCommandLists[] = { m_commandList.Get() }; 
m_commandQueue->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists); 

// Present the frame. 
ThrowIfFailed(m_swapChain->Present(1, 0)); 

WaitForPreviousFrame(); 
} 

Как на самом деле работает? ExecuteCommandLists - это вызов асинхронной функции, поэтому это означает, что выполнение кода будет продолжаться, и оно отображает текущую функцию.

Что произойдет после настоящего вызова? Скажем, графический процессор все еще рисует, работает и присутствует. Есть ли синхронный вызов? Он не может представлять буфер, когда gpu все еще рисует. Это верно ? Может ли кто-нибудь объяснить, что здесь происходит?

ответ

1

Present - это также асинхронная команда, которая сообщает графическому процессору, что он начинает сканирование (отображение) из следующего буфера в цепочке подкачки. Вам не нужно беспокоиться о том, что GPU не закончил выполнение всех ранее выпущенных работ (в очереди графических команд) до того, как произойдет «Flip».

Смежные вопросы