Установленные условия: сборка чтения и разброс записи
Собрание читает
Это означает, что ваша программа будет записывать в фиксированную позицию (например, целевую позицию фрагмента шейдера фрагмента), но имеет быстрый доступ к произвольным источникам данных (текстурам, униформе и т.
Скаттер пишет
Это означает, что программа получает поток входных данных, которые она не может произвольно адресовать, но может выполнять быструю запись в произвольные области памяти.
Очевидно, что шейдерная архитектура OpenGL представляет собой систему сбора данных. Последний OpenGL-4 также позволяет некоторые записи разброса в фрагментном шейдере, но они медленные.
Итак, какой самый эффективный в наши дни способ эмулировать "рассеяние" с помощью OpenGL. Пока что используется вершинный шейдер, работающий с точками размером в пиксель. Вы отправляете столько точек, сколько у вас есть точек данных для обработки, и разбрасываете их в целевой памяти, устанавливая их соответствующие положения. Вы можете использовать геометрические и тесселяционные шейдеры, чтобы получить точки, обработанные в единице вершины. Вы можете использовать текстурные буферы и UBO для ввода данных, используя индекс вершины / точки для адресации.