kernel vec4 curl(sampler image, float r, float a) { vec2 p = destCoord(); float ra = r * a; float z = ra - p.y; float angle = asin(z / r); // with perspective: //float newx = p.x + (0.5 + p.x / samplerExtent(image).z) * r * (cos(angle) - 1.0); // less: float newx = p.x + (0.8 + p.x / samplerExtent(image).z / 3.0) * r * (cos(angle) - 1.0); // none: //float newx = p.x + r * (cos(angle) - 1.0); float newy = r * (ra / r - angle); //p.x = compare(z, p.x, newx); //p.y = compare(z, p.y, newy); vec2 s = compare(vec2(z, z), p, vec2(newx, newy)); return sample(image, samplerTransform(image, s)); }