我刚开始学习vulkan并查看了几个教程/示例,我注意到了一些事情:每个人都使用1个结构进行统一加载,包含所有相关数据(模型,视图,投影矩阵等等。)。这些结构体每隔一帧都会更新一次。使用多个DescriptorSets vs更多统一更新
现在我的问题:是因为编写者是“懒惰”,而不是创建单独的频率单独的unforms(例如投影,因为它只需要加载一次),他们只使用1结构,因为它不需要额外的设置,还是因为加载1个“更大”的结构比创建多个集合更频繁,性能会更好。
我刚开始学习vulkan并查看了几个教程/示例,我注意到了一些事情:每个人都使用1个结构进行统一加载,包含所有相关数据(模型,视图,投影矩阵等等。)。这些结构体每隔一帧都会更新一次。使用多个DescriptorSets vs更多统一更新
现在我的问题:是因为编写者是“懒惰”,而不是创建单独的频率单独的unforms(例如投影,因为它只需要加载一次),他们只使用1结构,因为它不需要额外的设置,还是因为加载1个“更大”的结构比创建多个集合更频繁,性能会更好。
大多数演示/示例代码都是懒惰的。通常这是为了避免使用结果不需要的概念过度复杂化代码。
此外,演示程序通常有1个绘图调用(仅渲染一个模型),因此不需要在其中更改描述符集。
变化的频率也在记录单个命令缓冲区内。所以如果你有一个视图矩阵在帧的持续时间内保持不变,那么你可以把它放在布局的开始和投影矩阵一起。
我只能说我的例子,并为那些我试图保持简单(尽可能与Vulkan)。这就是为什么我只为每个UBO使用一个描述符集。演示多套的示例在我的列表中,但尚未完成。但请注意,对于像投影矩阵那样静态的东西,您可以使用推常数而不是专用DS。 –
@SaschaWillems这是你的例子(和亚历山大Overvoorde的)我所指的。乍一看,它们非常怪异,但如果你通读代码,它们很简单。他们从vulkan开始是一个很好的帮助,所以我想亲自感谢你提供这些例子。谢谢 – Dynamitos