🤖Kotlin DSL для AGSL-шейдеров на Android
AGSL (Android Graphics Shading Language) появился в Android 13 как нативный язык шейдеров для GPU. Работает через RuntimeShader и RenderEffect, позволяет делать попиксельные эффекты на любом View или Composable. Но писать его больно: код живёт в строках, uniform-ы привязываются вручную, IDE не помогает.
Библиотека RedByteFX оборачивает это в Kotlin DSL. Вот волновое смещение — сначала голый AGSL, потом то же самое через библиотеку:
// Голый AGSL — строка в коде
uniform shader content;
uniform float wave_amplitude;
uniform float wave_frequency;
half4 main(float2 fragCoord) {
float2 offset = float2(
0.0,
sin(fragCoord.x * wave_frequency) * wave_amplitude
);
return content.eval(fragCoord + offset);
}
// RedByteFX DSL
val effect = redbytefx {
val amplitude = uniformFloat(0f, "wave_amplitude")
val frequency = uniformFloat(0.08f, "wave_frequency")
val offset = let(
float2(0f, sin(fragCoord.x * frequency) * amplitude),
"wave_offset"
)
sample(fragCoord + offset)
}
🔗habr.com
🐱GitHub
#Android