Vulkan,有没有办法改变一个动态统一缓冲区的偏移量,同时保持其余部分不变

时间:2019-07-06 14:43:47

标签: vulkan

我唯一能找到的方法就是更改所有这些,这很烦人。假设我在单个描述符集中具有三个用于照明,变换和骨骼的动态统一缓冲区。当我到达需要更新骨骼的位置时,我什至不知道(或不在乎)当前的照明方式,除非每次更新偏移量时都将所有偏移量保存在某个地方。

1 个答案:

答案 0 :(得分:1)

  

我什至不知道(或不在乎)当前的照明灯是什么

您也不真正了解或关心描述符集中的其他内容,但是您仍然必须提供它才能更新动态缓冲区绑定。那只是功能的本质。

因此,无论将描述符集存储在哪里,都可以存储包含当前绑定的数组。因此,您只需修改该数组,然后将该数组用作pDynamicOffsets数组即可。

虽然可能有其他机制可用于完成同一任务(推送常量,推送描述符扩展,描述符索引扩展),但是如果您使用动态偏移量,则必须指定所有每次在描述符集中设置动态偏移量。

话虽如此,您完全有可能将不同种类的描述符放入不同的描述符集合中。照明信息的变化可能不如变换信息频繁。毕竟,并非所有的着色器都将渲染蒙皮的对象,但是所有的着色器都将使用这些参数进行照明。因此,将每帧的照明信息放入集合0中并将每对象的变换内容放入集合1中对我来说很有意义。

因此,也许可以通过使用更多描述符集来解决您的问题。