2017-01-11 3 views
1

Я читал много онлайн-руководств по созданию визуализатора Vulkan, однако идея subpasses все еще очень неясна для меня.Несколько экземпляров одного и того же Vulkan subpass

Скажите, что у меня есть следующий сценарий: мне нужно сделать первый subpass для установки (заполнить буфер глубины для тестирования и т. Д.), А затем иметь subpass для каждого света в сцене (число которого может измениться в любое время) , Поскольку каждый осветительный subpass точно такой же, можно ли объявить 2 subpasses и иметь несколько экземпляров одного и того же subpass?

ответ

1

Термин «проход» здесь не означает «полноэкранный проход» или что-то в этом роде. Subpasses только материальное значение с точки зрения того, что вы рендеринга (и чтения из предыдущих представлений subpass в качестве входных вложений). Где ваши данные поступают из (дескрипторы/push-константы), какие данные вершин они получают, какие шейдеры они используют, ничто из этого не имеет значения для subpass. Единственное, что контролируют элементы управления subpass, - это объекты рендеринга.

Так что, если разные огни не отображаются на разные изображения, тогда нет причин, чтобы каждый свет представлял собой subpass. Вы просто выдаете команды рендеринга для всех своих огней в одном и том же подвале.

+0

Что делать, если я хочу, чтобы каждый свет был в своей нитке? Я хотел бы, чтобы команды рисования отправлялись после завершения каждого потока, чтобы рендеринг не дождался завершения всех огней - извините, если этот вопрос является базовым – RWilco8

+0

@ RWilco8: В собственной потоке процессора? Это не имеет смысла; команды не выполняются в нескольких потоках ЦП. Вы помещаете их в CB в несколько потоков процессора. И уже есть способ справиться с этим: вспомогательные буферы команд. Кроме того, если вы делаете отложенный рендеринг, нет причин для этого, так как количество команд на свет очень мало. –

+0

Ах да, я хотел бы использовать прямой рендеринг, где сцена отображается как серия огней, которые добавляются в результат. Делая это, я надеюсь, что он будет очень параллельным, когда каждый свет может начать свое командообразование и отправить, как только это будет сделано, используя threadpool. – RWilco8