import 'dart:ui' as ui; import 'package:flutter/material.dart'; class GlassShader { ui.FragmentProgram? _program; ui.FragmentShader? _shader; Future initialize() async { _program = await ui.FragmentProgram.fromAsset( 'lib/shaders/liquid_glass_lens.frag'); _shader = _program!.fragmentShader(); } ui.FragmentShader? get shader => _shader; void updateUniforms({ required Size widgetSize, required Size textureSize, required Offset widgetOffset, required double distortion, required double blur, required double dispersion, required ui.Image texture, }) { if (_shader == null) return; // uniform vec2 uResolution; // uniform float uDistortionStrength; // uniform float uBlurIntensity; // uniform float uDispersion; // uniform sampler2D uTexture; // uniform vec2 uWidgetOffset; // uniform vec2 uTextureSize; _shader!.setFloat(0, widgetSize.width); _shader!.setFloat(1, widgetSize.height); _shader!.setFloat(2, distortion); _shader!.setFloat(3, blur); _shader!.setFloat(4, dispersion); _shader!.setImageSampler(0, texture); _shader!.setFloat(5, widgetOffset.dx); _shader!.setFloat(6, widgetOffset.dy); _shader!.setFloat(7, textureSize.width); _shader!.setFloat(8, textureSize.height); } }