@@ -22,6 +22,7 @@ uniform float size_div;
22
22
uniform float far_grain;
23
23
uniform float close_grain;
24
24
uniform float blur_size;
25
+ uniform vec2 spawn;
25
26
uniform vec2 start;
26
27
uniform vec2 size;
27
28
@@ -32,19 +33,12 @@ uniform vec3 g1_clr;
32
33
uniform vec3 g2_clr;
33
34
uniform vec3 g3_clr;
34
35
35
- vec2 skew (vec2 st) {
36
- vec2 r = vec2(0.0);
37
- r.x = 1.1547*st.x;
38
- r.y = st.y+0.5*r.x;
39
- return r;
40
- }
41
-
42
36
float rand(vec2 co) {
43
37
highp float a = 12.9898;
44
38
highp float b = 78.233;
45
39
highp float c = 43758.5453;
46
- highp float dt= dot(co.xy , vec2(a,b));
47
- highp float sn= mod(dt,3.14);
40
+ highp float dt = dot(co.xy, vec2(a, b));
41
+ highp float sn = mod(dt, 3.14);
48
42
return fract(sin(sn) * c);
49
43
}
50
44
@@ -82,6 +76,7 @@ float lerp(float a, float b, float t) {
82
76
}
83
77
84
78
vec3 get_uv_clr (vec2 uv) {
79
+ uv = uv + spawn.xy;
85
80
float shift_len = pow(rand(uv.xy*20.0), 10.) * far_grain;
86
81
float shift_angle = pow(rand(uv.xy*10.0), 3.) * PI * 2.0;
87
82
vec2 shift = vec2(cos(shift_angle), sin(shift_angle)) * shift_len;
@@ -92,9 +87,9 @@ vec3 get_uv_clr (vec2 uv) {
92
87
93
88
uv = uv + shift2 + shift;
94
89
95
- float n1 = distance(uv.xy, g1_coords) + snoise(vec2(uv.x * -1.0, uv.y)) * 0.3;
96
- float n2 = distance(uv.xy, g2_coords) + snoise(vec2(uv.x, uv.y * -1.0)) * 0.3;
97
- float n3 = distance(uv.xy, g3_coords) + snoise(vec2(uv.x, uv.y)) * 0.3;
90
+ float n1 = distance(uv.xy, g1_coords + spawn.xy ) + snoise(vec2(uv.x * -1.0, uv.y)) * 0.3;
91
+ float n2 = distance(uv.xy, g2_coords + spawn.xy ) + snoise(vec2(uv.x, uv.y * -1.0)) * 0.3;
92
+ float n3 = distance(uv.xy, g3_coords + spawn.xy ) + snoise(vec2(uv.x, uv.y)) * 0.3;
98
93
99
94
float min_n = min(n1, min(n2, n3));
100
95
vec3 closest_clr = vec3(0.0);
@@ -113,7 +108,7 @@ vec3 get_uv_clr (vec2 uv) {
113
108
void main() {
114
109
vec2 uv = vec2((gl_FragCoord.x - start.x) / size.x, gl_FragCoord.y / size.y);
115
110
uv.x = uv.x * size_div;
116
- uv.xy = uv.xy * 0.9;
111
+ uv = uv.xy * 0.9;
117
112
118
113
vec3 c2 = get_uv_clr(uv.xy + vec2(blur_size, 0));
119
114
vec3 c3 = get_uv_clr(uv + vec2(-blur_size, 0));
@@ -141,7 +136,6 @@ void main() {
141
136
vec3 clr4 = mix(mix(c14, c15, 0.5), mix(c16, c17, 0.5), 0.5);
142
137
143
138
gl_FragColor = vec4((clr1 + clr2 + clr3 + clr4) / 4.0, 1.0);
144
- // gl_FragColor = vec4(uv.x, uv.x, uv.x, 1.0);
145
139
}
146
140
` ;
147
141
@@ -187,7 +181,6 @@ export function drawGradients(
187
181
188
182
const initStart = performance . now ( ) ;
189
183
const rects = subcanvases . length ;
190
- // const mainCanvas = new OffscreenCanvas(w * rects, h);
191
184
const mainCanvas = subcanvases [ 0 ] ;
192
185
const gl = mainCanvas . getContext ( "webgl" ) ! ;
193
186
@@ -240,6 +233,7 @@ export function drawGradients(
240
233
const far_grain = gl . getUniformLocation ( progDraw , "far_grain" ) ;
241
234
const close_grain = gl . getUniformLocation ( progDraw , "close_grain" ) ;
242
235
const size = gl . getUniformLocation ( progDraw , "size" ) ;
236
+ const spawn = gl . getUniformLocation ( progDraw , "spawn" ) ;
243
237
const start = gl . getUniformLocation ( progDraw , "start" ) ;
244
238
const g1_clr = gl . getUniformLocation ( progDraw , "g1_clr" ) ;
245
239
const g1_coords = gl . getUniformLocation ( progDraw , "g1_coords" ) ;
@@ -286,6 +280,7 @@ export function drawGradients(
286
280
gl . DYNAMIC_DRAW ,
287
281
) ;
288
282
283
+ // gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
289
284
gl . enableVertexAttribArray ( inPos ) ;
290
285
gl . vertexAttribPointer ( inPos , 2 , gl . FLOAT , false , 0 , 0 ) ;
291
286
@@ -300,6 +295,7 @@ export function drawGradients(
300
295
gl . uniform1f ( far_grain , 0.3 ) ; // grain for inner parts of shapes
301
296
gl . uniform1f ( close_grain , 0.09 ) ; // grain for smoothing shapes between lines
302
297
gl . uniform2f ( size , w , h ) ;
298
+ gl . uniform2f ( spawn , Math . random ( ) * 3.0 , Math . random ( ) * 3.0 ) ;
303
299
gl . uniform2f ( start , w * rectNum , h ) ;
304
300
gl . uniform3f ( g1_clr , ...g1 . clr ) ;
305
301
gl . uniform2f ( g1_coords , ...g1 . coords ) ;
@@ -314,19 +310,10 @@ export function drawGradients(
314
310
gl . drawElements ( gl . TRIANGLES , inx . length , gl . UNSIGNED_SHORT , 0 ) ;
315
311
log ( `draw took ${ performance . now ( ) - drawStart } ms` ) ;
316
312
317
- // const copyStart = performance.now();
318
- // const subcanvas = subcanvases[rectNum];
319
- // subcanvas
320
- // .getContext("2d", { alpha: false })!
321
- // .drawImage(mainCanvas, w * rectNum, 0, w, h, 0, 0, w, h);
322
- // log(`copy took ${performance.now() - copyStart} ms`);
323
-
324
313
gl . deleteBuffer ( bufObj . pos ) ;
325
314
gl . deleteBuffer ( bufObj . inx ) ;
326
315
}
327
316
328
- // mainCanvas.width = 1;
329
- // mainCanvas.height = 1;
330
317
gl . deleteShader ( vertShader ) ;
331
318
gl . deleteShader ( fragShader ) ;
332
319
gl . deleteProgram ( progDraw ) ;
0 commit comments