]> git.sesse.net Git - movit/blob - slice_effect.frag
Use std::scientific when outputting floats, so we do not get issues with 0.0 being...
[movit] / slice_effect.frag
1 uniform float PREFIX(output_coord_to_slice_num);
2 uniform float PREFIX(slice_num_to_input_coord);
3 uniform float PREFIX(slice_offset_to_input_coord);
4 uniform float PREFIX(offset);
5  
6 vec4 FUNCNAME(vec2 tc) {
7         // DIRECTION_VERTICAL will be #defined to 1 if we are expanding vertically,
8         // and 0 otherwise.
9 #if DIRECTION_VERTICAL
10         float sliced_coord = 1.0 - tc.y;
11 #else
12         float sliced_coord = tc.x;
13 #endif
14
15         // Find out which slice we are in, and a 0..1 coordinate for the offset within that slice.
16         float slice_num = floor(sliced_coord * PREFIX(output_coord_to_slice_num));
17         float slice_offset = fract(sliced_coord * PREFIX(output_coord_to_slice_num));
18
19         // Find out where this slice begins in the input data, and then offset from that.
20         float input_coord = slice_num * PREFIX(slice_num_to_input_coord) + slice_offset * PREFIX(slice_offset_to_input_coord) + PREFIX(offset);
21
22 #if DIRECTION_VERTICAL
23         return INPUT(vec2(tc.x, 1.0 - input_coord));
24 #else
25         return INPUT(vec2(input_coord, tc.y));
26 #endif
27 }
28
29 #undef DIRECTION_VERTICAL