File: src/pixi/filters/NoiseFilter.js
/**
* @author Vico @vicocotea
* original filter: https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/noise.js
*/
/**
* A Noise effect filter.
*
* @class NoiseFilter
* @extends AbstractFilter
* @constructor
*/
PIXI.NoiseFilter = function()
{
PIXI.AbstractFilter.call( this );
this.passes = [this];
// set the uniforms
this.uniforms = {
noise: {type: '1f', value: 0.5}
};
this.fragmentSrc = [
'precision mediump float;',
'uniform sampler2D uSampler;',
'uniform float noise;',
'varying vec2 vTextureCoord;',
'float rand(vec2 co) {',
' return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);',
'}',
'void main() {',
' vec4 color = texture2D(uSampler, vTextureCoord);',
' float diff = (rand(vTextureCoord) - 0.5) * noise;',
' color.r += diff;',
' color.g += diff;',
' color.b += diff;',
' gl_FragColor = color;',
'}'
];
};
PIXI.NoiseFilter.prototype = Object.create( PIXI.AbstractFilter.prototype );
PIXI.NoiseFilter.prototype.constructor = PIXI.NoiseFilter;
/**
* The amount of noise to apply.
* @property noise
* @type Number
*/
Object.defineProperty(PIXI.NoiseFilter.prototype, 'noise', {
get: function() {
return this.uniforms.noise.value;
},
set: function(value) {
this.dirty = true;
this.uniforms.noise.value = value;
}
});