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:
+11
-28
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user