2017-07-08 80 views
1

據我所知,當我們通過「vkUpdateDescriptorSets」更新統一變量時,相應命令緩衝區的狀態將無效。因此,我們必須重置命令緩衝區並重新記錄它。Vulkan:更新統一變量而無需重置命令緩衝區

有沒有辦法更新統一變量而不對命令緩衝區做任何事情?

什麼是更新每幀統一變量數據的最佳方式(在性能方面)?

回答

6

描述符集內的描述符指的是vkBuffer或vkImage中的區域。

您可以安全地更新渲染之間緩衝區或圖像的內容,並使描述符保持不變。

確保在實際更新發生時沒有讀取衝突。

+0

謝謝!我對vkBuffer部分有所瞭解,但我仍對圖像感到困惑。假設我有兩個紋理,'A'和'B',並且我在開始時準備了它們。如何讓着色器變量在第一幀中使用'A',但在第二幀中變爲'B'而不調用「vkUpdateDescriptorSets」來更改vkImageView?你能否添加更多關於它的細節? – user3677630

+1

在第二幀中,您將渲染到不同的交換鏈圖像,因此您無論如何都需要不同的命令緩衝區。您可以用這種方式觸發紋理(並且很可能是vkbuffer)與交換鏈圖像同步。 –