Я создал приложение openGL для Android с несколькими текстурами, которые я создал в разных размерах (1024,1024 и 2048,2048). Я выбрал 2048, потому что это то, что поддерживает galaxy s3. Мне было интересно, есть ли способ отфильтровать, какие телефоны могут видеть мое приложение на max_texture_width Я просмотрел несколько ресурсов

Например http://developer.android.com/guide/topics/ manifest / supports-screen-element.html

http://developer.android.com/google/play/filters.html

И не смог найти никакой помощи, я вижу много способов сделать это программно, например:

Разумные размеры текстур в android

Но поскольку меньшая из моих текстур - 1204x1024, и некоторые видеокарты могут вылетать из-за этого, я не хочу, чтобы мое приложение могло зайти так далеко. У кого-нибудь есть совет, как это решить? Если бы мне пришлось создать текстуру меньшего размера 512x512, мне понадобится дополнительный алгоритм, который я (вероятно) не могу написать в рамках временных ограничений по другим причинам. Спасибо

4
Mike H-R 16 Янв 2013 в 02:54

1 ответ

Лучший ответ

Вы не можете фильтровать приложения, объявив максимальный поддерживаемый размер текстуры в манифесте, только для поддерживаемых форматов текстур. Кроме того, вы можете фильтровать свои приложения в Google Play по устройствам, но их слишком много, чтобы проверить совместимость.

2
keaukraine 16 Янв 2013 в 16:08
Есть ли альтернативы? как мне с этим справиться, если мое приложение пытается загрузить текстуру 1024x1024?
 – 
Mike H-R
17 Янв 2013 в 04:50
1
На самом деле разрешение 1024x1024 не так уж и много для любого графического процессора, но 4096x4096 может не работать на некоторых устройствах. Вам действительно следует добавить код проверки для GL_MAX_TEXTURE_SIZE и при необходимости использовать текстуры с пониженной дискретизацией. Также загрузка большого количества больших текстур (особенно с mip-картами) может вызвать ошибку GL 1285 - нехватка памяти. Вы можете добавить чеки и для этого случая.
 – 
keaukraine
17 Янв 2013 в 11:29
Хорошо, круто, я могу предположить, что мой минимальный размер текстуры может быть 1024x1024 (это уменьшенная версия моей более крупной текстуры) и программно проверить, может ли Opengl отрендерить это. я должен включить еще одну уменьшенную версию для 512x512?
 – 
Mike H-R
17 Янв 2013 в 20:30
1
Как это сделать, не загружая в память? не произойдет ли сбой, если я попытаюсь загрузить свою текстуру 1024x 1024, а затем уменьшить ее размер? или есть способ сделать это по-другому? аххх, поэтому я немного прочитал, хочу ли я сначала загрузить меньшее растровое изображение с помощью фабрики растровых изображений в соответствии с: developer.android.com/training/displaying-bitmaps/…, а затем привязать его к openGL?
 – 
Mike H-R
17 Янв 2013 в 22:42
1
Да, статья, на которую вы ссылаетесь, является наиболее эффективным способом субдискретизации растровых изображений в Android.
 – 
keaukraine
18 Янв 2013 в 11:11