Содержание
3D-ускорение игр и приложений #
В Репке присутствует аппаратное ускорение 3D из коробки. Вот только аппаратно поддерживается не OpenGL (настольный), а OpenGL ES (мобильный).
То есть:
- OpenGL 2.1 - поддерживается программно;
- OpenGL ES 2.0 (он же GLES2) - поддерживается аппаратно.
- OpenGL ES 3.2 (он же GLES3) -НЕ поддерживается
- Vulkan - НЕ поддерживается
- WebGL 1 - поддерживается, но с плохой производительностью (хоть это и клон GLES2).
- WebGL 2 - НЕ поддерживается (это клон GLES3)
В основном игры на Репку добываются и собираются из исходников (как по мне - рекомендуемый способ), что-то есть в репозитории.
Соответственно, ищите игры/приложения, в исходниках которых реализована поддержка GLES1 или GLES2 (чаще встретите GLES2), разумеется, если в игре/приложении в принципе используется аппаратное 3D ускорение.
Также, если поддержки GLES2 не имеется, но требуется OpenGL не новее чем 2.1 и на Репке оно хоть как-то работает, то можно попробовать запустить с помощью библиотеки GL4ES (это такой “переходник“ из OpenGL 1.x в GLES1 / OpenGL 2.1 в GLES2). С помощью данной библиотеки можно получить заметный прирост к производительности.
Сборка из исходников (если очень хочется)
Собрать и использовать GL4ES довольно просто:
-
Открываем терминал и устанавливаем зависимости
sudo apt install cmake libx11-dev -
Скачиваем с репозитория
git clone https://github.com/ptitSeb/gl4es.git -
Переходим в папку
cd gl4es -
Собираем и устанавливаем
cmake -B build -DCMAKE_INSTALL_PREFIX=/usrcd buildmake -j4sudo make install
Но проще взять и установить готовый пакет.
ВАЖНО
gl4es нам понадобится ниже в главе “Аппаратное декодирование видео“, так что имеет смысл его скачать и поставить, даже если вы в игры не играете.
Теперь чтобы запустить программу с использованием данной библиотеки просто введите в терминале: LD_LIBRARY_PATH=/usr/lib/gl4es:$LD_LIBRARY_PATH <название программы>
Аппаратное декодирование видео #
В версии прошивки от 18.04.2025 v1.1.0 разработчики что-то там пересобрали для аппаратного ускорения видео, но чтобы оно работало надо чуть-чуть донастроить, так как аппаратный декодер действительно проснулся и заработал, только на экран картинка без тормозов и багов выводиться не хочет из-за капризов GPU ARM Mali-450 MP4.
А именно:
- стандартный плеер MPV лезет в настольный OpenGL 2.1, вместо родного для Mali-450 мобильного OpenGL ES 2.0, как итог - тормоза.
- Если всё-таки заставить MPV выводить кадры из аппаратного декодера через OpenGL ES 2.0 (опцией --opengl-es=yes), то видео идет с хорошей производительностью, но мы наткнёмся на крайне неприятный баг - изображение залито красным цветом и смотреть его невозможно. Все попытки исправить цветовую палитру через разные команды приводят к транскодированию картинки силами CPU, а это сразу тормоза.
Решение - Настройка SMPlayer #
Здесь мы настроим плеер и будем запускать его через gl4es, чтобы картинка от декодера выводилась через быстрый OpenGL ES 2.0, но без бага с красным цветом.
-
Скачиваем SMPlayer (если его нет):
sudo apt install smplayer -
Открываем через gl4es (который вы скачали в предыдущей главе):
LD_LIBRARY_PATH=/usr/lib/gl4es:$LD_LIBRARY_PATH smplayer -
Переходим в Параметры → Настройки → Основные → Вкладка “Основные“ и убеждаемся что в самом верху выбрано “другое: /usr/bin/mpv“
-
Переходим в Параметры → Настройки → Основные → Вкладка “Видео“ → Устройство вывода ставим “gpu“, чуть ниже убрать все галочки, кроме “двойная буферизация“ и “подавить хранитель экрана“
-
Переходим в Быстродействие → “Потоков декодирования…“ ставим 4 (число потоков CPU Репки), затем чуть ниже “Аппаратное декодирование“ ставим “Авто” (под капотом должен подхватиться DRM в качестве декодера. DRM в данном случае - это прослойка между аппаратным видеодекодером Allwinner H5 (он же VPU) и графическим чипом Mali-450 (он же GPU), которая гонит данные напрямую из VPU в GPU, не напрягая процессор).
-
Переходим в Дополнительно → вкладка MPlayer/MPV → в “Параметры“ пишем:
--opengl-es=no(это нужно для обхода бага с красным цветом, потому что конвертацию из GL 2.1 в GLES2 берет на себя gl4es), затем жмём “Применить“ и “ОК“.
Бесполезное наблюдение
Не смотря на то, что под капотом у SMPlayer работает MPV, почему-то видео воспроизводятся адекватнее (без багов и подёргиваний) именно через SMPlayer, а не через MPV напрямую.
Далее, для удобства, можем зайти /usr/share/applications и найти там smplayer.desktop - это ярлык в меню приложений слева-сверху экрана.
Откройте ярлык как обычный текстовый файл и найдите там строку Exec=smplayer %U и замените на Exec=env LD_LIBRARY_PATH=/usr/lib/gl4es:$LD_LIBRARY_PATH smplayer %U и сохраните файл.
Теперь через меню приложений SMPlayer сразу будет открываться с помощью gl4es и внутри плеера можно будет открывать и смотреть видео, ничего заново не настраивая каждый раз.
К СВЕДЕНИЮ
А если SMPlayer сделать плеером по умолчанию (делается это почти как в windows, так что не будем тратить время на лишний текст), то можно будет открывать видео с нужными настройками просто двойным кликом по нему.
В итоге должно получиться как у меня, а именно, плавное воспроизведение и низкая нагрузка на CPU (около 25% на каждое ядро).
Все тестовые видео в 1080p (кодек h264), и почти все видео в 60 FPS (кроме последнего мультика, он в 24 FPS):
Описание видео с таймкодами и копирайтами
Использовался настроенный SMPlayer, который запущен через gl4es.
00:00:00 - Big Buck Bunny (1080p 60fps h264)
(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org Лицензия: CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/)*
00:00:34 - моя тестовая запись геймплея TR: Legend (1080p 60fps h264)
00:01:36 - Sintel (1080p 24fps h264)
(c) copyright Blender Foundation | durian.blender.org Лицензия: CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/)*
*В видеоролике использованы отдельные фрагменты оригинальных материалов для проведения технического теста.
Странный баг, но не мешает.
При перемотке видео, у меня нагрузка могла подскочить аж до 80% и не падать, но видео при этом всё равно не тормозило.
ПРЕДУПРЕЖДЕНИЕ
Если после нескольких просмотров видео подряд (или запуска 4К-видео) экран начал дико моргать и, если открывали плеер через терминал, посыпались ошибки “Cannot allocate memory“, то не переживайте. Просто закончился выделенный видеобуфер (он же CMA), которого очень мало и он не хочет сам очищаться.
Вот патч с инструкцией внутри, который сильно сглаживает эту проблему (протестировано на репке с 2 ГБ ОЗУ, как оно поведёт себя на репке с 1ГБ ОЗУ я не знаю).
Браузеры #
Кратко - забудьте.
Подробно:
Из современных версий Firefox и Chromium убрали поддержку GLES2, так что сами браузеры работают исключительно в программном режиме, но:
- В Chromium (на данный момент это версии 151+) аппаратно не работает больше вообще ничего, даже WebGL 1.
- Firefox сам работает программно, но WebGL 1 ещё как-то пытается запускать.
- Про аппаратное декодирование видео при просмотре в браузере (то есть на VK Video, RUTUBE и так далее…) и речи быть не может. Это всё ложится на CPU с большими тормозами.
Так что, теперь это просто читалки/качалки для не слишком тяжелых текстовых сайтов/файлообменников.