Skip to content

Commit d213401

Browse files
committed
Optimize setUniform to refresh ShaderPainter immediately after invocation.
1 parent ee3f708 commit d213401

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

lib/common/shader_container.dart

+6-6
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ class _ShaderContainerState extends State<ShaderContainer>
3838
with SingleTickerProviderStateMixin {
3939
Future<FragmentShader>? _loader;
4040
final Map<String, _Uniform> _uniforms = {};
41+
final ValueNotifier<int> _tick = ValueNotifier(0);
4142

4243
FragmentShader? _shader;
43-
ValueNotifier<double>? _time;
4444
Ticker? _ticker;
4545

4646
String? _shaderPath;
@@ -83,7 +83,7 @@ class _ShaderContainerState extends State<ShaderContainer>
8383
return CustomPaint(
8484
painter: _ShaderPainter(
8585
shader: snapshot.data!,
86-
repaint: _time,
86+
repaint: _tick,
8787
onPaint: _getPaintCallback()),
8888
child: widget.child);
8989
} else {
@@ -171,6 +171,7 @@ class _ShaderContainerState extends State<ShaderContainer>
171171
}
172172

173173
List<double> val = List.filled(uniform.size, 0, growable: false);
174+
_tick.value++;
174175

175176
if ((value.runtimeType == List<double>) && value.length == uniform.size) {
176177
for (int i = 0; i < val.length; i++) {
@@ -263,11 +264,10 @@ class _ShaderContainerState extends State<ShaderContainer>
263264
}
264265

265266
void _createTicker(_Uniform timeUniform) {
266-
_time = ValueNotifier(0.0);
267267
_ticker = createTicker((elapsed) {
268268
final double elapsedSeconds = elapsed.inMilliseconds / 1000;
269269
_shader?.setFloat(timeUniform.index, elapsedSeconds);
270-
_time?.value = elapsedSeconds;
270+
_tick.value++;
271271
});
272272
_updateTickerState();
273273
_ticker!.start();
@@ -284,7 +284,7 @@ class _ShaderContainerState extends State<ShaderContainer>
284284
int? timeUniform;
285285

286286
_lookupBuffer(buffer, 0, (start, line) {
287-
final List<String> split = line.split(RegExp(r"\s+"));
287+
final List<String> split = line.split(RegExp(r'\s+'));
288288

289289
if (split.length >= 3 && split[0] == 'uniform') {
290290
if (_uniforms.containsKey(split[2])) {
@@ -315,7 +315,7 @@ class _ShaderContainerState extends State<ShaderContainer>
315315

316316
if (size != null) {
317317
_lookupBuffer(buffer, start, (_, line) {
318-
final List<String> s = line.split(RegExp(r"(\s+|[-*+/(),])"));
318+
final List<String> s = line.split(RegExp(r'(\s+|[-*+/(),])'));
319319

320320
for (var i = 0; i < s.length; i++) {
321321
if (s[i] == split[2]) {

0 commit comments

Comments
 (0)