Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Starling] Error #3675: Texture format mismatch (http://www.flasher.ru/forum/showthread.php?t=209509)

mikhailk 17.11.2014 17:23

Error #3675: Texture format mismatch
 
Приложение AIR работает в отладчике и на планшете. Но при попытке запуститься на смартфоне (GalaxySII) вылезла вот такая ошибка. Текстуры гружу через штатный AssetManager.

Никто не сталкивался?

Погуглил в Инете - предлагают отказываться от AssetManager'а.

Zebestov 17.11.2014 17:36

Може размер?

mikhailk 17.11.2014 17:43

Закончилась память оперативная?

Все текстуры аккуратно пакую TexturePacker'ом под Starling.
Ошибка появилась после того, как добавил текстур.

Zebestov 17.11.2014 17:53

Ну вот советуют грузить не асинхронно, а синхронно, и проблема уйдет.

mikhailk 17.11.2014 18:09

ну да, вижу

Цитата:

You can add assets directly (via the 'add...' methods) or asynchronously via a queue.
Жаль. Грузить через assets.loadQueue было удобно. смотрю, для синхронной загрузки опять ручками писать придется...

Добавлено через 22 минуты
В общем, серия опытов показала, что дело не именно в текстурах. Убрал подключаемую swc-библиотеку и текстуры прекрасно загрузились. Видимо, какой-то конфликт в другом месте.

Zebestov 17.11.2014 18:53

Ну последи все же, бо я там нагуглил жалобу на проявление ошибки при множестве загрузок/выгрузок.

mikhailk 17.11.2014 22:49

Да. Какая-то проблема все равно присутствует.
Придется переходить к синхронной загрузке.

caseyryan 18.11.2014 06:48

Цитата:

Придется переходить к синхронной загрузке.
Будет другая проблема - подвисание во время загрузки)
Цитата:

Да. Какая-то проблема все равно присутствует.
А какая именно?
Просто сейчас у меня по такой же схеме работает и графики все больше и больше. Вдруг тоже вылезет

mikhailk 18.11.2014 11:09

Проблема вылезает как "Error #3675: Texture format mismatch" при сборке интерфейса. Сама по себе загрузка проходит штатно. Тестирую на планшете Galaxy Tab 3 7.0 Lite - там все нормально. Загружается и вполне себе крутится. Запускаю на смартфоне Galaxy SII - загружается более-менее, работает с трудом, потом крашится с этой ошибкой при попытке собрать одно из интерфейсных окон.

Объем ассетов, по идее, детский - 15Мб. Максимальный вес одного спрайтшита - немного больше 2Мб. Все размеры в норме (меньше 2048х2048).

Пока не ясно, в чем дело.


ЗЫ. Да, при краше смартфон зависает, иногда намертво.

mikhailk 16.12.2014 18:58

Что-то у меня нет ясности.
Сделал синхронную загрузку, но видимо дело не в этом.

Унаследовался от AssetManager и гружу ассеты последовательно через loadRawAsset. Ошибка "Error #3675: Texture format mismatch" вылетает на Texture.fromBitmap.

Причем, от текстуры не зависит. Менял их местами, сортировал по-разному. Такое ощущение, что подхожу к ограничению по памяти. В общем, нужны идеи.

Код AS3:

function onAssetLoaded( rawAsset : Object ) : void
{
        var assetName : String = assetList[currentAsset].name;
        var extension : String = getExtensionFromUrl( assetList[currentAsset].asset );
 
        switch ( extension )
        {
                case 'xml' :
                        addXml( assetName, XML( rawAsset ) );
                        break;
 
                case 'png' :
                        var atlasTextureXML : XML = getXml( assetName );
                        var atlasTexture : Texture = Texture.fromBitmap( rawAsset as Bitmap );
                        var textureAtlas : TextureAtlas = new TextureAtlas( atlasTexture, atlasTextureXML );
                        addTextureAtlas( assetName, textureAtlas );
        }
 
        loadNextAsset();
}


illuzor 16.12.2014 21:03

mikhailk, atf формат не пробовали? Они меньше видеопамять потребляет.
Если старлинг не последней версии, лучше обновить. Пару дней назад вышел 1.6 с множеством оптимизаций.

mikhailk 16.12.2014 23:06

Старлинг как раз 1.6 поставил сегодня. Там, кстати, у АссетМенеджера появился параметр количества параллельных загрузок. Думал, если поставить 1, то асинхронная загрузка станет синхронной. Тоже не помогло.

ATF-формат не пробовал, спрайтшиты собираю в пнг.

Кстати, а как можно посмотреть доступный остаток видеопамяти?

illuzor 17.12.2014 01:45

