xash3d-fwgs
xash3d-fwgs copied to clipboard
[Android] Чёрный экран во время смены уровня в одиночной игре
Такой баг я обнаружил на Meizu C9 Pro CPU: Spreadtrum SC9832E GPU: Mali-T820 Android 8.1.0 Oreo
На устройстве Nokia 2.2 такого бага нет Android 11 R CPU: MediaTek Helio A22 GPU: PowerVR GE8320
Почему Mali видеокарта постоянно чистка рендера похоже как gl_clear 1
Мы не указываем стратегию обновления экрана явно (на это в egl есть расширение), потому не перерисовываемый экран может выглядить как угодно (особенно на адрено, где тайлы меняются местами.
По идее можно было бы отключить перерисовку экрана в синглплеере совсем, а для мультиплеера показывать прогрессбар полноэкранно. Тут вопрос - узнаем ли мы именно в том кадре, в котором началась загрузка карты про смену карты чтобы нарисовать и карту и надпись Loading?
Исправлять это "как есть", делая скриншот перед загрузкой будет неэффективно - чтение данных из gpu происходит медлннно и например на некоторых mali чтение пикселей может занять больше секунды.
Изменение стратегии обновление экрана же может сказаться на потреблении и fps, если заставить драйвер каждый раз сохранять старый кадр - он скорее всего будет копировать весь экран. Возможно, можно временно изменить стратегию SwapBuffers? Не уверен что потом можно будет корректно вернуть оригинальную, но с этим можно поэкспериментировать
Ещё возможно было бы эффективно последний кадр отрисовать в фреймбуффер, но как и в первом случае это потребует в уже в последнем кадре знать о предстоящей загрузке.