Microsoft のサンプル例で次のことがわかりました。
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 は非同期関数呼び出しであるため、コードの実行が継続され、Present 関数にヒットすることを意味します。
Present call の後はどうなりますか? たとえば、GPU がまだ描画中であり、動作しており、present が呼び出されているとします。Present は同期呼び出しですか? GPU がまだ描画中の場合、バッファを表示できません。あれは正しいですか ?誰かがここで何が起こっているのか説明できますか?