/* Published by b-l-a-c-k-o-p.com
Copyright (c) 2007-2012
http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode
*/
SAMPLE: QameraWetter.qtzThis kernel takes a mask image, and uses the brightness of the mask pixel as the input to a 3x3 blur kernel. This kernel has proved useful in creating "water on glass" effects. It's derived from msBlackCheapBlur, which is listed elsewhere on this page. One of the reasons that we developed cheap blur (actually, ported from shader fragments in cyberspace) is because Core Image gaussian blur seems to be invoking the software OpenGL renderer on the Intel MacBooks. The performance hit is noticeable, as is the increase in memory bandwidth usage. Mr. Black pointed this out, I am simply relaying the info.
UPDATE: This blur mapping kernel is also exceeding the fragment program limits on the MacBook. More research underway...
kernel vec4 msBlackBlurMap(sampler input_image, sampler input_mask_image)
{
vec3 maxel = sample(input_mask_image, samplerCoord(input_mask_image));
float clamped_radius = dot(maxel,maxel);
float delta_x = 1.0 / (0.1+clamped_radius*0.5);
float delta_y = 1.0 / (0.1+clamped_radius*0.5);
vec2 center = samplerCoord(input_image);
vec4 c = sample(input_image, center + vec2(-delta_x,-delta_y));
vec4 bl = sample(input_image, center + vec2(-delta_x,-delta_y));
vec4 l = sample(input_image, center + vec2(-delta_x, 0.0));
vec4 tl = sample(input_image, center + vec2(-delta_x, delta_y));
vec4 t = sample(input_image, center + vec2( 0.0, delta_y));
vec4 ur = sample(input_image, center + vec2( delta_x, delta_y));
vec4 r = sample(input_image, center + vec2( delta_x, 0.0));
vec4 br = sample(input_image, center + vec2( delta_x, delta_y));
vec4 b = sample(input_image, center + vec2( 0.0,-delta_y));
vec4 blur = 0.25 * c + 0.125 * (l + t + r + b) + 0.0625 * (bl + tl + ur + br);
return blur;
}