Vulkan,有没有办法在保持其余不变的情况下更改一个动态统一缓冲区的偏移量
Vulkan, Is there a way to change the offset of one dynamic uniform buffer while keeping the rest unchanged
我能找到的唯一方法是更改所有这些,这很烦人。假设我在单个描述符集中有三个动态统一缓冲区,用于光照、变换和骨骼。当我来到需要更新骨骼的地方时,我什至不知道(或关心)当前的光照是什么,除非我每次更新偏移量时都将所有偏移量保存在某个地方。
I don't even know (or care) what is the current lighting
您也并不真正了解或关心描述符集中的其他内容,但您仍然必须提供它以更新动态缓冲区绑定。这就是功能的本质。
因此,无论您在何处存储描述符集,您都可以存储一个包含当前绑定的数组。因此,您只需修改该数组,然后将该数组用作您的 pDynamicOffsets
数组。
虽然您可以使用其他机制来完成相同的任务(推送常量、推送描述符扩展、描述符索引扩展),但如果您使用的是动态偏移,则必须指定所有每次设置描述符中的动态偏移量。
话虽如此,您完全可以将不同种类的描述符放入不同的描述符集合。光照信息的变化频率可能低于变换信息;毕竟,并非所有着色器都将渲染蒙皮对象,但所有着色器都将使用这些参数进行照明。因此,将 per-frame 光照信息放入集合 0 并将 per-object 变换信息放入集合 1 对我来说很有意义。
所以也许你的问题可以简单地通过使用更多的描述符集来解决。
我能找到的唯一方法是更改所有这些,这很烦人。假设我在单个描述符集中有三个动态统一缓冲区,用于光照、变换和骨骼。当我来到需要更新骨骼的地方时,我什至不知道(或关心)当前的光照是什么,除非我每次更新偏移量时都将所有偏移量保存在某个地方。
I don't even know (or care) what is the current lighting
您也并不真正了解或关心描述符集中的其他内容,但您仍然必须提供它以更新动态缓冲区绑定。这就是功能的本质。
因此,无论您在何处存储描述符集,您都可以存储一个包含当前绑定的数组。因此,您只需修改该数组,然后将该数组用作您的 pDynamicOffsets
数组。
虽然您可以使用其他机制来完成相同的任务(推送常量、推送描述符扩展、描述符索引扩展),但如果您使用的是动态偏移,则必须指定所有每次设置描述符中的动态偏移量。
话虽如此,您完全可以将不同种类的描述符放入不同的描述符集合。光照信息的变化频率可能低于变换信息;毕竟,并非所有着色器都将渲染蒙皮对象,但所有着色器都将使用这些参数进行照明。因此,将 per-frame 光照信息放入集合 0 并将 per-object 变换信息放入集合 1 对我来说很有意义。
所以也许你的问题可以简单地通过使用更多的描述符集来解决。