didvan-app/lib/views/widgets/glass/glass_logic.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);
}
}