var AbstractFilter = require('./AbstractFilter');
/**
* This filter applies a pixelate effect making display objects appear 'blocky'.
*
* @class
* @extends AbstractFilter
* @namespace PIXI
*/
function PixelateFilter()
{
AbstractFilter.call(this);
// set the uniforms
this.uniforms = {
invert: { type: '1f', value: 0 },
dimensions: { type: '4fv', value: new Float32Array([10000, 100, 10, 10]) },
pixelSize: { type: '2f', value: { x: 10, y: 10 } }
};
this.fragmentSrc = [
'precision mediump float;',
'varying vec2 vTextureCoord;',
'varying vec4 vColor;',
'uniform vec2 testDim;',
'uniform vec4 dimensions;',
'uniform vec2 pixelSize;',
'uniform sampler2D uSampler;',
'void main(void)
{',
' vec2 coord = vTextureCoord;',
' vec2 size = dimensions.xy/pixelSize;',
' vec2 color = floor( ( vTextureCoord * size ) ) / size + pixelSize/dimensions.xy * 0.5;',
' gl_FragColor = texture2D(uSampler, color);',
'}'
];
}
PixelateFilter.prototype = Object.create(AbstractFilter.prototype);
PixelateFilter.prototype.constructor = PixelateFilter;
module.exports = PixelateFilter;
Object.defineProperties(PixelateFilter.prototype, {
/**
* This a point that describes the size of the blocks. x is the width of the block and y is the height.
*
* @member {Point}
* @memberof PixelateFilter#
*/
size: {
get: function ()
{
return this.uniforms.pixelSize.value;
},
set: function (value)
{
this.uniforms.pixelSize.value = value;
}
}
});