Я пытаюсь собрать систему частиц в Android, используя OpenGL. Я хочу несколько тысяч частиц, большинство из которых, вероятно, будет вне экрана в любой момент времени. Они визуально довольно простые частицы, и мой мир 2D, но они будут двигаться, меняя цвет (не размер - они 2x2), и мне нужно иметь возможность добавлять и удалять.
В настоящее время у меня есть массив, который я перебираю, обрабатывая изменения скорости, управляя жизненным циклом (убивая старые, добавляя новые), и нанося их на график, используя glDrawArrays. На что указывает OpenGl, хотя для этого вызова это одна вершина; Я выполняю glTranslatex для соответствующих кодов для каждой частицы, которую я хочу построить, по одному, устанавливая цвет с помощью glColor4x, а затем glDrawArrays. Это работает, но это немного медленно и работает только для нескольких сотен частиц. Я сам занимаюсь стрижкой.
Я написал систему для поддержки статических частиц, которую я загрузил в вершину / цветовой массив и построил график с использованием glDrawArrays, но этот подход кажется подходящим только для частиц, которые никогда не изменят относительное местоположение (т.е. я перемещаю их все с помощью glTranslate ), цвет и где мне не нужно добавлять / удалять частицы. Несколько тестов на моем телефоне (HTC Desire) показывают, что попытки изменить содержимое этих массивов (которые являются ByteBuffers, на которые указывает OpenGL) чрезвычайно медленны.
Возможно, есть какой-то способ самостоятельно написать экран с помощью процессора. Если я просто рисую точки 1x1 / 2x2 на экране, и мне просто интересно писать, а не смешивать / сглаживать, это вариант? Будет ли это быстрее, чем то, что делает OpenGl?
(200 или около того частиц на 1-ГГц машине с мегабайтами оперативной памяти. Это намного медленнее, чем 20 лет назад на 7-МГц машине с <500 КБ оперативной памяти! Я ценю, что использую здесь Java, но наверняка должно быть лучшее решение. Должен ли я использовать NDK, чтобы получить мощь C ++, или это то, что мне нужно?) </p>