Skip to content

Commit 642eb04

Browse files
committed
feat: add CommonShaderBuilder and integrate Breathing Point shader
1 parent 456f9f7 commit 642eb04

File tree

7 files changed

+72
-97
lines changed

7 files changed

+72
-97
lines changed
171 KB
Loading

lib/clearly_bug_shader_builder.dart

Lines changed: 0 additions & 60 deletions
This file was deleted.
Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import 'package:flutter/material.dart';
2+
import 'package:flutter_shaders/flutter_shaders.dart';
3+
import 'package:google_fonts/google_fonts.dart';
24
import 'dart:ui';
35
import 'shader_builder.dart';
46

5-
class AiAssistantShaderBuilder extends CustomShaderBuilder {
6-
const AiAssistantShaderBuilder();
7+
class CommonShaderBuilder extends CustomShaderBuilder {
8+
const CommonShaderBuilder();
79

810
@override
911
bool get requiresImageSampler => false;
@@ -27,11 +29,17 @@ class AiAssistantShaderBuilder extends CustomShaderBuilder {
2729
double time,
2830
Widget? child,
2931
) {
30-
return ClipRect(
31-
child: CustomPaint(
32-
size: Size.infinite,
33-
painter: _AiAssistantShaderPainter(shader),
34-
),
32+
return AnimatedSampler(
33+
(image, size, canvas) {
34+
if (requiresImageSampler) {
35+
shader.setImageSampler(0, image);
36+
}
37+
canvas.drawRect(
38+
Rect.fromLTWH(0, 0, size.width, size.height),
39+
Paint()..shader = shader,
40+
);
41+
},
42+
child: child ?? const SizedBox.expand(),
3543
);
3644
}
3745

@@ -40,20 +48,3 @@ class AiAssistantShaderBuilder extends CustomShaderBuilder {
4048
return null;
4149
}
4250
}
43-
44-
class _AiAssistantShaderPainter extends CustomPainter {
45-
final FragmentShader shader;
46-
47-
_AiAssistantShaderPainter(this.shader);
48-
49-
@override
50-
void paint(Canvas canvas, Size size) {
51-
canvas.drawRect(
52-
Rect.fromLTWH(0, 0, size.width, size.height),
53-
Paint()..shader = shader,
54-
);
55-
}
56-
57-
@override
58-
bool shouldRepaint(covariant CustomPainter oldDelegate) => true;
59-
}

lib/main.dart

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,14 @@ import 'package:shaders/widgets/shader_card.dart';
88
import 'package:shaders/widgets/widgets.dart';
99
import 'package:shaders/meta/meta_tag_manager.dart';
1010

11+
import 'common_shader_builder.dart';
1112
import 'shader_builder.dart';
1213
import 'crt_shader_builder.dart';
13-
import 'clearly_bug_shader_builder.dart';
1414
import 'noise_overlay_shader_builder.dart';
1515
import 'noise_shader_builder.dart';
1616
import 'ntsc_shader_builder.dart';
1717
import 'rings_shader_builder.dart';
1818
import 'shader_screen.dart';
19-
import 'ai_assistant_shader_builder.dart';
2019
import 'branded_ai_assistant_shader_builder.dart';
2120

2221
void main() {
@@ -120,8 +119,9 @@ final shaders = [
120119
sourceUrl: 'https://www.shadertoy.com/view/33cGDj',
121120
author: 'mrange',
122121
dateAdded: DateTime(2025, 7, 29),
123-
builder: const ClearlyBugShaderBuilder(),
122+
builder: const CommonShaderBuilder(),
124123
path: 'clearly-bug-shader',
124+
backgroundColor: Colors.black,
125125
),
126126
ShaderInfo(
127127
name: 'AI Assistant',
@@ -130,7 +130,7 @@ final shaders = [
130130
sourceUrl: 'https://www.shadertoy.com/view/MXsyzl',
131131
author: 'Saphirah',
132132
dateAdded: DateTime(2025, 8, 21),
133-
builder: const AiAssistantShaderBuilder(),
133+
builder: const CommonShaderBuilder(),
134134
path: 'ai-assistant',
135135
padding: EdgeInsets.all(32),
136136
backgroundColor: Colors.black,
@@ -148,6 +148,18 @@ final shaders = [
148148
backgroundColor: Colors.black,
149149
aspectRatio: 1,
150150
),
151+
ShaderInfo(
152+
assetKey: 'shaders/breathing_point.frag',
153+
name: 'Breathing Point',
154+
description: 'A calming shader that simulates breathing.',
155+
sourceUrl: 'https://www.shadertoy.com/view/4dXyWN',
156+
author: 'User5518',
157+
dateAdded: DateTime(2025, 8, 21),
158+
builder: const CommonShaderBuilder(),
159+
path: 'breathing-point',
160+
backgroundColor: Colors.black,
161+
aspectRatio: 1,
162+
),
151163
];
152164

153165
// Helper function to create URL-safe shader names

lib/ntsc_shader_builder.dart

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,18 @@ class NtscShaderBuilder extends CustomShaderBuilder {
2323
double time,
2424
Widget? child,
2525
) {
26-
return AnimatedSampler((image, size, canvas) {
27-
if (requiresImageSampler) {
28-
shader.setImageSampler(0, image);
29-
}
30-
canvas.drawRect(
31-
Rect.fromLTWH(0, 0, size.width, size.height),
32-
Paint()..shader = shader,
33-
);
34-
}, child: child ?? const SizedBox());
26+
return AnimatedSampler(
27+
(image, size, canvas) {
28+
if (requiresImageSampler) {
29+
shader.setImageSampler(0, image);
30+
}
31+
canvas.drawRect(
32+
Rect.fromLTWH(0, 0, size.width, size.height),
33+
Paint()..shader = shader,
34+
);
35+
},
36+
child: child ?? const SizedBox(),
37+
);
3538
}
3639

3740
@override

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,4 @@ flutter:
5151
- shaders/clearly_bug_shader.frag
5252
- shaders/ai_assistant.frag
5353
- shaders/branded_ai_assistant.frag
54+
- shaders/breathing_point.frag

shaders/breathing_point.frag

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#version 460 core
2+
precision mediump float;
3+
4+
#include <flutter/runtime_effect.glsl>
5+
6+
uniform vec2 iResolution;
7+
uniform float iTime;
8+
9+
out vec4 fragColor;
10+
11+
void main()
12+
{
13+
vec2 fragCoord = FlutterFragCoord().xy;
14+
vec2 uv = (fragCoord - .5* iResolution.xy ) / iResolution.y; // Thanks @FabriceNeyret2 for this refactored line.
15+
// Old code:
16+
// vec2 uv = fragCoord.xy / iResolution.xy; // 0 <> 1.
17+
// uv -= .5; // -0.5 <> 0.5
18+
// uv.x *= iResolution.x/iResolution.y;
19+
20+
float d = length(uv);
21+
float ti = iTime;
22+
float r = 0.3;
23+
24+
float x = (r*(cos(ti*2.0)+1.0)/2.0)+0.001;
25+
float c = smoothstep(r, r-x, d);
26+
27+
fragColor = vec4(vec3(c), 1.0);
28+
}

0 commit comments

Comments
 (0)