Включите OpenGL Skies для лучшей производительности в Android-играх
Включите OpenGL Skies для лучшей производительности в Android-играх
Включите OpenGL Skia для лучшей производительности в играх и интерфейсе Android
Игры на мобильных платформах (Android и iOS) достигли невероятного роста всего за несколько лет. Если сначала игры были довольно простыми, как, например, 80 PC, эти игры стали чрезвычайно сложными.
Игры на Android или iOS почти такие же, как на вашем ПК или консолях.
Поскольку игры на мобильных устройствах в настоящее время очень сложны, потребление ресурсов также увеличилось. Если у топ-телефонов нет проблем с запуском последних названий, более старые устройства в значительной степени нахмурились от резких изображений, которые приводят к неприятному опыту.
У большинства геймеров нет самых горячих телефонов.
Поскольку не у всех есть лучшие телефоны, Google нашел решение предложить небольшое повышение производительности тем, у кого слабые телефоны. Этот параметр повышает производительность игр при условии, что у нас есть ОС Oreo Android или новее. В старых версиях Android этот параметр недоступен.
Переход от графического движка OpenGL к OpenGL Skia.
Графический движок OpenGL Skia можно активировать с помощью:
Настройки / Параметры разработчика / Воспроизведение с аппаратным ускорением / Установка графического процессора… / выберите OpenGL Skia здесь
Бонус, Настройки кэша и Ускорение скорости интерфейса.
За исключением настройки, которая активирует графический движок OpenGL Skia, есть два важных параметра, которые заставят ваш Android двигаться быстрее.
1. Очистить кеш из: Настройки телефона / Хранение и память / Данные кэширования. Кэшированные данные больше не полезны, поэтому вы можете удалить их без проблем.
2. Увеличьте скорость анимации и переход окон из: Параметры разработчика / Рисование / Масштаб анимации . Масштаб перехода . Масштаб длительности . установите их все на 0,5 или отключите анимацию, но все будет двигаться слишком резко, если вы отключите его; Я думаю, что 0,5 идеально.
Учебники нравится:
Ускоряем свой смартфон Xiaomi

Смартфоны от фирмы Xiaomi работают быстро не только первое время после покупки, но даже после двух лет использования сохраняют свою производительность. Такие результаты достигаются за счёт «железа» и в особенности ПО. Ведь с предустановленными программами на смартфоне Xiaomi всегда можно запустить очистку системы от ненужных файлов, очистить кэши, оптимизировать системные настройки и MIUI всегда следит за актуальностью установленных приложений.
Делается это в «Настройках» — разделе «О телефоне», тут нам нужно семь раз в поле «Версия MIUI». После этого возвращаемся в «Настройки» — «Расширенные настройки» — «Для разработчиков».
В этом меню нужно выбрать пункт «Средство визуализации» и в нем выставить OpenGL Skia.
Читают Коментируют
Студентку вуза на Всероссийском экономическом собрании наградил Фонд Юрия Лужкова
ГК «КОРТРОС» внедрила в Москве систему доступа в здание по BLE и Face ID
Как умное строительство может сделать жилье доступней
Российский IT-эксперт рассказала о трендах в сфере информационных технологий на 2024 год
Журналистам из регионов РФ показали возможности медицинского туризма в Северную столицу
Артисты культурно-патриотического центра АНО «Армия и культура» выступили перед участниками СВО в Луганске
Инвалиды по зрению помогают бойцам СВО
Сколько ядер / потоков в вашем процессоре?
© 2015-2020 Все права защищены.
Любое копирование, в т.ч. отдельных частей текстов или изображений, публикация и републикация, перепечатка или любое другое распространение информации, в какой бы форме и каким бы техническим способом оно не осуществлялось, разрешено только при наличии открытой для поисковых систем гиперссылки на ProstoTECH.com.
OpenGL в смартфонах — что это и зачем нужно?
Принцип работы и применение технологии OpenGL ES 2.0.
Сейчас трехмерные изображения стали привычными. Чаще всего они встречаются в фильмах со специальными эффектами, компьютерных и мобильных играх. На заре становления компьютерной графики не существовало единого стандарта, и все программы создавались практически «с нуля», на основе своих методов отображения графической информации.
Позже, когда трехмерная графика стала доступной не только для суперокомпьютеров, но и для обычных ПК, появилась насущная потребность в едином стандарте в области графики. Одним из них и стал OpenGL (Open Graphics Library — «открытая графическая библиотека»). На сегодня это один из самых популярных графических стандартов в мире.
OpenGL основан на графической библиотеке IRIS GL, созданной компанией Silicon Graphics. Стандарт был разработан и утвержден в 1992 году целой группой крупнейших разработчиков, в число которых вошли Silicon Graphics, IBM Corporation, Microsoft, Hewlett-Packard Corporation, Sun Microsystems, Intel Corporation, Evans & Sutherland и другие.

Технология OpenGL в телефонах
OpenGL — спецификация, благодаря которой мобильные устройства получили возможность отображать графику уровня игровых приставок. Стандарт включает более 300 функций для отрисовки сложных трехмерных сцен. Он относится к открытым спецификациям, что позволяет написанные с его помощью программы портировать на любые платформы. При этом результат будет одинаковым, будь это мощный профессиональный компьютер или обычный смартфон.
OpenGL позволяет получить на смартфоне более быструю и плавную работу интерфейса, а также высокую производительностью в 3D-приложениях, в том числе и в играх. В современных смартфонах используется версия OpenGL ES 2.0.
Данную опцию можно включить на мобильном устройстве через режим разработчика. Для этого нужно войти в «Настройках» в раздел «О телефоне» и 7 раз подряд нажать по надписи с версией операционной системы или по версии сборки (в зависимости от производителя). Далее нужно найти в разделе «Для разработчиков» опцию 4X MSAA. Если ее включить, активируется четырехкратное сглаживание в технологии OpenGL ES 2.0. Это улучшит качество графики на смартфоне, но приведет к более быстрой разрядке аккумулятора.

