47 lines
1.3 KiB
Dart
47 lines
1.3 KiB
Dart
import 'dart:ui' as ui;
|
|
import 'package:flutter/material.dart';
|
|
|
|
class GlassShader {
|
|
ui.FragmentProgram? _program;
|
|
ui.FragmentShader? _shader;
|
|
|
|
Future<void> 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);
|
|
}
|
|
}
|