@@ -22,6 +22,7 @@ uniform float size_div;
2222uniform float far_grain;
2323uniform float close_grain;
2424uniform float blur_size;
25+ uniform vec2 spawn;
2526uniform vec2 start;
2627uniform vec2 size;
2728
@@ -32,19 +33,12 @@ uniform vec3 g1_clr;
3233uniform vec3 g2_clr;
3334uniform vec3 g3_clr;
3435
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-
4236float rand(vec2 co) {
4337 highp float a = 12.9898;
4438 highp float b = 78.233;
4539 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);
4842 return fract(sin(sn) * c);
4943}
5044
@@ -82,6 +76,7 @@ float lerp(float a, float b, float t) {
8276}
8377
8478vec3 get_uv_clr (vec2 uv) {
79+ uv = uv + spawn.xy;
8580 float shift_len = pow(rand(uv.xy*20.0), 10.) * far_grain;
8681 float shift_angle = pow(rand(uv.xy*10.0), 3.) * PI * 2.0;
8782 vec2 shift = vec2(cos(shift_angle), sin(shift_angle)) * shift_len;
@@ -92,9 +87,9 @@ vec3 get_uv_clr (vec2 uv) {
9287
9388 uv = uv + shift2 + shift;
9489
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;
9893
9994 float min_n = min(n1, min(n2, n3));
10095 vec3 closest_clr = vec3(0.0);
@@ -113,7 +108,7 @@ vec3 get_uv_clr (vec2 uv) {
113108void main() {
114109 vec2 uv = vec2((gl_FragCoord.x - start.x) / size.x, gl_FragCoord.y / size.y);
115110 uv.x = uv.x * size_div;
116- uv.xy = uv.xy * 0.9;
111+ uv = uv.xy * 0.9;
117112
118113 vec3 c2 = get_uv_clr(uv.xy + vec2(blur_size, 0));
119114 vec3 c3 = get_uv_clr(uv + vec2(-blur_size, 0));
@@ -141,7 +136,6 @@ void main() {
141136 vec3 clr4 = mix(mix(c14, c15, 0.5), mix(c16, c17, 0.5), 0.5);
142137
143138 gl_FragColor = vec4((clr1 + clr2 + clr3 + clr4) / 4.0, 1.0);
144- // gl_FragColor = vec4(uv.x, uv.x, uv.x, 1.0);
145139}
146140` ;
147141
@@ -187,7 +181,6 @@ export function drawGradients(
187181
188182 const initStart = performance . now ( ) ;
189183 const rects = subcanvases . length ;
190- // const mainCanvas = new OffscreenCanvas(w * rects, h);
191184 const mainCanvas = subcanvases [ 0 ] ;
192185 const gl = mainCanvas . getContext ( "webgl" ) ! ;
193186
@@ -240,6 +233,7 @@ export function drawGradients(
240233 const far_grain = gl . getUniformLocation ( progDraw , "far_grain" ) ;
241234 const close_grain = gl . getUniformLocation ( progDraw , "close_grain" ) ;
242235 const size = gl . getUniformLocation ( progDraw , "size" ) ;
236+ const spawn = gl . getUniformLocation ( progDraw , "spawn" ) ;
243237 const start = gl . getUniformLocation ( progDraw , "start" ) ;
244238 const g1_clr = gl . getUniformLocation ( progDraw , "g1_clr" ) ;
245239 const g1_coords = gl . getUniformLocation ( progDraw , "g1_coords" ) ;
@@ -286,6 +280,7 @@ export function drawGradients(
286280 gl . DYNAMIC_DRAW ,
287281 ) ;
288282
283+ // gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
289284 gl . enableVertexAttribArray ( inPos ) ;
290285 gl . vertexAttribPointer ( inPos , 2 , gl . FLOAT , false , 0 , 0 ) ;
291286
@@ -300,6 +295,7 @@ export function drawGradients(
300295 gl . uniform1f ( far_grain , 0.3 ) ; // grain for inner parts of shapes
301296 gl . uniform1f ( close_grain , 0.09 ) ; // grain for smoothing shapes between lines
302297 gl . uniform2f ( size , w , h ) ;
298+ gl . uniform2f ( spawn , Math . random ( ) * 3.0 , Math . random ( ) * 3.0 ) ;
303299 gl . uniform2f ( start , w * rectNum , h ) ;
304300 gl . uniform3f ( g1_clr , ...g1 . clr ) ;
305301 gl . uniform2f ( g1_coords , ...g1 . coords ) ;
@@ -314,19 +310,10 @@ export function drawGradients(
314310 gl . drawElements ( gl . TRIANGLES , inx . length , gl . UNSIGNED_SHORT , 0 ) ;
315311 log ( `draw took ${ performance . now ( ) - drawStart } ms` ) ;
316312
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-
324313 gl . deleteBuffer ( bufObj . pos ) ;
325314 gl . deleteBuffer ( bufObj . inx ) ;
326315 }
327316
328- // mainCanvas.width = 1;
329- // mainCanvas.height = 1;
330317 gl . deleteShader ( vertShader ) ;
331318 gl . deleteShader ( fragShader ) ;
332319 gl . deleteProgram ( progDraw ) ;
0 commit comments