X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=blur_effect.frag;h=f8497b3fb19d45ca439af30177f3272b910b7841;hp=7e5a42430f986aaa4c92a2e80708d11db5de7960;hb=90ac46cdc5845432df13385f946c63b5496c685e;hpb=0a3c9320e21fc211f0c61a4bda1c6932920c6883 diff --git a/blur_effect.frag b/blur_effect.frag index 7e5a424..f8497b3 100644 --- a/blur_effect.frag +++ b/blur_effect.frag @@ -1,14 +1,25 @@ -// 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. -#define NUM_TAPS 16 - -uniform vec4 PREFIX(samples)[NUM_TAPS + 1]; +// Implicit uniforms: +// uniform vec2 PREFIX(samples)[NUM_TAPS / 2 + 1]; vec4 FUNCNAME(vec2 tc) { - vec4 sum = vec4(PREFIX(samples)[0].z) * LAST_INPUT(tc); - for (int i = 1; i < NUM_TAPS + 1; ++i) { - vec4 sample = PREFIX(samples)[i]; - sum += vec4(sample.z) * (LAST_INPUT(tc - sample.xy) + LAST_INPUT(tc + sample.xy)); + 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