const ivec2 half_size = imageSize(output_images[idx]) / 2; const float z = dot(half_size, half_size); float p = ((open ? (1.0 - progress) : progress) - 0.5) * 3.0; ivec2 dsize = pos - half_size; float sm = dot(dsize, dsize) / z + p; vec4 a = texture(a_images[idx], pos); vec4 b = texture(b_images[idx], pos); imageStore(output_images[idx], pos, mix(open ? b : a, open ? a : b, smoothstep(0.f, 1.f, sm))); } void transition(int idx, ivec2 pos, float progress) { circle(idx, pos, progress, false); }