Язык шейдеров графики Android (AGSL),Язык шейдеров графики Android (AGSL)

Язык шейдинга графики Android (AGSL) используется в Android 13 и более поздних версиях для определения поведения программируемых объектов RuntimeShader . AGSL во многом разделяет свой синтаксис с фрагментными шейдерами GLSL, но работает в системе рендеринга графики Android как для настройки рисования в Canvas , так и для фильтрации содержимого View .

Теория работы

Эффекты AGSL существуют как часть более крупного графического конвейера Android. Когда Android выполняет операцию рисования с ускорением графического процессора, он собирает один фрагментный шейдер графического процессора для выполнения необходимой работы. Этот шейдер обычно включает в себя несколько частей. Например, это может включать в себя:

  • Оценка того, попадает ли пиксель внутрь или за пределы рисуемой фигуры (или на границу, где может применяться сглаживание).
  • Оценка того, попадает ли пиксель внутрь или за пределы области отсечения (опять же, с возможной логикой сглаживания для граничных пикселей).
  • Логика Shader в Paint . Шейдер на самом деле может быть деревом объектов (благодаря ComposeShader и другим функциям, описанным ниже).
  • Аналогичная логика для ColorFilter .
  • Код смешивания (для определенных типов BlendMode ).
  • Код преобразования цветового пространства как часть управления цветом Android.
  • Когда Paint имеет сложное дерево объектов в полях Shader , ColorFilter или BlendMode , все равно остается только один фрагментный шейдер графического процессора. Каждый узел в этом дереве создает одну функцию. Код обрезки и код геометрии создают функцию. Код смешивания может создать функцию. Затем общий фрагментный шейдер вызывает все эти функции (которые могут вызывать другие функции, например, в случае дерева шейдеров).

Ваш эффект AGSL добавляет функцию (или функции) во фрагментный шейдер графического процессора.

Основной синтаксис

AGSL (и GLSL) — это предметно-ориентированные языки в стиле C. Такие типы, как bool и int точно соответствуют своим эквивалентам в C; существуют дополнительные типы для поддержки векторов и матриц, поддерживающих функциональность предметной области.

Квалификаторы могут применяться к типам для получения подсказок точности уникальным способом, уникальным для языков шейдеров. Структуры управления, такие как операторы if-else работают так же, как в C; язык также обеспечивает поддержку операторов switch и for с ограничениями. Некоторые структуры управления требуют константных выражений, которые можно вычислить во время компиляции.

AGSL поддерживает функции; каждая шейдерная программа начинается с main функции. Поддерживаются пользовательские функции без поддержки какой-либо рекурсии. Функции используют соглашение о вызовах «возврат значения»; значения, передаваемые функциям, копируются в параметры при вызове функции, а выходные данные копируются обратно; это определяется квалификаторами in , out и inout .

,

Язык шейдинга графики Android (AGSL) используется в Android 13 и более поздних версиях для определения поведения программируемых объектов RuntimeShader . AGSL во многом разделяет свой синтаксис с фрагментными шейдерами GLSL, но работает в системе рендеринга графики Android как для настройки рисования в Canvas , так и для фильтрации содержимого View .

Теория работы

Эффекты AGSL существуют как часть более крупного графического конвейера Android. Когда Android выполняет операцию рисования с ускорением графического процессора, он собирает один фрагментный шейдер графического процессора для выполнения необходимой работы. Этот шейдер обычно включает в себя несколько частей. Например, это может включать в себя:

  • Оценка того, попадает ли пиксель внутрь или за пределы рисуемой фигуры (или на границу, где может применяться сглаживание).
  • Оценка того, попадает ли пиксель внутрь или за пределы области отсечения (опять же, с возможной логикой сглаживания для граничных пикселей).
  • Логика Shader в Paint . Шейдер на самом деле может быть деревом объектов (благодаря ComposeShader и другим функциям, описанным ниже).
  • Аналогичная логика для ColorFilter .
  • Код смешивания (для определенных типов BlendMode ).
  • Код преобразования цветового пространства как часть управления цветом Android.
  • Когда Paint имеет сложное дерево объектов в полях Shader , ColorFilter или BlendMode , все равно остается только один фрагментный шейдер графического процессора. Каждый узел в этом дереве создает одну функцию. Код обрезки и код геометрии создают функцию. Код смешивания может создать функцию. Затем общий фрагментный шейдер вызывает все эти функции (которые могут вызывать другие функции, например, в случае дерева шейдеров).

Ваш эффект AGSL добавляет функцию (или функции) во фрагментный шейдер графического процессора.

Основной синтаксис

AGSL (и GLSL) — это предметно-ориентированные языки в стиле C. Такие типы, как bool и int точно соответствуют своим эквивалентам в C; существуют дополнительные типы для поддержки векторов и матриц, поддерживающих функциональность предметной области.

Квалификаторы могут применяться к типам для получения подсказок точности уникальным способом, уникальным для языков шейдеров. Структуры управления, такие как операторы if-else работают так же, как в C; язык также обеспечивает поддержку операторов switch и for с ограничениями. Некоторые структуры управления требуют константных выражений, которые можно вычислить во время компиляции.

AGSL поддерживает функции; каждая шейдерная программа начинается с main функции. Поддерживаются пользовательские функции без поддержки какой-либо рекурсии. Функции используют соглашение о вызовах «возврат значения»; значения, передаваемые функциям, копируются в параметры при вызове функции, а выходные данные копируются обратно; это определяется квалификаторами in , out и inout .