PDA

Просмотр полной версии : [Starling] Оптимизация отрисовки


Godwarlock
20.09.2016, 18:30
Всем привет. Столкнутся с такой вот проблемкой. Генерирую объекты Image, примерно за раз около 50 штук через цикл

for (var i:int = 0; i < 50; i++)
{
var image:Image = Assets.getImage(id);
var _cell:Cell = new Cell(image);
_cells.push(_cell);
}
Класс получения объекта
public static function getImage(id:int):Image
{
var bmp:Bitmap;
var thisBitmapData:BitmapData;
var image:Image;

thisBitmapData =bmpdAtlas[id];//bmpdAtlas - тут хранятся загруженные битмапы картинок.
bmp = new Bitmap(thisBitmapData);
bmp.smoothing = true;
bmp.cacheAsBitmap = true;
bmp.x = -148 * 1;
image = Image.fromBitmap(bmp);
return image;
}
Всё быстро и хорошо генерируется без задержек, если тестировать приложение на пк. Но если перенести проект на android, то такая генерация занимает около 3 секунд. В моем случае это неприемлемо, создание такого количества объектов должно быть сразу, с наименьшей задержкой. Подскажите, как решить проблему.

illuzor
20.09.2016, 18:36
Какая жесть... Откройте для себя текстурные атласы.

Возможно, у вас создаются отдельные текстуры для одинаковых изображений - так тоже делать не надо. Одну текстуру можно (и даже нужно) использовать для нескольких одинаковых изображений

Godwarlock
20.09.2016, 18:46
То есть лучше создать текстуры и потом загружать их в Image? А не напрямую битмапы)
p.s Старлиг изучаю не больше недели.

Добавлено через 36 минут
Спасибо за помощь) Все работает, теперь тормозов не наблюдается)

illuzor
20.09.2016, 22:10
То есть лучше создать текстуры и потом загружать их в Image?
Что-то в этом роде. В вашем случае создаётся куча текстур, каждая из которых отжирает отдельную память и требует отдельный draw call(проход отрисовки видеокартой).
Если взять текстурный атлас - он предварительно загружается в память и для видеокарты представляет собой одну единственную текстуру. Любое количество изображений из атласа может быть отрисовано через один draw call.

Godwarlock
20.09.2016, 22:20
illuzorПонял. Спасибо за разъяснение)