Управление памятью для панорамного тура

Построение тура по частичным панорамам iPhone. Их около 40+ и кажется, что на мобильных устройствах заканчивается память.

Кроме того, при использовании версии A-frame 0.5.0 приведенный ниже код работает на рабочем столе, но не в последней версии 0.9.2.

<a-entity id="pano_01" visible="true">
<a-curvedimage asset-on-demand="src: ../Html_Templates/pix/Upgrade.jpg" height="145" radius="100" theta-length="300" rotation="0 33 0"></a-curvedimage>
<a-sky asset-on-demand="src: ../Html_Templates/pix/Upgrade_sky.jpg" rotation="0 -90 0"></a-sky>
<a-image asset-on-demand="src: ../Html_Templates/pix/UI_Next.png" position="0 -0.5 -3" scale="0.35 0.35 0.35" onclick="setpano_02()"></a-image>
</a-entity>

<a-entity id="pano_02" visible="false">
<a-sky asset-on-demand="src: ../Html_Templates/pix/JRO_Arrive_sky.jpg"></a-sky>
<a-curvedimage asset-on-demand="src: ../Html_Templates/pix/JRO_Arrive.jpg" height="140" radius="100.0" theta-length="300" rotation="0 60 0"></a-curvedimage>
<a-image asset-on-demand="src: ../Html_Templates/pix/UI_Next.png" position="1 -0.5 -3" scale="0.35 0.35 0.35" onclick="setpano_03()"></a-image>
<a-image asset-on-demand="src: ../Html_Templates/pix/UI_Back.png" position="-1 -0.5 -3" scale="0.35 0.35 0.35" onclick="setpano_01()"></a-image>
</a-entity>

Java, которые поддерживают вышеперечисленное:

function setpano_01() {
 document.getElementById('pano_01').setAttribute('visible', 'true')
 document.getElementById('pano_02').setAttribute('visible', 'false')
}
function setpano_02() {
 document.getElementById('pano_01').setAttribute('visible', 'false')
 document.getElementById('pano_02').setAttribute('visible', 'true')
 document.getElementById('pano_03').setAttribute('visible', 'false')

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

(Надеюсь, теперь вопрос лучше сформулирован).


person LarsS    schedule 04.09.2019    source источник
comment
Пожалуйста, прочитайте Как спросить, а затем отредактируйте свой вопрос соответствующим образом. Как бы то ни было, ваш вопрос может быть слишком широким. Кроме того, не работает не полезное описание проблемы. Добавьте свой код в виде минимально воспроизводимого примера. Что происходит, когда вы запускаете его? Что вы ожидали вместо этого? Есть ошибки?   -  person Robert    schedule 05.09.2019


Ответы (1)


Существует пользовательский компонент, который называется aframe-asset по требованию. https://www.npmjs.com/package/aframe-asset-on-demand-component

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

«Удалите актив из памяти, когда он больше не нужен. Если вы просто удалите текстуру из объекта, она не будет полностью удалена из THREE.JS и по-прежнему будет использовать драгоценную память (особенно ценную на мобильных устройствах). A-Frame Asset OnDemand делает уверен, что актив удален таким образом, что освобождается память».

Я нашел это, погуглив «aframe динамически загружает активы»

person Thomas Williams    schedule 05.09.2019
comment
Спасибо за ответ. На самом деле я использую компонент актива по требованию. Что касается извлечения актива, он работает, но, похоже, он очень эффективно выполняет часть очистки. Поскольку я использую стратегию переключения видимости разделов сущностей, я подозреваю, что это может не соответствовать схеме компонента. - person LarsS; 06.09.2019
comment
Также забавно то, что код отлично работает под версией 0.5.0. Но не в более новых версиях. Я бы очень хотел получить помощь, чтобы обновить его до текущей версии 0.9.2. - person LarsS; 06.09.2019
comment
Я предлагаю упростить проект до одного загружаемого изображения и удаления, а также отслеживать vram, чтобы увидеть, действительно ли вы очищаете память при удалении. Я не понимаю, как изменение видимости сущностей повлияет на удаление актива, но, возможно, что-то мешает видеокарте освободить память. Когда вы получите простое добавление и удаление изображений, медленно добавляйте другие функции и отмечайте, когда начинает происходить сбой. - person Thomas Williams; 06.09.2019