Цитата:

Кстати, а как можно посмотреть доступный остаток видеопамяти?
Через scout. Кстати, изучите свой проект через скаут. Возможно, это поможет разобраться с проблемой.

mikhailk 17.12.2014 14:30

При запуске на компьютере у меня получается (смотрю через Scout), что приложение занимает примерно 320Мб памяти GPU. Походу, это и есть проблема? Надо уложиться в 256?

Добавлено через 15 минут
Не, не в этом дело.
Поставил скалирование, чтобы суммарно текстуры уложились в 95Мб, все равно смартфон отвалился на том же этапе.

mikhailk 08.01.2015 13:37

В общем, пища для размышлений:

- в основном приложении у меня пара изображений подключалась как Embed и затем грузилась в память через Texture.fromEmbeddedAsset
- я собрал стендик, в котором эти изображения грузятся как и все остальные через AssetManager, и на стендике добиться падения мне не удалось - все грузится и крутится.

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

ЗЫ. Глюк проявляется не на всех девайсах. У меня проявлялся на Samsung Galaxy SII.

mikhailk 16.01.2015 11:10

В общем, ситуация такова - у меня глючил даунскейл.

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

Zebestov 16.01.2015 18:07

Значит все-таки дело было в перерасходе памяти?

mikhailk 17.01.2015 13:48

В общем, ситуация такова:

1. Объем растровых секвенций в виде спрайтшитов PNG - около 20Мб.

2. При запуске приложения в варианте нативного флеша (без использования Starling'а) объем под графику после распаковки секвенций в битмапдату где-то около 300Мб. Приложение визуально жутко тормозит, но не крашится. Из этого я сделал вывод, что проблема не в оперативной памяти при работе непосредственно AIR-приложения.

3. При запуске приложения в варианте на Starling'е объем данных, которые грузятся в видеопамять (судя по данным Scaut'а) 320 Мб. При загрузке в какой-то момент происходит краш. Однако, если уменьшить скейл текстур при загрузке в два раза, чтобы данные заняли в видеопамяти примерно в 4 раза меньше (80-90 Мб), то краш происходит все равно. Из этого я сделал вывод, что проблема не в том, что исчерпалась видеопамять. В обоих случаях, естественно, имел место даунскейл.

Если же уменьшить сами исходные изображения текстур в 2 раза (в 4 раза по объему данных) и грузить при правильном скейле (получается без изменений или апскейл), то загрузка происходит штатно. Из этого я сделал вывод, что вероятнее всего проблема в самом AssetManager'е при даунскейле изображений текстур в момент загрузки.

В принципе, можно конечно провести дополнительный эксперимент. Когда я делал вариант синхронной загрузки (в котором так же наблюдался краш), я грузил битмапы последовательно, но по сути в режиме того же даунскейла средствами AssetManager'а. Можно немного докрутить метод загрузки с тем, чтобы скейлить битпамдаты средствами нативного флеша до загрузки в видеопамять и грузить их средствами AssetManager'а без скейла или с апскейлом. Но тогда потребуется так же править и xml-файлы описания текстур и что там в итоге выйдет, не совсем понятно.

Вот, как-то так.


ЗЫ. На всякий случай уточню, что под скейлом при загрузке я имею в виду скейл, настраиваемый параметром scaleFactor при инициализации AssetManager'а.

Zebestov 17.01.2015 14:54

300 метров — это уже очень много. Скажем, на iPhone 4 (это как бы нижний порог) краш будет уже при ~50-80 метрах.

mikhailk 17.01.2015 16:57

Ок, значит для айфона будет упрощена визуализация.
Но пока айфон на повестке дня не стоит.

Zebestov 17.01.2015 16:58

Так не, это я для примера привел, чтобы порядок цифр был как-то виден.

mikhailk 22.01.2015 18:43

И все-таки периодически случается зависание при создании очередного старлинговского имиджа или мувика в ходе работы приложения. Чистить кэш приложения (у меня имиджы и мувики кэшируются в пул), конечно, можно, но это отрицательно повлияет на производительность.

JokerDen 22.02.2015 16:03

Решена ли как-нибудь проблема? У меня вот та же самая проблема, на некоторых Андроид-девайсах выскакивает Error #3675: Texture format mismatch.
Видеопамяти точно хватает, также как и оперативной. В самом начале гружу одну текстурку 512х512, пытаюсь сделать имадж из нее, но выскакивает этот эксэпшн. Пробовал ATF, не помогло.

mikhailk 11.03.2015 17:15

