Refactor Shiny widget and shader code to remove unused time variable; optimize shader functions by eliminating time dependency for improved performance

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-04-15 12:03:59 +02:00
parent 676da4d1ed
commit eda4a5a90c
2 changed files with 38 additions and 52 deletions
+11 -28
View File
@@ -2,7 +2,6 @@ import 'dart:async';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'shiny_controller.dart';
@@ -244,30 +243,19 @@ class Shiny extends StatefulWidget {
State<Shiny> createState() => _ShinyState();
}
class _ShinyState extends State<Shiny> with TickerProviderStateMixin {
class _ShinyState extends State<Shiny> {
static Future<ui.FragmentProgram>? _programFuture;
ui.FragmentShader? _shader;
StreamSubscription<Offset>? _tiltSub;
late final Ticker _ticker;
double _time = 0.0;
Offset _tilt = Offset.zero;
@override
void initState() {
super.initState();
_ticker = createTicker((Duration elapsed) {
if (!mounted || _shader == null) return;
setState(() {
_time = elapsed.inMicroseconds / 1000000.0;
});
});
_attachController();
if (widget.enableShader) {
_loadShader();
_ticker.start();
}
}
@@ -282,9 +270,6 @@ class _ShinyState extends State<Shiny> with TickerProviderStateMixin {
if (oldWidget.enableShader != widget.enableShader) {
if (widget.enableShader) {
if (_shader == null) _loadShader();
_ticker.start();
} else {
_ticker.stop();
}
}
}
@@ -329,7 +314,6 @@ class _ShinyState extends State<Shiny> with TickerProviderStateMixin {
@override
void dispose() {
_ticker.dispose();
_tiltSub?.cancel();
_shader?.dispose();
super.dispose();
@@ -343,17 +327,16 @@ class _ShinyState extends State<Shiny> with TickerProviderStateMixin {
..setFloat(1, bounds.height)
..setFloat(2, effectiveTilt.dx)
..setFloat(3, effectiveTilt.dy)
..setFloat(4, _time)
..setFloat(5, widget.prismatic)
..setFloat(6, widget.sparkle)
..setFloat(7, widget.specular)
..setFloat(8, widget.diffraction)
..setFloat(9, widget.style.index.toDouble())
..setFloat(10, widget.sparkleShape.kind.index.toDouble())
..setFloat(11, widget.sparkleShape.primary)
..setFloat(12, widget.sparkleShape.secondary)
..setFloat(13, widget.sparkleShape.tertiary)
..setFloat(14, widget.opacity);
..setFloat(4, widget.prismatic)
..setFloat(5, widget.sparkle)
..setFloat(6, widget.specular)
..setFloat(7, widget.diffraction)
..setFloat(8, widget.style.index.toDouble())
..setFloat(9, widget.sparkleShape.kind.index.toDouble())
..setFloat(10, widget.sparkleShape.primary)
..setFloat(11, widget.sparkleShape.secondary)
..setFloat(12, widget.sparkleShape.tertiary)
..setFloat(13, widget.opacity);
return shader;
}