Другой подход заключается в использовании косвенного рисования: vkCmdDrawIndirect
. Такой подход может окупиться, если вы сможете модифицировать свои частицы только на графическом процессоре. Если вам нужно анимировать / изменить / et c. их на процессоре, тогда стороннее рисование не поможет.
Что касается ваших данных частиц, вы должны сохранить их в буфере VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
, изменить их в проходе вычислительного шейдера и отобразить их с помощью косвенного вызова отрисовки. Чтобы получить доступ к данным частицы, вам нужно будет использовать встроенную GLSL
gl_DrawID
.
В общем, нельзя сказать, какой способ лучше, чем другой, с точки зрения производительности. , Это зависит от многих факторов: от того, как вы собираетесь модифицировать частицы, от чего они зависят, от количества частиц, используемого графического процессора и т. Д. c. Если вы действительно хотите знать, вам нужно реализовать все подходы и измерить.
Если вы собираетесь сделать последнее, пожалуйста, поделитесь своими результатами и опишите ваши настройки! Такие вещи всегда интересны.