2D- и 3D-рендеринг
Инструменты Android охватывают обычный интерфейс на Compose или View, собственную отрисовку, шейдеры и 3D-движки. Выбирай самый простой инструмент, который покрывает требования к изображению и взаимодействию, а результат проверяй на целевых устройствах.
Выбор инструмента
Работа CPU и GPU
В создании большинства кадров участвуют оба процессора. CPU выполняет логику приложения, компоновку и подготовку команд рисования; GPU может растеризовать и собрать итоговое изображение. Canvas - API рисования, а не синоним рендеринга на CPU: аппаратно ускоренный Canvas в View или Compose использует GPU, тогда как рисование в программный Bitmap идёт другим путём.
Долгая компоновка, вычисления или код рисования в главном потоке указывают на возможное узкое место на стороне CPU. Сложные шейдеры, избыточная отрисовка, большие текстуры и тяжёлые 3D-сцены могут нагружать GPU. Передачи данных и синхронизация тоже задерживают кадры. Сначала найди реальную причину с помощью трассировки и профилирования кадров.
Когда использовать Canvas
Android Canvas подходит для собственной 2D-графики внутри обычного интерфейса: диаграмм, индикаторов прогресса, линий, подписей, звуковых волн и декоративных форм. В Compose Canvas и модификаторы рисования предоставляют DrawScope; в системе View собственная отрисовка обычно выполняется в onDraw().
Не выполняй в каждом кадре лишние выделения памяти, декодирование bitmap и тяжёлые вычисления. invalidate() запрашивает перерисовку; requestLayout() нужен при изменении размеров или требований к размещению. Для аппаратного ускорения Canvas не требуется собственный рендерер на OpenGL ES.
Когда использовать AGSL
AGSL и RuntimeShader дают программируемые пиксельные эффекты внутри системы рендеринга интерфейса Android. Они подходят для градиентов, искажений, переходов и локальных фильтров. RuntimeShader требует Android 13 (API 33), поэтому для более старых поддерживаемых устройств нужен другой вариант. AGSL не предоставляет конвейер геометрии или 3D-сцену.
Когда использовать OpenGL ES
OpenGL ES полезен, если приложению нужен собственный GPU-конвейер с геометрией, текстурами и шейдерами: например, особый рендерер, эффект камеры или анимированная визуализация. Придётся управлять буферами, шейдерными программами, матрицами и жизненным циклом поверхности. Используй его, когда такой контроль оправдывает сложность реализации.
Когда использовать Vulkan
Vulkan даёт более явный контроль над ресурсами, отправкой команд и синхронизацией. Он может снизить нагрузку на CPU со стороны драйвера в сложном рендерере, но увеличивает стоимость разработки и проверки совместимости устройств. Измеряй производительность своей задачи и проверяй возможности устройства: сам выбор Vulkan не гарантирует более плавные кадры.
Когда использовать Filament
Google Filament предоставляет модель 3D-сцены в реальном времени: камеры, отображаемые объекты, PBR-материалы, освещение и поддержку ассетов glTF. Он подходит для просмотра моделей, демонстрации товаров, конфигураторов и интерактивной 3D-визуализации, когда писать рендерер с нуля нет необходимости. При этом нужно управлять жизненным циклом поверхности и ресурсов, размером ассетов и временем кадра.
Для обычных экранов и простой 2D-анимации начинай с Compose, Views и их API рисования. Переходи к низкоуровневому API или 3D-движку, когда этого требуют сцена, эффекты или измеренная производительность.