Vulkan, есть ли способ изменить смещение одного динамического унифицированного буфера, оставив остальные без изменений - PullRequest
1 голос
/ 06 июля 2019

Единственный способ, который я могу найти, - это поменять их все, что довольно раздражает.Допустим, у меня есть три динамических однородных буфера для освещения, преобразования и костей в одном наборе дескрипторов.Когда я прихожу туда, где мне нужно обновить кость, я даже не знаю (или не волнуюсь), каково текущее освещение, если я не сохраняю все смещения где-то каждый раз, когда обновляю смещения.

1 Ответ

1 голос
/ 06 июля 2019

Я даже не знаю (или забочусь), каково текущее освещение

Вы также на самом деле не знаете и не заботитесь о других вещах в наборе дескрипторов, но вы все равно должны предоставить его для обновления динамической привязки буфера. Это просто природа функциональности.

Таким образом, где бы вы ни хранили набор дескрипторов, вы также можете хранить массив, содержащий текущие привязки. Таким образом, вы просто изменяете этот массив, а затем используете этот массив в качестве массива pDynamicOffsets.

Хотя могут существовать альтернативные механизмы, которые могут быть доступны для выполнения той же задачи (push-константы, расширение push-дескриптора, расширение индексации дескриптора), если вы используете динамические смещения, вы должны указать все динамические смещения в дескрипторе устанавливаются каждый раз.

С учетом сказанного, вы вполне можете поместить различные типы дескрипторов в различные дескрипторы множеств . Информация о освещении, вероятно, меняется реже, чем информация о преобразовании; в конце концов, не все ваши шейдеры будут визуализировать объекты со скином, но все ваши шейдеры будут освещать с этими параметрами. Поэтому размещение информации о освещении для каждого кадра в наборе 0 и преобразование для каждого объекта в наборе 1 имеет для меня большой смысл.

Так что, возможно, вашу проблему можно решить, просто используя больше наборов дескрипторов.

...