#ifdef GL_ES
precision mediump float;
#endif
uniform vec4 infiniteRect;
uniform vec4 inputBBox[1];
varying vec4 outputBBox;
uniform vec2 center;
uniform float radius;
uniform float blur;
void addPoint(inout vec4 rect, vec2 p) {
rect.xy = min(rect.xy, p);
rect.zw = max(rect.zw, p);
}
void addBlurredPointBox(inout vec4 rect, vec2 p)
{
vec2 v = p - center;
float vLength = length(v);
float dist = max(length(v) - radius, 0.0);
float b = blur * dist;
v *= (b / max(vLength, 0.01));
addPoint(rect, p - v);
addPoint(rect, p + v);
}
void main( void )
{
outputBBox = inputBBox[0];
if(outputBBox != infiniteRect)
{
// Add the bounding box of each blurred corner
addBlurredPointBox(outputBBox, inputBBox[0].xy);
addBlurredPointBox(outputBBox, inputBBox[0].xw);
addBlurredPointBox(outputBBox, inputBBox[0].zy);
addBlurredPointBox(outputBBox, inputBBox[0].zw);
}
gl_Position = vec4(0.0); // Does not link without
}