У меня есть графический глюк, связанный с смешиванием в моем приложении OpenGL с использованием Android NDK.Выход adb screencap отличается от устройства
Странная вещь: когда я снимаю снимок экрана с помощью команды adb screencap
, проблема полностью исчезает, и результат выглядит нормально.
Мой вопрос: Есть ли способ узнать, что происходит за кулисами создания скриншотов? Есть ли eglChooseConfig
, вызываемый с определенными значениями для всего кадра, например? Или, может быть, возникает какое-то определенное начальное состояние GL?
Некоторые фона:
Мое устройство использует Qualcomm Adreno 320.
glich происходит, когда я звоню glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
для некоторых из геометрии.
Я также обнаружил, что настройка glColorMask(1, 1, 1, 0)
приводит к черному экрану на моем устройстве (и только на этом устройстве), в то время как при съемке скриншотов получается полная правильная игровая рамка.
Приложение не выводит глюков на несколько других устройств Android, а другие приложения работают хорошо, даже те, которые широко используются для смешивания.
FWIW, Grafika выбирает альфа-размер как 8 (https://github.com/google/grafika/blob/master/src/com/android/grafika/gles/EglCore.java#L144), и я никогда не видел ничего странного. Я бы предположил, что большинство приложений GLES используют эту конфигурацию (32-разрядный RGBA). Код захвата экрана объединяет выводимый вывод, и я бы не ожидал, что конфигурация EGL, используемая для blitting, будет иметь эффект «фиксации» рендеринга. Так что это очень интересная точка данных, но я подозреваю, что в ней есть что-то большее. Возможно, стоит восстановить альфа-размер и добавить 'EGL_RENDERABLE_TYPE', чтобы узнать, не изменилось ли это. – fadden
Правильно - я не думал об этих других переменных конфигурации. Хотя, я пробовал точно все 9 конфигураций с EGL_ALPHA_SIZE без комментирования, и все они приводили неверные результаты. Я не думаю, что решение этой тайны стоит приложить усилия, это, скорее всего, одна из ошибок драйверов, которые, как известно, имеют эти модели, и этот даже не поддерживает glBlendFuncSeparate (!) –