uniform sampler2D uSampler; uniform vec4 inputPixel; uniform float time; varying vec2 vTextureCoord; #define TAU 6.28318530718 #define MAX_ITER 3 float sine(float x, float t, float f, float a) { return a * sin(x * f + t); } float cosine(float x, float t, float f, float a) { return a * cos(x * f + t); } void main() { // uv should be the 0-1 uv of texture... vec2 uv = gl_FragCoord.xy / inputPixel.xy; vec2 p = uv*7.0-250.0; vec2 i = vec2(p); float c = 1.0; float inten = .003; for (int n = 0; n < MAX_ITER; n++) { i = float(n + 2) * p + vec2(cos(time - i.x) + sin(time + i.y), sin(time - i.y) + cos(time + i.x)); c += 1.0/length(vec2(p.x / (sin(i.x+time)/inten), p.y / (cos(i.y+time)/inten))); } c /= float(MAX_ITER); c = 1.17-pow(c, 1.4); vec3 colour = vec3(pow(abs(c), 8.0)); colour = clamp(colour, 0.0, clamp(c, 0.3, 0.8)); colour = colour*0.3; vec4 originalColor = texture2D(uSampler, vTextureCoord); gl_FragColor = originalColor + vec4(colour, 1.0); }