X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=blur_effect.frag;h=df0aa4649608c9f67f684350a3b8f7248a472f5e;hp=51ff39a58c33d44b5a241a2f1a82864485c85383;hb=47b4160062cdaa53b7d49d7f99ce2c686f02cff8;hpb=c0461658ca2abaa10aae42f40ffee7e5128bc7ab diff --git a/blur_effect.frag b/blur_effect.frag index 51ff39a..df0aa46 100644 --- a/blur_effect.frag +++ b/blur_effect.frag @@ -1,24 +1,26 @@ -// A simple, very stupid horizontal blur. Will be fixed soonish. +// A simple un.directional blur. +// DIRECTION_VERTICAL will be #defined to 1 if we are doing a vertical blur, +// 0 otherwise. -uniform float PREFIX(pixel_offset); -uniform float PREFIX(weight)[15]; +#define NUM_TAPS 16 + +uniform vec2 PREFIX(samples)[NUM_TAPS / 2 + 1]; vec4 FUNCNAME(vec2 tc) { - vec4 x = LAST_INPUT(tc); - return - vec4(PREFIX(weight)[ 0]) * LAST_INPUT(vec2(tc.x - 7.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[ 1]) * LAST_INPUT(vec2(tc.x - 6.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[ 2]) * LAST_INPUT(vec2(tc.x - 5.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[ 3]) * LAST_INPUT(vec2(tc.x - 4.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[ 4]) * LAST_INPUT(vec2(tc.x - 3.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[ 5]) * LAST_INPUT(vec2(tc.x - 2.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[ 6]) * LAST_INPUT(vec2(tc.x - PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[ 7]) * LAST_INPUT(tc) + - vec4(PREFIX(weight)[ 8]) * LAST_INPUT(vec2(tc.x + PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[ 9]) * LAST_INPUT(vec2(tc.x + 2.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[10]) * LAST_INPUT(vec2(tc.x + 3.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[11]) * LAST_INPUT(vec2(tc.x + 4.0 * PREFIX(pixel_offset), tc.y)) + - vec4(PREFIX(weight)[12]) * LAST_INPUT(vec2(tc.x + 5.0 * PREFIX(pixel_offset), tc.y)); - vec4(PREFIX(weight)[13]) * LAST_INPUT(vec2(tc.x + 6.0 * PREFIX(pixel_offset), tc.y)); - vec4(PREFIX(weight)[14]) * LAST_INPUT(vec2(tc.x + 7.0 * PREFIX(pixel_offset), tc.y)); + 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