]> git.sesse.net Git - movit/blobdiff - blur_effect.frag
Check for __APPLE__ instead of __DARWIN__.
[movit] / blur_effect.frag
index 8c0a01d6216c35bdb59836fbe6a8d831dc2e2fee..8a7a4a6f81af70430508bd665439296bc7d3435d 100644 (file)
@@ -1,24 +1,24 @@
-// A simple unidirectional blur.
+// A simple un.directional blur.
+// DIRECTION_VERTICAL will be #defined to 1 if we are doing a vertical blur,
+// 0 otherwise.
 
-uniform vec2 PREFIX(pixel_offset);
-uniform float PREFIX(weight)[15];
+uniform vec2 PREFIX(samples)[NUM_TAPS / 2 + 1];
 
 vec4 FUNCNAME(vec2 tc) {
-       vec4 x = LAST_INPUT(tc);
-       return
-               vec4(PREFIX(weight)[ 0]) * LAST_INPUT(tc - 7.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[ 1]) * LAST_INPUT(tc - 6.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[ 2]) * LAST_INPUT(tc - 5.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[ 3]) * LAST_INPUT(tc - 4.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[ 4]) * LAST_INPUT(tc - 3.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[ 5]) * LAST_INPUT(tc - 2.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[ 6]) * LAST_INPUT(tc -       PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[ 7]) * LAST_INPUT(tc) +
-               vec4(PREFIX(weight)[ 8]) * LAST_INPUT(tc +       PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[ 9]) * LAST_INPUT(tc + 2.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[10]) * LAST_INPUT(tc + 3.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[11]) * LAST_INPUT(tc + 4.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[12]) * LAST_INPUT(tc + 5.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[13]) * LAST_INPUT(tc + 6.0 * PREFIX(pixel_offset)) +
-               vec4(PREFIX(weight)[14]) * LAST_INPUT(tc + 7.0 * PREFIX(pixel_offset));
+       vec4 sum = vec4(PREFIX(samples)[0].y) * INPUT(tc);
+       for (int i = 1; i < NUM_TAPS / 2 + 1; ++i) {
+               vec2 sample = PREFIX(samples)[i];
+               vec2 sample1_tc = tc, sample2_tc = tc;
+#if DIRECTION_VERTICAL
+               sample1_tc.y -= sample.x;
+               sample2_tc.y += sample.x;
+#else
+               sample1_tc.x -= sample.x;
+               sample2_tc.x += sample.x;
+#endif
+               sum += vec4(sample.y) * (INPUT(sample1_tc) + INPUT(sample2_tc));
+       }
+       return sum;
 }
+
+#undef DIRECTION_VERTICAL