function Filter() {
		/**
		 * A flag stating that this filter uses a context draw mode and cannot be batched into imageData processing.
		 * @property usesContext
		 * @type {boolean}
		 * @default false
		 */
		this.usesContext = false;

		/**
		 * Another filter that is required to act as part of this filter and created and managed under the hood.
		 * @private
		 * @property _multiPass
		 * @type {Filter}
		 * @default null
		 */
		this._multiPass = null;

		/**
		 * Pre-processed template shader code. It will be parsed before being fed in into the shader compiler.
		 * This should be based upon StageGL.SHADER_VERTEX_BODY_REGULAR
		 * @property VTX_SHADER
		 * @type {String}
		 * @readonly
		 */
		this.VTX_SHADER_BODY = null;

		/**
		 * Pre-processed template shader code. It will be parsed before being fed in into the shader compiler.
		 * This should be based upon StageGL.SHADER_FRAGMENT_BODY_REGULAR
		 * @property FRAG_SHADER
		 * @type {String}
		 * @readonly
		 */
		this.FRAG_SHADER_BODY = null;
	}
Base class that all filters should inherit from. Appli

When on a regular Stage apply the Filters and then cache the object using the {{#crossLink "DisplayObject/cache"}}{{/crossLink}} method.
When a cached object changes, please use {{#crossLink "DisplayObject/updateCache"}}{{/crossLink}}.
When on a StageGL simply setting content in the `.filters` array will trigger an automatic and constantly updated cache.

<h4>Example</h4>

     myInstance.filters = [
         new createjs.ColorFilter(0, 0, 0, 1, 255, 0, 0),
         new createjs.BlurFilter(5, 5, 10)
     ];
     myInstance.cache(0,0, 100, 100);

Note that each filter can implement a {{#crossLink "Filter/getBounds"}}{{/crossLink}} method, which returns the
margins that need to be applied in order to fully display the filter. For example, the {{#crossLink "BlurFilter"}}{{/crossLink}}
will cause an object to feather outwards, resulting in a margin around the shape.

Any filter that consumes an external image stretches the image to cover the cached bounds. If this is an undesired
visual result, then use an intermediary cache to properly size and layout your data before passing it to a filter.


<h4>EaselJS Filters</h4>
EaselJS comes with a number of pre-built filters:
<ul>
    <li>{{#crossLink "AberrationFilter"}}{{/crossLink}} : Shift the RGB components separately along a given vector</li>
    <li>{{#crossLink "AlphaMapFilter"}}{{/crossLink}} : Map a greyscale image to the alpha channel of a display object</li>
    <li>{{#crossLink "AlphaMaskFilter"}}{{/crossLink}}: Map an image's alpha channel to the alpha channel of a display object</li>
    <li>{{#crossLink "BlurFilter"}}{{/crossLink}}: Apply vertical and horizontal blur to a display object</li>
    <li>{{#crossLink "ColorFilter"}}{{/crossLink}}: Color transform a display object</li>
    <li>{{#crossLink "ColorMatrixFilter"}}{{/crossLink}}: Transform an image using a {{#crossLink "ColorMatrix"}}{{/crossLink}}</li>
    <li>{{#crossLink "DisplacementFilter"}}{{/crossLink}}: Create localized distortions in supplied display object</li>
</ul>

@class Filter
@constructor