как изменить содержимое FloatBuffer, сохранив производительность?

я пробовал использовать

floatbuffer.put(float[]);

но поскольку я обрабатываю более 200 квадратов, все с разными координатами текстуры, которые обновляются каждый кадр, мой fps резко падает, и игра становится слишком далеко, чтобы быть плавной.

Вы думали, что метод, упомянутый на badlogicgames.com, о of, вместо использования floatbuffer, используйте intbuffer, но, что то же самое, равный медленному в момент, когда метод "помещает" буфер.

Итак, как я могу обновить все свои флотовые буферы с максимальной производительностью?

РЕДАКТИРОВАТЬ: я решил свою проблему, сам метод «положить» не медленный, проблема в том, что для каждого буфера с плавающей запятой инициализируется новый объект с плавающей запятой, вместо этого я просто меняю значение каждого элемента, содержащегося в массиве с плавающей запятой, и это избегает многих действий с GC .. ну, я думаю.


person Jose    schedule 18.05.2012    source источник


Ответы (1)


Есть несколько способов улучшить производительность. Вкратце, вот несколько:

1) Инициализируйте флоатбуфер и применяйте преобразование к каждому кадру: - Если ваши квадраты перемещаются по экрану, поместите их один раз во флоатбуфер, а затем примените отдельное матричное преобразование к каждому из них. В этом методе вы заполняете флоатбуфер один раз и просто обновляете преобразования каждый ход.

2) Помещайте только уникальные формы во флоатбуфер - если какие-либо из ваших квадратов дублируют друг друга, вызывайте один и тот же буфер в каждом кадре для экономии памяти.

3) Используйте объекты буфера вершин и объекты буфера индекса. Похоже, вы могли это сделать, но сохраняете данные в буфере вершин и вызываете вершины, используя индексы массива.

Если у вас все еще возникают проблемы, я рекомендую взглянуть на это руководство: http://www.learnopengles.com/android-lesson-one-getting-started/

person Fridiculous    schedule 28.09.2012