Если я генерирую 0-12 треугольников в вычислительном шейдере, есть ли способ, по которому я могу передать их в буфер, который затем будет использоваться для рендеринга на экран?Динамический вывод из вычислительного шейдера
Моя текущая стратегия:
- создать буфер
float3
размераthreads * 12
, поэтому можно сохранить максимально возможное количество треугольников; - пишите в буфер, используя индекс, который зависит от положения нити в сетке, поэтому нет условий гонки.
Если я хочу сделать из этого, хотя, я должен был бы пропустить пустую память. Это звучит уродливо, но, вероятно, в настоящее время нет другого пути. Я знаю, что шейдеры геометрии CUDA могут иметь выход переменной длины, но мне интересно, могут ли/i игры iOS генерировать данные переменной длины на графическом процессоре.
UPDATE 1:
Как только я написал вопрос, я подумал о возможности использования второго буфера, который будет указывать, сколько треугольников доступны для каждого блока . Затем вершинный шейдер обрабатывал все вершины всех треугольников этого блока.
Это не решит проблему неиспользуемой памяти, хотя и поскольку у меня есть большое количество потоков, общая потерянная память будет значительной.
Это именно то, что я придумал: увеличивать счетчик атомарно до _reserve_ определенной зоны буфера, а затем записывать в буфер. В конце прохода скопируйте буфер для визуализации буфера, используя атомный размер int и удалите рабочий буфер. – aledalgrande