2 // uniform float PREFIX(progress_mul_w_plus_one);
3 // uniform bool PREFIX(bool_inverse);
5 vec4 FUNCNAME(vec2 tc) {
6 vec4 first = INPUT1(tc);
7 vec4 second = INPUT2(tc);
9 // We treat the luma as going from 0 to w, where w is the transition width
10 // (wider means the boundary between transitioned and non-transitioned
11 // will be harder, while w=0 is essentially just a straight fade).
12 // We need to map this 0..w range in the luma image to a (clamped) 0..1
13 // range for how far this pixel has come in a fade. At the very
14 // beginning, we can visualize it like this, where every pixel is in
15 // the state 0.0 (100% first image, 0% second image):
18 // luma: |---------------------|
22 // Then as we progress, eventually the luma range should move to the right
23 // so that more pixels start moving towards higher mix value:
26 // luma: |---------------------|
30 // and at the very end, all pixels should be in the state 1.0 (0% first image,
31 // 100% second image):
34 // luma: |---------------------|
38 // So clearly, it should move (w+1) units to the right, and apart from that
39 // just stay a simple mapping.
40 float w = PREFIX(transition_width);
41 float luma = INPUT3(tc).x;
42 if (PREFIX(bool_inverse)) {
45 float m = clamp((luma * w - w) + PREFIX(progress_mul_w_plus_one), 0.0, 1.0);
47 return mix(first, second, m);