DirectX12-PerObject与组合的单个常量缓冲区

时间:2018-07-24 22:31:17

标签: directx-12

因此,我正在使用DX12进行项目开发,因此教程/书籍与以前的大学学习之间存在冲突。

因此,一个教程给出了以下评论: 我们的场景中有两个对象,每个对象都有自己的固定缓冲区数据。我们可以为每个对象的每个帧创建一个资源堆,但这很浪费,所以我们要做的是将两个对象的常量缓冲区存储在三个资源堆的每一个中,然后将根描述符设置为对象的正确内存地址。常量缓冲区,我们需要在下一个绘制调用中使用它。

因此,在本教程中,对象被索引到单个常量缓冲区中,这意味着如果场景中有100个对象,则缓冲区将必须容纳所有对象。

例如,假设我具有以下要传递给着色器的结构id

PerObject
{
XMMATRIX World

Material properties
any other values that are per object i may want
}

GlobalBuffer
{
 View
 Projection
}

LightBuffer
{
 any light properties
}

哪个选项最好?

  1. 每个对象都有各自的PerObject缓冲区,该缓冲区被映射到GPU,因此可以对其进行更新。然后在渲染每个对象时,我设置当前对象的PerObject Buffer。
  2. 另一种方法是按照本教程进行操作,并使用单个ObjectBuffer,使对象缓冲区全部对齐,然后在进行更新时,id必须索引到数据右侧的缓冲区中。

两种方式都分配相同的内存,我不确定哪一种更实用?

谢谢

0 个答案:

没有答案