PDA

Просмотр полной версии : Stage3D Аватарки пользователей на gpu


Tails
06.05.2015, 17:29
Вопрос такой, стоит ли делать отображение аватарок пользователей на gpu (Starling)? При промотке списка, для отображения аватарок их текстуры придётся постоянно грузить/выгружать из gpu, это не будет слишком тормозить? Предположительно, максимум одновременно могут грузиться/выгружаться окола 10-15 картинок 100x100.

caseyryan
06.05.2015, 17:48
Если у тебя вся игра на GPU, то глупо будет делать аватарки на простом флеше. Делай кэш текстур просто

KBAC
06.05.2015, 20:23
А можно собирать атлас из подгружаемых картинок и обновлять одну текстуру.

dimarik
06.05.2015, 21:30
Сборка нового атласа никоим образом не отменяет последующих уничтожения (dispose) старой текстуры и загрузки новой, на основе нового атласа. Накладные расходы на сборку атласа могут превысить профит от его использования против использования одиночных текстур. Профит от атласа достигается, в основном, от снижения количества draw calls, а так же от переключения видеокарточки на новую текстурку. Короче, не так страшны дро коллз, как fillrate. Если напрягает производительность списков с аватарками, то я бы порекомендовал взглянуть в сторону техники виртуальности, когда фактически на сцене присутствуют только видимые в данный момент рендереры при любом произвольном количестве элементов в data provider.

Tails
07.05.2015, 00:31
Что же, спасибо за советы.

caseyryan,
Кеш текстур, разве что, какой-то временный делать. Если не выгружать не отображаемые аватарки, память быстро закончится.

KBAC,
Мысль интересная. Наверное, тут только на практике можно определить, при каких обстоятельствах такой способ будет лучше одиночных текстур. Возможно, при большом количестве операций выгрузки/загрузки аватарок за раз, использование общего атласа будет выгоднее.

dimarik,
Подобная система вывода только видимых элементов сейчас у меня уже используется, только для обычного рендера. К ней я пришёл, после нескольких трудоёмких переделывании списков друзей, топов и т.п. Без этого было никак, иначе загруженные, не выгружаемые аватарки дико отжирали память, а дисплей лист вис из-за большого количества детей. После всего этого геморроя, помню, как потратил выходные и несколько дней в придачу на реализацию такой системы.

Но в отличие от gpu, на обычном рендере аватарка появляется мгновенно, сразу после загрузки из сети. А для gpu её ещё нужно загрузить в видеокарту, а это только в основном потоке. Этот то момент меня и беспокоит, не вызовет ли это подвисании и подтормаживании при промотках списков? Тут за раз может потребоваться загрузить не более 10-15 аватарок и примерно столько же выгрузить старых. (dispose)

dimarik
07.05.2015, 01:38
Скорость загрузки в видеокарту из оперативной памяти достаточно высокая. Серьёзные лаги могут проявляться только из-за загрузки из вэба или из локальной файловой системы (меньше). Однако после того как битмапдата загружена в оперативку, лаг на загрузку в видеопамять вы практически не заметите. Скаутом можно посмотреть.


По поводу кэша текстур. Нет такого кэша вне видеопамяти. Любая текстура находится в видеопамяти.

Не уверен, но можно попробовать не убивать текстуру, а загружать в уже существующую новую аватарку. Т.о. избавиться от dispose.

caseyryan
07.05.2015, 09:09
Если не выгружать не отображаемые аватарки, память быстро закончится.
Так а ты не грузи ненужные аватарки. Грузи только по требованию. Вряд ли их там будет столько, что закончится память

Tails
07.05.2015, 09:14
Всем большое спасибо за советы, я получил ответы на свой вопрос.