我应该如何在GPU上为不同类型的场景对象分配/填充/更新内存?

时间:2016-12-20 05:46:23

标签: directx-12

我正在尝试编写我的第一个DX12应用程序。我以前没有DX11的经验。我想展示一些刚性和一些柔软的物体。现在没有纹理。所以我需要在GPU中放置一些顶点/索引缓冲区,我将永远不会改变这些缓冲区和一些我将改变的缓冲区。场景本身并不是静态的,因此可能会出现一些新的物体,有些可能会消失。

我应该如何为GPU分配/填充/更新内存?我希望看到高级概述易于阅读和理解,而不是真正的代码。希望问题不是太宽泛。

1 个答案:

答案 0 :(得分:1)

你说你是DirectX的新手,我强烈建议你远离DX12并坚持使用DX11。 DX12仅适用于已经是专家(具有大E)的项目,并且项目必须推得很远或者在DX11中无法实现DX12中的功能的边缘情况。

但无论如何,在DX12上,作为初始化缓冲区的示例,您必须创建ID3D12Resource的实例。您将需要两个,一个在上传堆中,另一个在默认堆中。使用Map填充CPU上的第一个。然后,您需要使用命令列表复制到第二个。当然,您必须使用障碍(复制目标,着色器资源,...)来管理资源的资源状态。然后,您需要在命令队列上执行命令列表。您还需要添加一个fence来监听gpu,然后才能销毁上传堆中的资源。

在DX11上,你通过提供一个SRV绑定标志的描述结构和你想要放入它的cpu数据的指针来调用ID3D11Device :: CreateBuffer ...完成

在处理内存布局时,纹理稍微复杂一些。因此,正如我在上面所述,你应该专注于DX11,它根本没有降级,都有自己的角色。