Я пишу приложение фильтра частиц для Android. Я хочу, чтобы все частицы обрабатывались GPU параллельно.
У меня есть код в вершинном шейдере для обновления позиции каждой частицы или вершины на основе ее текущей позиции, но я не могу понять, как записать обновленное местоположение обратно в openGLES или даже сделать его доступным для обработки шейдера. ту же вершину при следующем прогоне.
Переменные атрибутов имеют соответствующую область действия, но считываются только внутри вершинного шейдера.
У юниформ-переменных есть соответствующая область видимости, но вы не можете делать массивы (поэтому было бы сложно реализовать юниформы для большого количества вершин). И снова они читаются только внутри вершинного шейдера.
Варьируемые переменные имеют область действия, позволяющую модифицировать их, но они видны только фрагментному шейдеру в программе. Что могло бы сработать, если бы фрагментный шейдер мог записывать информацию в openGLES. Могут ли фрагментные шейдеры изменять атрибутивные переменные (для следующего запуска)?
Есть ли способ для шейдеров фрагментов обновить любую переменную? {attribute,uniform,variable,default,other} а может буфер выписывать не на дисплей а в память?