xxxxxxxxxx
48
precision mediump float;
varying vec2 vTexCoord;
uniform sampler2D uTexture;
uniform vec2 uResolution;
vec2 hash22(vec2 p) {
vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973));
p3 += dot(p3, p3.yzx + 33.33);
return fract((p3.xx + p3.yz) * p3.zy);
}
vec2 voronoi(vec2 p) {
vec2 n = floor(p + 0.5);
float nd = sqrt(2.0);
vec2 id;
for(float j = 0.0; j <= 2.0; j++) {
vec2 k;
k.y = n.y + sign(mod(j, 2.0) - 0.5) * ceil(j * 0.5);
if (abs(k.y - p.y) - 0.5 > nd){
continue;
}
for(float i = -1.0; i <= 1.0; i++) {
k.x = n.x + i;
vec2 jitter = min(hash22(k) - 0.5, 0.17);
float d = length(k + jitter - p);
if (d <= nd){
nd = d;
id = k;
}
}
}
return id;
}
void main() {
vec2 uv = vTexCoord;
uv = 1.0 - uv;
float q = min(uResolution.x, uResolution.y) * 0.04;
vec2 st = voronoi(uv * q) / q;
vec4 tex = texture2D(uTexture, st);
vec3 color = vec3(tex.rgb);
gl_FragColor = vec4(color, 1.0);
}