2013-05-16 1 views
2

Я разрабатываю кросс-платформенную игру для Android и iOS. Для нескольких объектов, похожих на афишу, я использую аддитивное смешение (glBlend(GL_ONE, GL_ONE)) с текстурами черного фона. Изображенные объекты выглядят отлично (т. Е. Черные пиксели из текстуры выглядят полностью прозрачными) почти везде. Однако на двух разных устройствах Android с графическим процессором Adreno (один Nexus 4 и другой Sony Xperia Go) у меня есть такие артефакты: enter image description hereАддитивные смешивания артефактов с OpenGL ES 2.0 на некоторых устройствах Android

Как видно с помощью значка гамбургера, цвет фона истекает в рендер-квадрант. Я предполагаю, что это цвет фона, потому что эффект не отображается, когда квадратики афиша прямо перед фоном. Чтобы сделать вещи более странными, эффект не отображается, когда я снимаю снимок экрана с устройства, поэтому мне нужно сделать снимок экрана с другой камерой. Я также заметил, что артефакты исчезают, когда я включаю Disable HW Overlays из настроек разработчика Android. Артефакты также исчезают, когда на экране появляется другое прозрачное окно, например, ползунок громкости, когда я нажимаю кнопки регулировки громкости.

Когда я показываю свою сцену, я сначала визуализую непрозрачные объекты в первом проходе, а затем во втором проходе я визуализую свои прозрачные рекламные щиты с помощью glBlend(GL_ONE, GL_ONE) и с отключением записи глубины.

+0

Помимо публикации здесь, попробуйте также на форумах сообщества разработчиков Qualcomm. вы пробовали с разными внутренними форматами текстур? – Trax

+0

Спасибо за совет, я тоже попробую. – rgngl

ответ

0

Для записи потребовалось немало времени, чтобы найти преступника, но, наконец, я выяснил причину. Оказывается, что не все мои «предположительно» непрозрачные объекты были действительно непрозрачными (то есть они имели альфа-значение < 1,0).

Из-за этого на устройствах, которые используют аппаратные накладки, артефакты становятся видимыми, а на устройствах с одним аппаратным наложением - отлично. Я не уверен на 100%, но эффект, который, когда у меня есть оверлейное окно, такое как панель объема системы поверх окна моего приложения, подтверждает, что это имеет какое-то отношение к оверлеям.

После того, как я убедился, что все мои непрозрачные объекты действительно непрозрачные проблемы исчезли.

Смежные вопросы