Newer
Older
pixi.js / src / filters / NoiseFilter.js
@Chad Engler Chad Engler on 27 Dec 2014 1 KB tons of jshint and typo fixes
var AbstractFilter = require('./AbstractFilter');

/**
 * @author Vico @vicocotea
 * original filter: https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/noise.js
 */

/**
 * A Noise effect filter.
 *
 * @class
 * @extends AbstractFilter
 * @namespace PIXI
 */
function NoiseFilter() {
    AbstractFilter.call(this);

    // set the uniforms
    this.uniforms = {
        noise: { type: '1f', value: 0.5 }
    };

    this.fragmentSrc = [
        'precision mediump float;',

        'varying vec2 vTextureCoord;',
        'varying vec4 vColor;',

        'uniform float noise;',
        'uniform sampler2D uSampler;',

        '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;',
        '}'
    ];
}

NoiseFilter.prototype = Object.create(AbstractFilter.prototype);
NoiseFilter.prototype.constructor = NoiseFilter;
module.exports = NoiseFilter;

Object.defineProperties(NoiseFilter.prototype, {
    /**
     * The amount of noise to apply.
     *
     * @member {number}
     * @memberof NoiseFilter#
     * @default 0.5
     */
    noise: {
        get: function () {
            return this.uniforms.noise.value;
        },
        set: function (value) {
            this.dirty = true;
            this.uniforms.noise.value = value;
        }
    }
});