Текстуры в OpenGL повреждены из-за плотности экрана Android (hdpi) - PullRequest
1 голос
/ 09 октября 2011

У меня проблема с экранами HDPI (проверено на Samsung Galaxy S2).

У меня есть карта текстур, которую я использую вместе с расширением OES_draw_texture 1.1.Это прекрасно работает для экранов MDPI, больших и маленьких (протестировано на планшетах HTC Legend и Asus Transformer).Карта текстур обрезается правильно, и текстура отображается правильно.

Однако на Galaxy S2 (и, вероятно, на всех устройствах HDPI) карта текстур обрезается неправильно.Карта текстур находится в каталоге / drawable /, а для minSdkVersion установлено значение 4, поэтому совместимость экрана не будет включена.Если включена совместимость экрана (если для параметра minSdkVersion установлено значение 3), он работает правильно даже на S2, поскольку он эмулирует экран MDPI.

У меня сложилось впечатление, что, если вам нужен доступ к рисуемому ресурсу "Msgstr "Android будет искать в папке определенной плотности (в данном случае / drawable-hdpi /) и, если не найден, вернуться к / drawable / или / drawable-mdpi /.Однако я не смог найти документацию, подтверждающую это.

У меня следующие вопросы:

  • Каково поведение поиска ресурсов Android? на самом деле он возвращается к MDDP, если он не может найти ресурс в HDMI?Источник?
  • Почему расширение OES_draw_texture GL-ES1.1 не может правильно обрезаться? Я подозреваю, что это связано с px и dp;draw_texture обычно использует прямые пиксели, но Android может пытаться использовать dp и поэтому умножает все позиции кадрирования на 1.5, так как ресурс находится в папке / drawable /?
  • Есть ли способ заставитьHDPI-устройство для эмуляции MDPI без использования совместимости экрана?

Любые знания в этой области будут оценены.

1 Ответ

2 голосов
/ 09 октября 2011

Отсюда. (при загрузке вашей текстуры)

// This will tell the BitmapFactory to not scale based on the device's pixel density:
// (Thanks to Matthew Marshall for this bit)
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inScaled = false;
...