2016-08-22 19 views
1

我刚开始学习vulkan并查看了几个教程/示例,我注意到了一些事情:每个人都使用1个结构进行统一加载,包含所有相关数据(模型,视图,投影矩阵等等。)。这些结构体每隔一帧都会更新一次。使用多个DescriptorSets vs更多统一更新

现在我的问题:是因为编写者是“懒惰”,而不是创建单独的频率单独的unforms(例如投影,因为它只需要加载一次),他们只使用1结构,因为它不需要额外的设置,还是因为加载1个“更大”的结构比创建多个集合更频繁,性能会更好。

+0

我只能说我的例子,并为那些我试图保持简单(尽可能与Vulkan)。这就是为什么我只为每个UBO使用一个描述符集。演示多套的示例在我的列表中,但尚未完成。但请注意,对于像投影矩阵那样静态的东西,您可以使用推常数而不是专用DS。 –

+1

@SaschaWillems这是你的例子(和亚历山大Overvoorde的)我所指的。乍一看,它们非常怪异,但如果你通读代码,它们很简单。他们从vulkan开始是一个很好的帮助,所以我想亲自感谢你提供这些例子。谢谢 – Dynamitos

回答

2

大多数演示/示例代码都是懒惰的。通常这是为了避免使用结果不需要的概念过度复杂化代码。

此外,演示程序通常有1个绘图调用(仅渲染一个模型),因此不需要在其中更改描述符集。

变化的频率也在记录单个命令缓冲区内。所以如果你有一个视图矩阵在帧的持续时间内保持不变,那么你可以把它放在布局的开始和投影矩阵一起。

+0

“开始的布局”你是指renderpass的开始?无论如何,谢谢 – Dynamitos

+0

没有我的意思是绑定数字0,然后与(几乎)在命令缓冲区中的所有绘制调用一起使用。 –

+0

我还有一个问题:如果着色器变得更大(10-20),你会开始创建不同的缓冲区,还是仍然坚持使用单个缓冲区和常量的简单方法? – Dynamitos