На текущий момент общего решения нет. Гружу альтернативный комплект текстур, но на грани фола, что называется. Еще чуть чуть и полезет мыло. Единственное, к чему я пришел - это не решить на стороне кода. Т.е., не важно, синхронная загрузка или асинхронная, грузим или создаем - все равно в какой-то момент идет эксепшн. Есть маленькая надежда, что это глюк или AIR'а или Starling'а. Тогда есть шанс, что он уйдет с обновлениями.

JokerDen 22.03.2015 01:17

Беда. Текстуры пробовал грузить и с AssetManager-ом и без него?

caseyryan 05.04.2015 09:53

Вплыла-таки точно такая же проблема. И тоже на самсунге. Но причину понял быстро и решил ее. Проблема в новой версии AIR. Раньше у меня собиралась та же игра под 4.0, на флексе 4.6, а теперь под 17. Вот после переезда она и всплыла. Только подключил старую версию, и проблему как рукой сняло)

Добавлено через 1 час 51 минуту
Если кому-то надо, ставьте вот этот флекс.
Он слит с 4 версией эйр. На нем данной проблемы не наблюдается

illuzor 05.04.2015 13:41

caseyryan, Зачем аж до четвёртой откатываться? 16я версия нормально работает.
Тем более, сейчас для сборки под ios нужна минимум версия 16.
https://github.com/Gamua/Starling-Framework/issues/680

caseyryan 05.04.2015 14:41

Цитата:

Зачем аж до четвёртой откатываться? 16я версия нормально работает.
Не работает. Я проверял все версии. 16 выдает точно такой же баг. И 15 и 14 и 13.
Так что решил вернуть к той же версии, с которой начинал написание игры

Цитата:

Тем более, сейчас для сборки под ios нужна минимум версия 16.
https://github.com/Gamua/Starling-Framework/issues/680
Обрати внимание, там мой пост в самом конце этой темы. Я ее уже читал.
А откуда инфа, что под iOS нужна 16я? У меня и с 4й отлично работало все. Сомневаюсь, что все приложения, которые уже есть в апп сторе написанные под ранние версии, вдруг возьмут и перестанут работать.

Добавлено через 40 минут
Блин. Оказалось да, ты прав на счет предыдущих версий. Я просто тестировал на AIR 17, но выбирал предыдущие версии в настройках проекта в FD и в файле application.xml менял дескриптор. Это не катит. Сейчас скачал вот отсюда 15 и 16, проверил, и правда, на них работает.

illuzor 05.04.2015 15:43

Цитата:

А откуда инфа, что под iOS нужна 16я?
Сейчас по требованию apple сборка должна включать в себя x64 бинарники. А эта возможность появилась только в air16. Как я понимаю, это касается и новых билдов уже существующих приложений.

caseyryan 05.04.2015 15:59

Цитата:

Сейчас по требованию apple сборка должна включать в себя x64 бинарники.
Вот уроды)

mikhailk 17.04.2015 15:56

Что-то у меня никуда ошибка не делась.

Взял с указанной страницы https://helpx.adobe.com/air/kb/archi...k-version.html
Adobe AIR 16.0.0.292 SDK & Compiler Windows (240 MB)

Прописал
<application xmlns="http://ns.adobe.com/air/application/16.0">

Заливаю на Samsung Galaxy S - лезет ошибка как и раньше и на том же самом месте.

caseyryan 17.04.2015 17:48

Может глупый вопрос, но версия то с captive runtime?
У меня 16 версия железно убивает эту ошибку. На любом устройстве. В том числе и на самсунгах.

mikhailk 17.04.2015 18:57

Я запускаю в дебаг-режиме.
Из под Идеи.

Если я правильно понял вопрос.

caseyryan 17.04.2015 20:32

Попробуй собрать релизный apk с captive-runtime и залить его на девайс. Не знаю пакует ли идея AIR внутрь apk для дебага. FD точно пакует для дебага и не пакует для тестов. Если на устройстве стоит 17 эйр, и устанавливается apk с shared-runtime, естественно вывалится та же ошибка

mikhailk 17.04.2015 20:42

Цитата:

Не знаю пакует ли идея AIR внутрь apk для дебага.
Пакует.
На смартфоне стоит 14-я версия, скомпилированный под 16-м эйром в режиме релиза просто не запускается. В дебаг-режиме запускается.

В понедельник попробую captive-runtime, может действительно поможет.

caseyryan 17.04.2015 20:51

Вообще странно все это. Может есть еще какие-то условия для бага. Но у меня он только на 17 вываливается.
Может где-то в настройках 17 эйр все-таки затесался? Пустой проект с какой-нибудь одной картинкой тоже выкидывает ошибку? (у меня да)

mikhailk 18.04.2015 23:24

Цитата:

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


Часовой пояс GMT +4, время: 19:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.