var AbstractFilter = require('./AbstractFilter'),
blurFactor = 1 / 7000;
/**
* The BlurXFilter applies a horizontal Gaussian blur to an object.
*
* @class
* @extends AbstractFilter
* @namespace PIXI
*/
function BlurXFilter() {
AbstractFilter.call(this);
// set the uniforms
this.uniforms = {
blur: { type: '1f', value: 1 / 512 }
};
this.fragmentSrc = [
'precision mediump float;',
'varying vec2 vTextureCoord;',
'varying vec4 vColor;',
'uniform float blur;',
'uniform sampler2D uSampler;',
'void main(void) {',
' vec4 sum = vec4(0.0);',
' sum += texture2D(uSampler, vec2(vTextureCoord.x - 4.0*blur, vTextureCoord.y)) * 0.05;',
' sum += texture2D(uSampler, vec2(vTextureCoord.x - 3.0*blur, vTextureCoord.y)) * 0.09;',
' sum += texture2D(uSampler, vec2(vTextureCoord.x - 2.0*blur, vTextureCoord.y)) * 0.12;',
' sum += texture2D(uSampler, vec2(vTextureCoord.x - blur, vTextureCoord.y)) * 0.15;',
' sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;',
' sum += texture2D(uSampler, vec2(vTextureCoord.x + blur, vTextureCoord.y)) * 0.15;',
' sum += texture2D(uSampler, vec2(vTextureCoord.x + 2.0*blur, vTextureCoord.y)) * 0.12;',
' sum += texture2D(uSampler, vec2(vTextureCoord.x + 3.0*blur, vTextureCoord.y)) * 0.09;',
' sum += texture2D(uSampler, vec2(vTextureCoord.x + 4.0*blur, vTextureCoord.y)) * 0.05;',
' gl_FragColor = sum;',
'}'
];
};
BlurXFilter.prototype = Object.create(AbstractFilter.prototype);
BlurXFilter.prototype.constructor = BlurXFilter;
module.exports = BlurXFilter;
Object.defineProperties(BlurXFilter.prototype, {
/**
* Sets the strength of both the blur.
*
* @member {number}
* @memberof BlurXFilter#
* @default 2
*/
blur: {
get: function () {
return this.uniforms.blur.value / blurFactor;
},
set: function (value) {
this.uniforms.blur.value = blurFactor * value;
}
}
});