2

我在 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 函数。

当前通话后会发生什么?比方说,GPU 仍在绘图,工作和存在被调用。现在是同步呼叫吗?当 gpu 仍在绘制时,它不能显示缓冲区。那是对的吗 ?有人可以解释这里发生了什么吗?

4

1 回答 1

2

Present 也是一个异步命令,它告诉 GPU 从交换链中的下一个缓冲区开始扫描(显示)。在“翻转”发生之前,您不必担心 GPU 尚未完成所有先前发布的工作(在图形命令队列上)。

于 2015-10-29T22:24:46.253 回答