diff --git a/src/filters/dropshadow/blurYTint.frag b/src/filters/dropshadow/blurYTint.frag index 5701a3d..858ebd1 100644 --- a/src/filters/dropshadow/blurYTint.frag +++ b/src/filters/dropshadow/blurYTint.frag @@ -1,6 +1,7 @@ precision lowp float; varying vec2 vTextureCoord; +varying vec2 vBlurTexCoords[14]; varying vec4 vColor; uniform float blur; @@ -13,15 +14,21 @@ { vec4 sum = vec4(0.0); - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 4.0*blur)) * 0.05; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 3.0*blur)) * 0.09; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 2.0*blur)) * 0.12; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - blur)) * 0.15; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + blur)) * 0.15; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 2.0*blur)) * 0.12; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 3.0*blur)) * 0.09; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 4.0*blur)) * 0.05; + sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.0044299121055113265; + sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.00895781211794; + sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.0215963866053; + sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.0443683338718; + sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.0776744219933; + sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.115876621105; + sum += texture2D(uSampler, vBlurTexCoords[ 6])*0.147308056121; + sum += texture2D(uSampler, vTextureCoord )*0.159576912161; + sum += texture2D(uSampler, vBlurTexCoords[ 7])*0.147308056121; + sum += texture2D(uSampler, vBlurTexCoords[ 8])*0.115876621105; + sum += texture2D(uSampler, vBlurTexCoords[ 9])*0.0776744219933; + sum += texture2D(uSampler, vBlurTexCoords[10])*0.0443683338718; + sum += texture2D(uSampler, vBlurTexCoords[11])*0.0215963866053; + sum += texture2D(uSampler, vBlurTexCoords[12])*0.00895781211794; + sum += texture2D(uSampler, vBlurTexCoords[13])*0.0044299121055113265; - gl_FragColor =vec4( color.rgb * sum.a * alpha, sum.a * alpha ); + gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha ); } diff --git a/src/filters/dropshadow/blurYTint.frag b/src/filters/dropshadow/blurYTint.frag index 5701a3d..858ebd1 100644 --- a/src/filters/dropshadow/blurYTint.frag +++ b/src/filters/dropshadow/blurYTint.frag @@ -1,6 +1,7 @@ precision lowp float; varying vec2 vTextureCoord; +varying vec2 vBlurTexCoords[14]; varying vec4 vColor; uniform float blur; @@ -13,15 +14,21 @@ { vec4 sum = vec4(0.0); - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 4.0*blur)) * 0.05; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 3.0*blur)) * 0.09; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 2.0*blur)) * 0.12; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - blur)) * 0.15; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + blur)) * 0.15; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 2.0*blur)) * 0.12; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 3.0*blur)) * 0.09; - sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 4.0*blur)) * 0.05; + sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.0044299121055113265; + sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.00895781211794; + sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.0215963866053; + sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.0443683338718; + sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.0776744219933; + sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.115876621105; + sum += texture2D(uSampler, vBlurTexCoords[ 6])*0.147308056121; + sum += texture2D(uSampler, vTextureCoord )*0.159576912161; + sum += texture2D(uSampler, vBlurTexCoords[ 7])*0.147308056121; + sum += texture2D(uSampler, vBlurTexCoords[ 8])*0.115876621105; + sum += texture2D(uSampler, vBlurTexCoords[ 9])*0.0776744219933; + sum += texture2D(uSampler, vBlurTexCoords[10])*0.0443683338718; + sum += texture2D(uSampler, vBlurTexCoords[11])*0.0215963866053; + sum += texture2D(uSampler, vBlurTexCoords[12])*0.00895781211794; + sum += texture2D(uSampler, vBlurTexCoords[13])*0.0044299121055113265; - gl_FragColor =vec4( color.rgb * sum.a * alpha, sum.a * alpha ); + gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha ); } diff --git a/src/filters/dropshadow/blurYTint.vert b/src/filters/dropshadow/blurYTint.vert index a7bae1a..8a52a1c 100644 --- a/src/filters/dropshadow/blurYTint.vert +++ b/src/filters/dropshadow/blurYTint.vert @@ -1,16 +1,35 @@ attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; + +uniform float strength; uniform vec2 offset; uniform mat3 projectionMatrix; varying vec2 vTextureCoord; varying vec4 vColor; +varying vec2 vBlurTexCoords[14]; void main(void) { - gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0); - vTextureCoord = aTextureCoord; + gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0); + vTextureCoord = aTextureCoord; + + vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.028 * strength); + vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.024 * strength); + vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.020 * strength); + vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, -0.016 * strength); + vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, -0.012 * strength); + vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, -0.008 * strength); + vBlurTexCoords[ 6] = aTextureCoord + vec2(0.0, -0.004 * strength); + vBlurTexCoords[ 7] = aTextureCoord + vec2(0.0, 0.004 * strength); + vBlurTexCoords[ 8] = aTextureCoord + vec2(0.0, 0.008 * strength); + vBlurTexCoords[ 9] = aTextureCoord + vec2(0.0, 0.012 * strength); + vBlurTexCoords[10] = aTextureCoord + vec2(0.0, 0.016 * strength); + vBlurTexCoords[11] = aTextureCoord + vec2(0.0, 0.020 * strength); + vBlurTexCoords[12] = aTextureCoord + vec2(0.0, 0.024 * strength); + vBlurTexCoords[13] = aTextureCoord + vec2(0.0, 0.028 * strength); + vColor = vec4(aColor.rgb * aColor.a, aColor.a); }