Реагирование на доступность ОЗУ в iOS

У меня есть игра OpenGL с большим количеством текстур, которую я бы хотел настроить в зависимости от объема оперативной памяти устройства. Текстуры с самым высоким разрешением, которые у меня есть, отлично работают на iPhone 4 или iPad2, но более ранние устройства дают сбой во время загрузки текстур. У меня есть версии этих текстур с низким разрешением, но мне нужно знать, когда их использовать.

Моя текущая тактика состоит в том, чтобы обнаруживать определенные старые устройства (3GS имеет экран с низким разрешением; iPad не имеет камеры), а затем загружать текстуры высокого разрешения только для IPad2 и выше и iPhone 4 и выше - и я полагаю, что я ' нужно будет что-то сделать для iPod touch. Но я бы предпочел использовать обнаружение функций, чем модели устройств с жестким кодированием, поскольку обнаружение модели уязвимо для будущих изменений API и оборудования.

Другая возможность, которую я рассматриваю, - это сначала загрузить текстуры с высоким разрешением, а затем удалить и заменить их на низкое разрешение в тот момент, когда я получаю предупреждение о нехватке памяти. Однако я не уверен, что получу шанс ответить; Я заметил, что приложение часто умирает до того, как на консоли отладки появляется какое-либо уведомление.

Как определить, что на устройстве, на котором я работаю, недостаточно ОЗУ для загрузки версий моих текстур в высоком разрешении?

Сделаем шаг назад, есть ли какой-нибудь другой адаптивный метод, который я могу использовать, специфичный для текстур OpenGL memory?

Примечания:

  1. Я искал и отключал SO ответы, связанные с обнаружением доступной RAM, но все они в основном советуют профилировать использование памяти и устранять потери (минимизировать время жизни временных файлов и прочую болтовню). Я сделал все, что мог, и я не собираюсь втиснуть текстуры высокого разрешения в старые устройства.

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

9
задан Marcelo Cantos 20 March 2012 в 00:19
поделиться