xxxxxxxxxx
52
precision mediump float;
varying vec2 vTexCoord;
uniform sampler2D uTexture;
uniform vec2 uResolution;
const float pi = 3.14159;
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);
}
// https://www.youtube.com/watch?v=51LwM2R_e_o
vec2 cairo(vec2 pos, float k) {
vec2 id = floor(pos);
float check = mod(id.x + id.y, 2.0);
vec2 uv = fract(pos) - 0.5;
vec2 p = abs(uv);
if (check == 1.0) {
p = p.yx;
}
float a = (k * 0.5 + 0.5) * pi;
vec2 n = vec2(sin(a), cos(a));
float d = dot(p - 0.5, n);
if (d * (check - 0.5) < 0.0) {
id.x += 0.5 * sign(uv.x);
} else {
id.y += 0.5 * sign(uv.y);
}
return id;
}
void main() {
vec2 uv = vTexCoord;
uv = 1.0 - uv;
float q = min(uResolution.x, uResolution.y) * 0.02;
float k = pi * 0.11;
vec2 st = cairo(uv * q, k) / q;
vec4 tex = texture2D(uTexture, st);
vec3 color = vec3(tex.rgb);
gl_FragColor = vec4(color, 1.0);
}