var core = require('../../core');
var fs = require('fs');
/**
* The BlurDirFilter applies a Gaussian blur toward a direction to an object.
*
* @class
* @param {number} dirX
* @param {number} dirY
* @extends PIXI.AbstractFilter
* @memberof PIXI.filters
*/
function BlurDirFilter(dirX, dirY)
{
core.AbstractFilter.call(this,
// vertex shader
fs.readFileSync(__dirname + '/blurDir.vert', 'utf8'),
// fragment shader
fs.readFileSync(__dirname + '/blurDir.frag', 'utf8'),
// set the uniforms
{
strength: { type: '1f', value: 1 },
dirX: { type: '1f', value: dirX || 0 },
dirY: { type: '1f', value: dirY || 0 }
}
);
this.defaultFilter = new core.AbstractFilter();
/**
* Sets the number of passes for blur. More passes means higher quaility bluring.
*
* @member {number}
* @default 1
*/
this.passes = 1;
/**
* Sets the X direction of the blur
*
* @member {number}
* @default 0
*/
this.dirX = dirX || 0;
/**
* Sets the Y direction of the blur
*
* @member {number}
* @default 0
*/
this.dirY = dirY || 0;
this.strength = 4;
}
BlurDirFilter.prototype = Object.create(core.AbstractFilter.prototype);
BlurDirFilter.prototype.constructor = BlurDirFilter;
module.exports = BlurDirFilter;
BlurDirFilter.prototype.applyFilter = function (renderer, input, output, clear) {
var shader = this.getShader(renderer);
this.uniforms.strength.value = this.strength / 4 / this.passes * (input.frame.width / input.size.width);
if (this.passes === 1) {
renderer.filterManager.applyFilter(shader, input, output, clear);
} else {
var renderTarget = renderer.filterManager.getRenderTarget(true);
renderer.filterManager.applyFilter(shader, input, renderTarget, clear);
for(var i = 0; i < this.passes-2; i++)
{
//this.uniforms.strength.value = this.strength / 4 / (this.passes+(i*2)) * (input.frame.width / input.size.width);
renderer.filterManager.applyFilter(shader, renderTarget, renderTarget, clear);
}
renderer.filterManager.applyFilter(shader, renderTarget, output, clear);
renderer.filterManager.returnRenderTarget(renderTarget);
}
};
Object.defineProperties(BlurDirFilter.prototype, {
/**
* Sets the strength of both the blur.
*
* @member {number}
* @memberof PIXI.filters.BlurDirFilter#
* @default 2
*/
blur: {
get: function ()
{
return this.strength;
},
set: function (value)
{
this.padding = value * 0.5;
this.strength = value;
}
},
/**
* Sets the X direction of the blur.
*
* @member {number}
* @memberof PIXI.filters.BlurYFilter#
* @default 0
*/
dirX: {
get: function ()
{
return this.dirX;
},
set: function (value)
{
this.uniforms.dirX.value = value;
}
},
/**
* Sets the Y direction of the blur.
*
* @member {number}
* @memberof PIXI.filters.BlurDirFilter#
* @default 0
*/
dirY: {
get: function ()
{
return this.dirY;
},
set: function (value)
{
this.uniforms.dirY.value = value;
}
}
});