Стандарт OpenGLв смартфонах позволяет значительно повышать качество графики в приложениях и играх. Минус этой спецификации — высокая нагрузка на системные ресурсы и батарею устройства.
Рекомендуем почитать:
- Видеокарты и видеоускорители в смартфонах — что это и как работает?
- Датчик LiDAR — что это и зачем нужен этот сканер?
- Телефонный ассистент Яндекса — что это и зачем нужно?
- AppGallery — что это за магазин приложений и зачем он нужен?
- Обзор Huawei MateBook 16s (2023): рабочий ноутбук с топовыми характеристиками
Как создать анимированные шейдеры в Jetpack Compose
Jetpack Compose — молодой, но бурно развивающийся фреймворк для разработки под Android, который обладает множеством не всегда очевидных фичей. Сегодня я хотел бы описать одну из таких встроенных возможностей: речь идет об использовании OpenGL-шейдеров. Они позволяют делать красивые анимированные интерфейсы, как на картинке ниже.
Я написал это приложение не просто на Jetpack Compose, а на Compose Multiplatform, поэтому вместе с мобильной версией у нас должна получиться аналогичная десктопная:
В качестве основы дизайна для приложения возьмем первый попавшийся проект с Figma. Мне было не важно, как именно будет выглядеть приложение, потому что его основная цель — показать работу шейдеров. По этой же причине я опущу подробности написания простенького кода с текстом и полем для ввода мыла. Полную версию кода всегда можно почитать в репозитории.
Итак, перейдем к шейдерам. Изложенный ниже способ позволяет применить их как фон к любому Composable UI-элементу. Для этого создадим функцию-расширение, применяющую шейдер, и назовем ее Modifier.shaderEffect() .
Чтобы функция работала, нужен а) шейдер на OpenGL и б) код на Kotlin, который запускает этот шейдер. Начнем с первого. Я взял уже имеющийся шейдер, классическую старую как мир анимацию с облаками, которая даже на моем Pixel 7 выдает 90 fps. Чтобы было удобно работать и линтер Intellij Idea подсветил код на другом языке в .kt файле, добавим аннотацию @Language перед строкой:
@Language("GLSL") const val compositeSksl = """ // Параметры шейдера uniform float3 iResolution; // Viewport resolution (pixels) uniform float iTime; // Shader playback time (s) // Тело шейдера . """
Полностью код шейдера приводить не буду: в его копипасте с ShaderToy заслуга невелика. Для нас важнее другое. Создадим саму функцию, рисующую шейдер:
@RequiresApi(Build.VERSION_CODES.TIRAMISU) actual fun Modifier.shaderEffect(): Modifier = composed < val time by produceState(0f) < while (true) < withInfiniteAnimationFrameMillis < value = it / 1000f >> > Modifier.drawWithCache < val shader = RuntimeShader(compositeSksl) val shaderBrush = ShaderBrush(shader) shader.setFloatUniform("iResolution", size.width, size.height) shader.setFloatUniform("iTime", time) onDrawBehind < drawRect(shaderBrush) >> >
Что здесь происходит? produceStateOf запускает отдельную корутину (side-effect), в которой будет отсчитываться текущее время шейдера. withInfiniteAnimationFrameMillis запускает бесконечную покадровую анимацию, результат этой анимации записывается в produceState .
drawWithCache позволяет не только рисовать что-либо, но и кэшировать значения переменных внутри функции. Это дает нам возможность оптимизировать выделение памяти под наши объекты. Параметры в шейдер передаем при помощи setFloatUniform, причем внимательно следим за типами данных: в таком интеропе, к сожалению, нет compile-time проверки, что в float передан один ключ, а в float2 — два ключа.
Что касается десктопной версии, она будет отличаться, но незначительно. Код самого шейдера останется тем же, но за рендер будет отвечать десктопная обертка Skiko (Skia for Kotlin):
actual fun Modifier.shaderEffect(): Modifier = composed < val time by produceState(0f) < while (true) < withInfiniteAnimationFrameMillis < value = it / 1000f >> > Modifier.drawWithCache < val effect = RuntimeEffect.makeForShader(compositeSksl) val compositeShaderBuilder = RuntimeShaderBuilder(effect) compositeShaderBuilder.uniform( name = "iResolution", value1 = size.width, value2 = size.height ) compositeShaderBuilder.uniform( "iTime", time ) val shaderBrush = ShaderBrush(compositeShaderBuilder.makeShader()) onDrawBehind < drawRect(shaderBrush) >> >
Вот и все, наш шейдер бодро рисует высокое голубое небо с плывущими по нему белыми облаками во весь интерфейс. В принципе, можно поиграть с разными вариантами и закинуть в наш рендерер практически любой шейдер. Единственное, стоит помнить, что сложные шейдеры с множеством визуальных эффектов могут тормозить, особенно на мобилке, и снижение fps скажется на всем интерфейсе приложения.
Я поигрался со своим пет-проектом и запустил еще шейдер с горой Фудзи в стиле киберпанк. Возможно, вам захочется поставить на фон что-то свое, не ограничивайте полет фантазии!


UPD: в приложении появилась возможность выбирать один шейдер из трех прямо из интерфейса:
