| #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) |
| { |
| |
| 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); |
| } |