System.put_env("SKIA_EX_BUILD", "1") Mix.install([ {:rustler, "~> 0.38.0", runtime: false}, {:rustq, "~> 0.5", runtime: false}, {:skia, path: Path.expand("..", __DIR__)} ]) shader = Skia.Shader.sksl!( """ uniform shader child; uniform float time; uniform vec2 resolution; uniform int enabled; half4 main(vec2 p) { vec2 uv = p / resolution; half4 base = child.eval(p); float wave = 0.5 + 0.5 * sin(time + uv.x * 24.0); return enabled == 1 ? half4(base.r * wave, base.g, uv.y, base.a) : base; } """, uniforms: %{ time: 1.4, resolution: {240, 140}, enabled: Skia.RuntimeEffect.int(1) }, children: %{ child: Skia.Shader.linear_gradient({0, 0}, {240, 0}, [:red, :blue]) } ) doc = Skia.canvas(240, 140) |> Skia.clear("#111827") |> Skia.rect(x: 0, y: 0, width: 240, height: 140, fill: shader) {:ok, png} = Skia.to_png(doc) File.write!("runtime_effects.png", png)