{"version":3,"file":"pixi-filters.js","sources":["../../filters/adjustment/lib/filter-adjustment.esm.js","../../filters/kawase-blur/lib/filter-kawase-blur.esm.js","../../filters/advanced-bloom/lib/filter-advanced-bloom.esm.js","../../filters/ascii/lib/filter-ascii.esm.js","../../filters/bevel/lib/filter-bevel.esm.js","../../filters/bloom/lib/filter-bloom.esm.js","../../filters/bulge-pinch/lib/filter-bulge-pinch.esm.js","../../filters/color-map/lib/filter-color-map.esm.js","../../filters/color-overlay/lib/filter-color-overlay.esm.js","../../filters/color-replace/lib/filter-color-replace.esm.js","../../filters/convolution/lib/filter-convolution.esm.js","../../filters/cross-hatch/lib/filter-cross-hatch.esm.js","../../filters/crt/lib/filter-crt.esm.js","../../filters/dot/lib/filter-dot.esm.js","../../filters/drop-shadow/lib/filter-drop-shadow.esm.js","../../filters/emboss/lib/filter-emboss.esm.js","../../filters/glitch/lib/filter-glitch.esm.js","../../filters/glow/lib/filter-glow.esm.js","../../filters/godray/lib/filter-godray.esm.js","../../filters/motion-blur/lib/filter-motion-blur.esm.js","../../filters/multi-color-replace/lib/filter-multi-color-replace.esm.js","../../filters/old-film/lib/filter-old-film.esm.js","../../filters/outline/lib/filter-outline.esm.js","../../filters/pixelate/lib/filter-pixelate.esm.js","../../filters/radial-blur/lib/filter-radial-blur.esm.js","../../filters/reflection/lib/filter-reflection.esm.js","../../filters/rgb-split/lib/filter-rgb-split.esm.js","../../filters/shockwave/lib/filter-shockwave.esm.js","../../filters/simple-lightmap/lib/filter-simple-lightmap.esm.js","../../filters/tilt-shift/lib/filter-tilt-shift.esm.js","../../filters/twist/lib/filter-twist.esm.js","../../filters/zoom-blur/lib/filter-zoom-blur.esm.js"],"sourcesContent":["/*!\n * @pixi/filter-adjustment - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-adjustment is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\n\\nuniform float gamma;\\nuniform float contrast;\\nuniform float saturation;\\nuniform float brightness;\\nuniform float red;\\nuniform float green;\\nuniform float blue;\\nuniform float alpha;\\n\\nvoid main(void)\\n{\\n vec4 c = texture2D(uSampler, vTextureCoord);\\n\\n if (c.a > 0.0) {\\n c.rgb /= c.a;\\n\\n vec3 rgb = pow(c.rgb, vec3(1. / gamma));\\n rgb = mix(vec3(.5), mix(vec3(dot(vec3(.2125, .7154, .0721), rgb)), rgb, saturation), contrast);\\n rgb.r *= red;\\n rgb.g *= green;\\n rgb.b *= blue;\\n c.rgb = rgb * brightness;\\n\\n c.rgb *= c.a;\\n }\\n\\n gl_FragColor = c * alpha;\\n}\\n\";\n\n/**\n * The ability to adjust gamma, contrast, saturation, brightness, alpha or color-channel shift. This is a faster\n * and much simpler to use than {@link http://pixijs.download/release/docs/PIXI.filters.ColorMatrixFilter.html ColorMatrixFilter}\n * because it does not use a matrix.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/adjustment.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-adjustment|@pixi/filter-adjustment}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n *\n * @param {object|number} [options] - The optional parameters of the filter.\n * @param {number} [options.gamma=1] - The amount of luminance\n * @param {number} [options.saturation=1] - The amount of color saturation\n * @param {number} [options.contrast=1] - The amount of contrast\n * @param {number} [options.brightness=1] - The overall brightness\n * @param {number} [options.red=1] - The multipled red channel\n * @param {number} [options.green=1] - The multipled green channel\n * @param {number} [options.blue=1] - The multipled blue channel\n * @param {number} [options.alpha=1] - The overall alpha amount\n */\nvar AdjustmentFilter = /*@__PURE__*/(function (Filter) {\n function AdjustmentFilter(options) {\n Filter.call(this, vertex, fragment);\n\n Object.assign(this, {\n /**\n * The amount of luminance\n * @member {number}\n * @memberof PIXI.filters.AdjustmentFilter#\n * @default 1\n */\n gamma: 1,\n\n /**\n * The amount of saturation\n * @member {number}\n * @memberof PIXI.filters.AdjustmentFilter#\n * @default 1\n */\n saturation: 1,\n\n /**\n * The amount of contrast\n * @member {number}\n * @memberof PIXI.filters.AdjustmentFilter#\n * @default 1\n */\n contrast: 1,\n\n /**\n * The amount of brightness\n * @member {number}\n * @memberof PIXI.filters.AdjustmentFilter#\n * @default 1\n */\n brightness: 1,\n\n /**\n * The amount of red channel\n * @member {number}\n * @memberof PIXI.filters.AdjustmentFilter#\n * @default 1\n */\n red: 1,\n\n /**\n * The amount of green channel\n * @member {number}\n * @memberof PIXI.filters.AdjustmentFilter#\n * @default 1\n */\n green: 1,\n\n /**\n * The amount of blue channel\n * @member {number}\n * @memberof PIXI.filters.AdjustmentFilter#\n * @default 1\n */\n blue: 1,\n\n /**\n * The amount of alpha channel\n * @member {number}\n * @memberof PIXI.filters.AdjustmentFilter#\n * @default 1\n */\n alpha: 1,\n }, options);\n }\n\n if ( Filter ) AdjustmentFilter.__proto__ = Filter;\n AdjustmentFilter.prototype = Object.create( Filter && Filter.prototype );\n AdjustmentFilter.prototype.constructor = AdjustmentFilter;\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n AdjustmentFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms.gamma = Math.max(this.gamma, 0.0001);\n this.uniforms.saturation = this.saturation;\n this.uniforms.contrast = this.contrast;\n this.uniforms.brightness = this.brightness;\n this.uniforms.red = this.red;\n this.uniforms.green = this.green;\n this.uniforms.blue = this.blue;\n this.uniforms.alpha = this.alpha;\n\n filterManager.applyFilter(this, input, output, clear);\n };\n\n return AdjustmentFilter;\n}(Filter));\n\nexport { AdjustmentFilter };\n//# sourceMappingURL=filter-adjustment.esm.js.map\n","/*!\n * @pixi/filter-kawase-blur - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-kawase-blur is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { Point } from '@pixi/math';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"\\nvarying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\n\\nuniform vec2 uOffset;\\n\\nvoid main(void)\\n{\\n vec4 color = vec4(0.0);\\n\\n // Sample top left pixel\\n color += texture2D(uSampler, vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y + uOffset.y));\\n\\n // Sample top right pixel\\n color += texture2D(uSampler, vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y + uOffset.y));\\n\\n // Sample bottom right pixel\\n color += texture2D(uSampler, vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y - uOffset.y));\\n\\n // Sample bottom left pixel\\n color += texture2D(uSampler, vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y - uOffset.y));\\n\\n // Average\\n color *= 0.25;\\n\\n gl_FragColor = color;\\n}\";\n\nvar fragmentClamp = \"\\nvarying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\n\\nuniform vec2 uOffset;\\nuniform vec4 filterClamp;\\n\\nvoid main(void)\\n{\\n vec4 color = vec4(0.0);\\n\\n // Sample top left pixel\\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y + uOffset.y), filterClamp.xy, filterClamp.zw));\\n\\n // Sample top right pixel\\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y + uOffset.y), filterClamp.xy, filterClamp.zw));\\n\\n // Sample bottom right pixel\\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y - uOffset.y), filterClamp.xy, filterClamp.zw));\\n\\n // Sample bottom left pixel\\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y - uOffset.y), filterClamp.xy, filterClamp.zw));\\n\\n // Average\\n color *= 0.25;\\n\\n gl_FragColor = color;\\n}\\n\";\n\n/**\n * A much faster blur than Gaussian blur, but more complicated to use.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/kawase-blur.png)\n *\n * @see https://software.intel.com/en-us/blogs/2014/07/15/an-investigation-of-fast-real-time-gpu-based-image-blur-algorithms\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-kawase-blur|@pixi/filter-kawase-blur}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number|number[]} [blur=4] - The blur of the filter. Should be greater than `0`. If\n * value is an Array, setting kernels.\n * @param {number} [quality=3] - The quality of the filter. Should be an integer greater than `1`.\n * @param {boolean} [clamp=false] - Clamp edges, useful for removing dark edges\n * from fullscreen filters or bleeding to the edge of filterArea.\n */\nvar KawaseBlurFilter = /*@__PURE__*/(function (Filter) {\n function KawaseBlurFilter(blur, quality, clamp) {\n if ( blur === void 0 ) blur = 4;\n if ( quality === void 0 ) quality = 3;\n if ( clamp === void 0 ) clamp = false;\n\n Filter.call(this, vertex, clamp ? fragmentClamp : fragment);\n this.uniforms.uOffset = new Float32Array(2);\n\n this._pixelSize = new Point();\n this.pixelSize = 1;\n this._clamp = clamp;\n this._kernels = null;\n\n // if `blur` is array , as kernels\n if (Array.isArray(blur)) {\n this.kernels = blur;\n }\n else {\n this._blur = blur;\n this.quality = quality;\n }\n }\n\n if ( Filter ) KawaseBlurFilter.__proto__ = Filter;\n KawaseBlurFilter.prototype = Object.create( Filter && Filter.prototype );\n KawaseBlurFilter.prototype.constructor = KawaseBlurFilter;\n\n var prototypeAccessors = { kernels: { configurable: true },clamp: { configurable: true },pixelSize: { configurable: true },quality: { configurable: true },blur: { configurable: true } };\n\n /**\n * Overrides apply\n * @private\n */\n KawaseBlurFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n var uvX = this._pixelSize.x / input._frame.width;\n var uvY = this._pixelSize.y / input._frame.height;\n var offset;\n\n if (this._quality === 1 || this._blur === 0) {\n offset = this._kernels[0] + 0.5;\n this.uniforms.uOffset[0] = offset * uvX;\n this.uniforms.uOffset[1] = offset * uvY;\n filterManager.applyFilter(this, input, output, clear);\n }\n else {\n var renderTarget = filterManager.getFilterTexture();\n\n var source = input;\n var target = renderTarget;\n var tmp;\n\n var last = this._quality - 1;\n\n for (var i = 0; i < last; i++) {\n offset = this._kernels[i] + 0.5;\n this.uniforms.uOffset[0] = offset * uvX;\n this.uniforms.uOffset[1] = offset * uvY;\n filterManager.applyFilter(this, source, target, 1);\n\n tmp = source;\n source = target;\n target = tmp;\n }\n offset = this._kernels[last] + 0.5;\n this.uniforms.uOffset[0] = offset * uvX;\n this.uniforms.uOffset[1] = offset * uvY;\n filterManager.applyFilter(this, source, output, clear);\n\n filterManager.returnFilterTexture(renderTarget);\n }\n };\n\n KawaseBlurFilter.prototype._updatePadding = function _updatePadding () {\n this.padding = Math.ceil(this._kernels.reduce(function (acc, v) { return acc + v + 0.5; }, 0));\n };\n\n /**\n * Auto generate kernels by blur & quality\n * @private\n */\n KawaseBlurFilter.prototype._generateKernels = function _generateKernels () {\n var blur = this._blur;\n var quality = this._quality;\n var kernels = [ blur ];\n\n if (blur > 0) {\n var k = blur;\n var step = blur / quality;\n\n for (var i = 1; i < quality; i++) {\n k -= step;\n kernels.push(k);\n }\n }\n\n this._kernels = kernels;\n\n this._updatePadding();\n };\n\n /**\n * The kernel size of the blur filter, for advanced usage.\n *\n * @member {number[]}\n * @default [0]\n */\n prototypeAccessors.kernels.get = function () {\n return this._kernels;\n };\n prototypeAccessors.kernels.set = function (value) {\n if (Array.isArray(value) && value.length > 0) {\n this._kernels = value;\n this._quality = value.length;\n this._blur = Math.max.apply(Math, value);\n }\n else {\n // if value is invalid , set default value\n this._kernels = [0];\n this._quality = 1;\n }\n };\n\n /**\n * Get the if the filter is clampped.\n *\n * @readonly\n * @member {boolean}\n * @default false\n */\n prototypeAccessors.clamp.get = function () {\n return this._clamp;\n };\n\n /**\n * Sets the pixel size of the filter. Large size is blurrier. For advanced usage.\n *\n * @member {PIXI.Point|number[]}\n * @default [1, 1]\n */\n prototypeAccessors.pixelSize.set = function (value) {\n if (typeof value === 'number') {\n this._pixelSize.x = value;\n this._pixelSize.y = value;\n }\n else if (Array.isArray(value)) {\n this._pixelSize.x = value[0];\n this._pixelSize.y = value[1];\n }\n else if (value instanceof Point) {\n this._pixelSize.x = value.x;\n this._pixelSize.y = value.y;\n }\n else {\n // if value is invalid , set default value\n this._pixelSize.x = 1;\n this._pixelSize.y = 1;\n }\n };\n prototypeAccessors.pixelSize.get = function () {\n return this._pixelSize;\n };\n\n /**\n * The quality of the filter, integer greater than `1`.\n *\n * @member {number}\n * @default 3\n */\n prototypeAccessors.quality.get = function () {\n return this._quality;\n };\n prototypeAccessors.quality.set = function (value) {\n this._quality = Math.max(1, Math.round(value));\n this._generateKernels();\n };\n\n /**\n * The amount of blur, value greater than `0`.\n *\n * @member {number}\n * @default 4\n */\n prototypeAccessors.blur.get = function () {\n return this._blur;\n };\n prototypeAccessors.blur.set = function (value) {\n this._blur = value;\n this._generateKernels();\n };\n\n Object.defineProperties( KawaseBlurFilter.prototype, prototypeAccessors );\n\n return KawaseBlurFilter;\n}(Filter));\n\nexport { KawaseBlurFilter };\n//# sourceMappingURL=filter-kawase-blur.esm.js.map\n","/*!\n * @pixi/filter-advanced-bloom - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-advanced-bloom is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { KawaseBlurFilter } from '@pixi/filter-kawase-blur';\nimport { settings } from '@pixi/settings';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"\\nuniform sampler2D uSampler;\\nvarying vec2 vTextureCoord;\\n\\nuniform float threshold;\\n\\nvoid main() {\\n vec4 color = texture2D(uSampler, vTextureCoord);\\n\\n // A simple & fast algorithm for getting brightness.\\n // It's inaccuracy , but good enought for this feature.\\n float _max = max(max(color.r, color.g), color.b);\\n float _min = min(min(color.r, color.g), color.b);\\n float brightness = (_max + _min) * 0.5;\\n\\n if(brightness > threshold) {\\n gl_FragColor = color;\\n } else {\\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\\n }\\n}\\n\";\n\n/**\n * Internal filter for AdvancedBloomFilter to get brightness.\n * @class\n * @private\n * @param {number} [threshold=0.5] Defines how bright a color needs to be extracted.\n */\nvar ExtractBrightnessFilter = /*@__PURE__*/(function (Filter) {\n function ExtractBrightnessFilter(threshold) {\n if ( threshold === void 0 ) threshold = 0.5;\n\n Filter.call(this, vertex, fragment);\n\n this.threshold = threshold;\n }\n\n if ( Filter ) ExtractBrightnessFilter.__proto__ = Filter;\n ExtractBrightnessFilter.prototype = Object.create( Filter && Filter.prototype );\n ExtractBrightnessFilter.prototype.constructor = ExtractBrightnessFilter;\n\n var prototypeAccessors = { threshold: { configurable: true } };\n\n /**\n * Defines how bright a color needs to be extracted.\n *\n * @member {number}\n * @default 0.5\n */\n prototypeAccessors.threshold.get = function () {\n return this.uniforms.threshold;\n };\n prototypeAccessors.threshold.set = function (value) {\n this.uniforms.threshold = value;\n };\n\n Object.defineProperties( ExtractBrightnessFilter.prototype, prototypeAccessors );\n\n return ExtractBrightnessFilter;\n}(Filter));\n\nvar fragment$1 = \"uniform sampler2D uSampler;\\nvarying vec2 vTextureCoord;\\n\\nuniform sampler2D bloomTexture;\\nuniform float bloomScale;\\nuniform float brightness;\\n\\nvoid main() {\\n vec4 color = texture2D(uSampler, vTextureCoord);\\n color.rgb *= brightness;\\n vec4 bloomColor = vec4(texture2D(bloomTexture, vTextureCoord).rgb, 0.0);\\n bloomColor.rgb *= bloomScale;\\n gl_FragColor = color + bloomColor;\\n}\\n\";\n\n/**\n * The AdvancedBloomFilter applies a Bloom Effect to an object. Unlike the normal BloomFilter\n * this had some advanced controls for adjusting the look of the bloom. Note: this filter\n * is slower than normal BloomFilter.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/advanced-bloom.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-advanced-bloom|@pixi/filter-advanced-bloom}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n *\n * @param {object|number} [options] - The optional parameters of advanced bloom filter.\n * When options is a number , it will be `options.threshold`.\n * @param {number} [options.threshold=0.5] - Defines how bright a color needs to be to affect bloom.\n * @param {number} [options.bloomScale=1.0] - To adjust the strength of the bloom. Higher values is more intense brightness.\n * @param {number} [options.brightness=1.0] - The brightness, lower value is more subtle brightness, higher value is blown-out.\n * @param {number} [options.blur=8] - Sets the strength of the Blur properties simultaneously\n * @param {number} [options.quality=4] - The quality of the Blur filter.\n * @param {number[]} [options.kernels=null] - The kernels of the Blur filter.\n * @param {number|number[]|PIXI.Point} [options.pixelSize=1] - the pixelSize of the Blur filter.\n * @param {number} [options.resolution=PIXI.settings.FILTER_RESOLUTION] - The resolution of the Blur filter.\n */\nvar AdvancedBloomFilter = /*@__PURE__*/(function (Filter) {\n function AdvancedBloomFilter(options) {\n\n Filter.call(this, vertex, fragment$1);\n\n if (typeof options === 'number') {\n options = { threshold: options };\n }\n\n options = Object.assign({\n threshold: 0.5,\n bloomScale: 1.0,\n brightness: 1.0,\n kernels: null,\n blur: 8,\n quality: 4,\n pixelSize: 1,\n resolution: settings.FILTER_RESOLUTION,\n }, options);\n\n /**\n * To adjust the strength of the bloom. Higher values is more intense brightness.\n *\n * @member {number}\n * @default 1.0\n */\n this.bloomScale = options.bloomScale;\n\n /**\n * The brightness, lower value is more subtle brightness, higher value is blown-out.\n *\n * @member {number}\n * @default 1.0\n */\n this.brightness = options.brightness;\n\n var kernels = options.kernels;\n var blur = options.blur;\n var quality = options.quality;\n var pixelSize = options.pixelSize;\n var resolution = options.resolution;\n\n this._extractFilter = new ExtractBrightnessFilter(options.threshold);\n this._extractFilter.resolution = resolution;\n this._blurFilter = kernels ?\n new KawaseBlurFilter(kernels) :\n new KawaseBlurFilter(blur, quality);\n this.pixelSize = pixelSize;\n this.resolution = resolution;\n }\n\n if ( Filter ) AdvancedBloomFilter.__proto__ = Filter;\n AdvancedBloomFilter.prototype = Object.create( Filter && Filter.prototype );\n AdvancedBloomFilter.prototype.constructor = AdvancedBloomFilter;\n\n var prototypeAccessors = { resolution: { configurable: true },threshold: { configurable: true },kernels: { configurable: true },blur: { configurable: true },quality: { configurable: true },pixelSize: { configurable: true } };\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n AdvancedBloomFilter.prototype.apply = function apply (filterManager, input, output, clear, currentState) {\n\n var brightTarget = filterManager.getFilterTexture();\n\n this._extractFilter.apply(filterManager, input, brightTarget, 1, currentState);\n\n var bloomTarget = filterManager.getFilterTexture();\n\n this._blurFilter.apply(filterManager, brightTarget, bloomTarget, 1, currentState);\n\n this.uniforms.bloomScale = this.bloomScale;\n this.uniforms.brightness = this.brightness;\n this.uniforms.bloomTexture = bloomTarget;\n\n filterManager.applyFilter(this, input, output, clear);\n\n filterManager.returnFilterTexture(bloomTarget);\n filterManager.returnFilterTexture(brightTarget);\n };\n\n /**\n * The resolution of the filter.\n *\n * @member {number}\n */\n prototypeAccessors.resolution.get = function () {\n return this._resolution;\n };\n prototypeAccessors.resolution.set = function (value) {\n this._resolution = value;\n\n if (this._extractFilter) {\n this._extractFilter.resolution = value;\n }\n if (this._blurFilter) {\n this._blurFilter.resolution = value;\n }\n };\n\n /**\n * Defines how bright a color needs to be to affect bloom.\n *\n * @member {number}\n * @default 0.5\n */\n prototypeAccessors.threshold.get = function () {\n return this._extractFilter.threshold;\n };\n prototypeAccessors.threshold.set = function (value) {\n this._extractFilter.threshold = value;\n };\n\n /**\n * Sets the kernels of the Blur Filter\n *\n * @member {number}\n * @default 4\n */\n prototypeAccessors.kernels.get = function () {\n return this._blurFilter.kernels;\n };\n prototypeAccessors.kernels.set = function (value) {\n this._blurFilter.kernels = value;\n };\n\n /**\n * Sets the strength of the Blur properties simultaneously\n *\n * @member {number}\n * @default 2\n */\n prototypeAccessors.blur.get = function () {\n return this._blurFilter.blur;\n };\n prototypeAccessors.blur.set = function (value) {\n this._blurFilter.blur = value;\n };\n\n /**\n * Sets the quality of the Blur Filter\n *\n * @member {number}\n * @default 4\n */\n prototypeAccessors.quality.get = function () {\n return this._blurFilter.quality;\n };\n prototypeAccessors.quality.set = function (value) {\n this._blurFilter.quality = value;\n };\n\n /**\n * Sets the pixelSize of the Kawase Blur filter\n *\n * @member {number|number[]|PIXI.Point}\n * @default 1\n */\n prototypeAccessors.pixelSize.get = function () {\n return this._blurFilter.pixelSize;\n };\n prototypeAccessors.pixelSize.set = function (value) {\n this._blurFilter.pixelSize = value;\n };\n\n Object.defineProperties( AdvancedBloomFilter.prototype, prototypeAccessors );\n\n return AdvancedBloomFilter;\n}(Filter));\n\nexport { AdvancedBloomFilter };\n//# sourceMappingURL=filter-advanced-bloom.esm.js.map\n","/*!\n * @pixi/filter-ascii - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-ascii is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\n\\nuniform vec4 filterArea;\\nuniform float pixelSize;\\nuniform sampler2D uSampler;\\n\\nvec2 mapCoord( vec2 coord )\\n{\\n coord *= filterArea.xy;\\n coord += filterArea.zw;\\n\\n return coord;\\n}\\n\\nvec2 unmapCoord( vec2 coord )\\n{\\n coord -= filterArea.zw;\\n coord /= filterArea.xy;\\n\\n return coord;\\n}\\n\\nvec2 pixelate(vec2 coord, vec2 size)\\n{\\n return floor( coord / size ) * size;\\n}\\n\\nvec2 getMod(vec2 coord, vec2 size)\\n{\\n return mod( coord , size) / size;\\n}\\n\\nfloat character(float n, vec2 p)\\n{\\n p = floor(p*vec2(4.0, -4.0) + 2.5);\\n\\n if (clamp(p.x, 0.0, 4.0) == p.x)\\n {\\n if (clamp(p.y, 0.0, 4.0) == p.y)\\n {\\n if (int(mod(n/exp2(p.x + 5.0*p.y), 2.0)) == 1) return 1.0;\\n }\\n }\\n return 0.0;\\n}\\n\\nvoid main()\\n{\\n vec2 coord = mapCoord(vTextureCoord);\\n\\n // get the rounded color..\\n vec2 pixCoord = pixelate(coord, vec2(pixelSize));\\n pixCoord = unmapCoord(pixCoord);\\n\\n vec4 color = texture2D(uSampler, pixCoord);\\n\\n // determine the character to use\\n float gray = (color.r + color.g + color.b) / 3.0;\\n\\n float n = 65536.0; // .\\n if (gray > 0.2) n = 65600.0; // :\\n if (gray > 0.3) n = 332772.0; // *\\n if (gray > 0.4) n = 15255086.0; // o\\n if (gray > 0.5) n = 23385164.0; // &\\n if (gray > 0.6) n = 15252014.0; // 8\\n if (gray > 0.7) n = 13199452.0; // @\\n if (gray > 0.8) n = 11512810.0; // #\\n\\n // get the mod..\\n vec2 modd = getMod(coord, vec2(pixelSize));\\n\\n gl_FragColor = color * character( n, vec2(-1.0) + modd * 2.0);\\n\\n}\\n\";\n\n// TODO (cengler) - The Y is flipped in this shader for some reason.\n\n/**\n * @author Vico @vicocotea\n * original shader : https://www.shadertoy.com/view/lssGDj by @movAX13h\n */\n\n/**\n * An ASCII filter.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/ascii.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-ascii|@pixi/filter-ascii}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number} [size=8] Size of the font\n */\nvar AsciiFilter = /*@__PURE__*/(function (Filter) {\n function AsciiFilter(size) {\n if ( size === void 0 ) size = 8;\n\n Filter.call(this, vertex, fragment);\n this.size = size;\n }\n\n if ( Filter ) AsciiFilter.__proto__ = Filter;\n AsciiFilter.prototype = Object.create( Filter && Filter.prototype );\n AsciiFilter.prototype.constructor = AsciiFilter;\n\n var prototypeAccessors = { size: { configurable: true } };\n\n /**\n * The pixel size used by the filter.\n *\n * @member {number}\n */\n prototypeAccessors.size.get = function () {\n return this.uniforms.pixelSize;\n };\n prototypeAccessors.size.set = function (value) {\n this.uniforms.pixelSize = value;\n };\n\n Object.defineProperties( AsciiFilter.prototype, prototypeAccessors );\n\n return AsciiFilter;\n}(Filter));\n\nexport { AsciiFilter };\n//# sourceMappingURL=filter-ascii.esm.js.map\n","/*!\n * @pixi/filter-bevel - v3.2.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-bevel is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { DEG_TO_RAD } from '@pixi/math';\nimport { rgb2hex, hex2rgb } from '@pixi/utils';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"precision mediump float;\\n\\nvarying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec4 filterArea;\\n\\nuniform float transformX;\\nuniform float transformY;\\nuniform vec3 lightColor;\\nuniform float lightAlpha;\\nuniform vec3 shadowColor;\\nuniform float shadowAlpha;\\n\\nvoid main(void) {\\n vec2 transform = vec2(1.0 / filterArea) * vec2(transformX, transformY);\\n vec4 color = texture2D(uSampler, vTextureCoord);\\n float light = texture2D(uSampler, vTextureCoord - transform).a;\\n float shadow = texture2D(uSampler, vTextureCoord + transform).a;\\n\\n color.rgb = mix(color.rgb, lightColor, clamp((color.a - light) * lightAlpha, 0.0, 1.0));\\n color.rgb = mix(color.rgb, shadowColor, clamp((color.a - shadow) * shadowAlpha, 0.0, 1.0));\\n gl_FragColor = vec4(color.rgb * color.a, color.a);\\n}\\n\";\n\n/**\n * Bevel Filter.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/bevel.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-bevel|@pixi/filter-bevel}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {object} [options] - The optional parameters of the filter.\n * @param {number} [options.rotation = 45] - The angle of the light in degrees.\n * @param {number} [options.thickness = 2] - The tickness of the bevel.\n * @param {number} [options.lightColor = 0xffffff] - Color of the light.\n * @param {number} [options.lightAlpha = 0.7] - Alpha of the light.\n * @param {number} [options.shadowColor = 0x000000] - Color of the shadow.\n * @param {number} [options.shadowAlpha = 0.7] - Alpha of the shadow.\n */\nvar BevelFilter = /*@__PURE__*/(function (Filter) {\n function BevelFilter(options) {\n if ( options === void 0 ) options = {};\n\n Filter.call(this, vertex, fragment);\n\n this.uniforms.lightColor = new Float32Array(3);\n this.uniforms.shadowColor = new Float32Array(3);\n\n options = Object.assign({\n rotation: 45,\n thickness: 2,\n lightColor: 0xffffff,\n lightAlpha: 0.7,\n shadowColor: 0x000000,\n shadowAlpha: 0.7,\n }, options);\n\n /**\n * The angle of the light in degrees.\n * @member {number}\n * @default 45\n */\n this.rotation = options.rotation;\n\n /**\n * The tickness of the bevel.\n * @member {number}\n * @default 2\n */\n this.thickness = options.thickness;\n\n /**\n * Color of the light.\n * @member {number}\n * @default 0xffffff\n */\n this.lightColor = options.lightColor;\n\n /**\n * Alpha of the light.\n * @member {number}\n * @default 0.7\n */\n this.lightAlpha = options.lightAlpha;\n\n /**\n * Color of the shadow.\n * @member {number}\n * @default 0x000000\n */\n this.shadowColor = options.shadowColor;\n\n /**\n * Alpha of the shadow.\n * @member {number}\n * @default 0.7\n */\n this.shadowAlpha = options.shadowAlpha;\n\n // Workaround: https://github.com/pixijs/pixi-filters/issues/230\n // applies correctly only if there is at least a single-pixel padding with alpha=0 around an image\n // To solve this problem, a padding of 1 put on the filter should suffice\n this.padding = 1;\n }\n\n if ( Filter ) BevelFilter.__proto__ = Filter;\n BevelFilter.prototype = Object.create( Filter && Filter.prototype );\n BevelFilter.prototype.constructor = BevelFilter;\n\n var prototypeAccessors = { rotation: { configurable: true },thickness: { configurable: true },lightColor: { configurable: true },lightAlpha: { configurable: true },shadowColor: { configurable: true },shadowAlpha: { configurable: true } };\n\n /**\n * Update the transform matrix of offset angle.\n * @private\n */\n BevelFilter.prototype._updateTransform = function _updateTransform () {\n this.uniforms.transformX = this._thickness * Math.cos(this._angle);\n this.uniforms.transformY = this._thickness * Math.sin(this._angle);\n };\n\n prototypeAccessors.rotation.get = function () {\n return this._angle / DEG_TO_RAD;\n };\n prototypeAccessors.rotation.set = function (value) {\n this._angle = value * DEG_TO_RAD;\n this._updateTransform();\n };\n\n prototypeAccessors.thickness.get = function () {\n return this._thickness;\n };\n prototypeAccessors.thickness.set = function (value) {\n this._thickness = value;\n this._updateTransform();\n };\n\n prototypeAccessors.lightColor.get = function () {\n return rgb2hex(this.uniforms.lightColor);\n };\n prototypeAccessors.lightColor.set = function (value) {\n hex2rgb(value, this.uniforms.lightColor);\n };\n\n prototypeAccessors.lightAlpha.get = function () {\n return this.uniforms.lightAlpha;\n };\n prototypeAccessors.lightAlpha.set = function (value) {\n this.uniforms.lightAlpha = value;\n };\n\n prototypeAccessors.shadowColor.get = function () {\n return rgb2hex(this.uniforms.shadowColor);\n };\n prototypeAccessors.shadowColor.set = function (value) {\n hex2rgb(value, this.uniforms.shadowColor);\n };\n\n prototypeAccessors.shadowAlpha.get = function () {\n return this.uniforms.shadowAlpha;\n };\n prototypeAccessors.shadowAlpha.set = function (value) {\n this.uniforms.shadowAlpha = value;\n };\n\n Object.defineProperties( BevelFilter.prototype, prototypeAccessors );\n\n return BevelFilter;\n}(Filter));\n\nexport { BevelFilter };\n//# sourceMappingURL=filter-bevel.esm.js.map\n","/*!\n * @pixi/filter-bloom - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-bloom is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { BLEND_MODES } from '@pixi/constants';\nimport { AlphaFilter } from '@pixi/filter-alpha';\nimport { BlurFilterPass } from '@pixi/filter-blur';\nimport { settings } from '@pixi/settings';\nimport { Point } from '@pixi/math';\n\n/**\n * The BloomFilter applies a Gaussian blur to an object.\n * The strength of the blur can be set for x- and y-axis separately.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/bloom.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-bloom|@pixi/filter-bloom}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number|PIXI.Point|number[]} [blur=2] Sets the strength of both the blurX and blurY properties simultaneously\n * @param {number} [quality=4] The quality of the blurX & blurY filter.\n * @param {number} [resolution=PIXI.settings.FILTER_RESOLUTION] The resolution of the blurX & blurY filter.\n * @param {number} [kernelSize=5] The kernelSize of the blurX & blurY filter.Options: 5, 7, 9, 11, 13, 15.\n */\nvar BloomFilter = /*@__PURE__*/(function (Filter) {\n function BloomFilter(blur, quality, resolution, kernelSize) {\n if ( blur === void 0 ) blur = 2;\n if ( quality === void 0 ) quality = 4;\n if ( resolution === void 0 ) resolution = settings.FILTER_RESOLUTION;\n if ( kernelSize === void 0 ) kernelSize = 5;\n\n Filter.call(this);\n\n var blurX;\n var blurY;\n\n if (typeof blur === 'number') {\n blurX = blur;\n blurY = blur;\n }\n else if (blur instanceof Point) {\n blurX = blur.x;\n blurY = blur.y;\n }\n else if (Array.isArray(blur)) {\n blurX = blur[0];\n blurY = blur[1];\n }\n\n this.blurXFilter = new BlurFilterPass(true, blurX, quality, resolution, kernelSize);\n this.blurYFilter = new BlurFilterPass(false, blurY, quality, resolution, kernelSize);\n this.blurYFilter.blendMode = BLEND_MODES.SCREEN;\n this.defaultFilter = new AlphaFilter();\n }\n\n if ( Filter ) BloomFilter.__proto__ = Filter;\n BloomFilter.prototype = Object.create( Filter && Filter.prototype );\n BloomFilter.prototype.constructor = BloomFilter;\n\n var prototypeAccessors = { blur: { configurable: true },blurX: { configurable: true },blurY: { configurable: true } };\n\n BloomFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n var renderTarget = filterManager.getFilterTexture();\n\n //TODO - copyTexSubImage2D could be used here?\n this.defaultFilter.apply(filterManager, input, output, clear);\n\n this.blurXFilter.apply(filterManager, input, renderTarget);\n this.blurYFilter.apply(filterManager, renderTarget, output, 0);\n\n filterManager.returnFilterTexture(renderTarget);\n };\n\n /**\n * Sets the strength of both the blurX and blurY properties simultaneously\n *\n * @member {number}\n * @default 2\n */\n prototypeAccessors.blur.get = function () {\n return this.blurXFilter.blur;\n };\n prototypeAccessors.blur.set = function (value) {\n this.blurXFilter.blur = this.blurYFilter.blur = value;\n };\n\n /**\n * Sets the strength of the blurX property\n *\n * @member {number}\n * @default 2\n */\n prototypeAccessors.blurX.get = function () {\n return this.blurXFilter.blur;\n };\n prototypeAccessors.blurX.set = function (value) {\n this.blurXFilter.blur = value;\n };\n\n /**\n * Sets the strength of the blurY property\n *\n * @member {number}\n * @default 2\n */\n prototypeAccessors.blurY.get = function () {\n return this.blurYFilter.blur;\n };\n prototypeAccessors.blurY.set = function (value) {\n this.blurYFilter.blur = value;\n };\n\n Object.defineProperties( BloomFilter.prototype, prototypeAccessors );\n\n return BloomFilter;\n}(Filter));\n\nexport { BloomFilter };\n//# sourceMappingURL=filter-bloom.esm.js.map\n","/*!\n * @pixi/filter-bulge-pinch - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-bulge-pinch is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"uniform float radius;\\nuniform float strength;\\nuniform vec2 center;\\nuniform sampler2D uSampler;\\nvarying vec2 vTextureCoord;\\n\\nuniform vec4 filterArea;\\nuniform vec4 filterClamp;\\nuniform vec2 dimensions;\\n\\nvoid main()\\n{\\n vec2 coord = vTextureCoord * filterArea.xy;\\n coord -= center * dimensions.xy;\\n float distance = length(coord);\\n if (distance < radius) {\\n float percent = distance / radius;\\n if (strength > 0.0) {\\n coord *= mix(1.0, smoothstep(0.0, radius / distance, percent), strength * 0.75);\\n } else {\\n coord *= mix(1.0, pow(percent, 1.0 + strength * 0.75) * radius / distance, 1.0 - percent);\\n }\\n }\\n coord += center * dimensions.xy;\\n coord /= filterArea.xy;\\n vec2 clampedCoord = clamp(coord, filterClamp.xy, filterClamp.zw);\\n vec4 color = texture2D(uSampler, clampedCoord);\\n if (coord != clampedCoord) {\\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\\n }\\n\\n gl_FragColor = color;\\n}\\n\";\n\n/**\n * @author Julien CLEREL @JuloxRox\n * original filter https://github.com/evanw/glfx.js/blob/master/src/filters/warp/bulgepinch.js by Evan Wallace : http://madebyevan.com/\n */\n\n/**\n * Bulges or pinches the image in a circle.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/bulge-pinch.gif)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-bulge-pinch|@pixi/filter-bulge-pinch}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {object} [options] Options to use for filter.\n * @param {PIXI.Point|Array} [options.center=[0,0]] The x and y coordinates of the center of the circle of effect.\n * @param {number} [options.radius=100] The radius of the circle of effect.\n * @param {number} [options.strength=1] -1 to 1 (-1 is strong pinch, 0 is no effect, 1 is strong bulge)\n */\nvar BulgePinchFilter = /*@__PURE__*/(function (Filter) {\n function BulgePinchFilter(options) {\n Filter.call(this, vertex, fragment);\n\n // @deprecated (center, radius, strength) args\n if (typeof options !== 'object') {\n var center = arguments[0];\n var radius = arguments[1];\n var strength = arguments[2];\n options = {};\n if (center !== undefined) {\n options.center = center;\n }\n if (radius !== undefined) {\n options.radius = radius;\n }\n if (strength !== undefined) {\n options.strength = strength;\n }\n }\n\n this.uniforms.dimensions = new Float32Array(2);\n\n Object.assign(this, {\n center: [0.5, 0.5],\n radius: 100,\n strength: 1,\n }, options);\n }\n\n if ( Filter ) BulgePinchFilter.__proto__ = Filter;\n BulgePinchFilter.prototype = Object.create( Filter && Filter.prototype );\n BulgePinchFilter.prototype.constructor = BulgePinchFilter;\n\n var prototypeAccessors = { radius: { configurable: true },strength: { configurable: true },center: { configurable: true } };\n\n BulgePinchFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms.dimensions[0] = input.filterFrame.width;\n this.uniforms.dimensions[1] = input.filterFrame.height;\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * The radius of the circle of effect.\n *\n * @member {number}\n */\n prototypeAccessors.radius.get = function () {\n return this.uniforms.radius;\n };\n prototypeAccessors.radius.set = function (value) {\n this.uniforms.radius = value;\n };\n\n /**\n * The strength of the effect. -1 to 1 (-1 is strong pinch, 0 is no effect, 1 is strong bulge)\n *\n * @member {number}\n */\n prototypeAccessors.strength.get = function () {\n return this.uniforms.strength;\n };\n prototypeAccessors.strength.set = function (value) {\n this.uniforms.strength = value;\n };\n\n /**\n * The x and y coordinates of the center of the circle of effect.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.center.get = function () {\n return this.uniforms.center;\n };\n prototypeAccessors.center.set = function (value) {\n this.uniforms.center = value;\n };\n\n Object.defineProperties( BulgePinchFilter.prototype, prototypeAccessors );\n\n return BulgePinchFilter;\n}(Filter));\n\nexport { BulgePinchFilter };\n//# sourceMappingURL=filter-bulge-pinch.esm.js.map\n","/*!\n * @pixi/filter-color-map - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-color-map is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Texture, Filter } from '@pixi/core';\nimport { SCALE_MODES } from '@pixi/constants';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform sampler2D colorMap;\\nuniform float _mix;\\nuniform float _size;\\nuniform float _sliceSize;\\nuniform float _slicePixelSize;\\nuniform float _sliceInnerSize;\\nvoid main() {\\n vec4 color = texture2D(uSampler, vTextureCoord.xy);\\n\\n vec4 adjusted;\\n if (color.a > 0.0) {\\n color.rgb /= color.a;\\n float innerWidth = _size - 1.0;\\n float zSlice0 = min(floor(color.b * innerWidth), innerWidth);\\n float zSlice1 = min(zSlice0 + 1.0, innerWidth);\\n float xOffset = _slicePixelSize * 0.5 + color.r * _sliceInnerSize;\\n float s0 = xOffset + (zSlice0 * _sliceSize);\\n float s1 = xOffset + (zSlice1 * _sliceSize);\\n float yOffset = _sliceSize * 0.5 + color.g * (1.0 - _sliceSize);\\n vec4 slice0Color = texture2D(colorMap, vec2(s0,yOffset));\\n vec4 slice1Color = texture2D(colorMap, vec2(s1,yOffset));\\n float zOffset = fract(color.b * innerWidth);\\n adjusted = mix(slice0Color, slice1Color, zOffset);\\n\\n color.rgb *= color.a;\\n }\\n gl_FragColor = vec4(mix(color, adjusted, _mix).rgb, color.a);\\n\\n}\";\n\n/**\n * The ColorMapFilter applies a color-map effect to an object.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/color-map.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-color-map|@pixi/filter-color-map}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {HTMLImageElement|HTMLCanvasElement|PIXI.BaseTexture|PIXI.Texture} [colorMap] - The colorMap texture of the filter.\n * @param {boolean} [nearest=false] - Whether use NEAREST for colorMap texture.\n * @param {number} [mix=1] - The mix from 0 to 1, where 0 is the original image and 1 is the color mapped image.\n */\nvar ColorMapFilter = /*@__PURE__*/(function (Filter) {\n function ColorMapFilter(colorMap, nearest, mix) {\n if ( nearest === void 0 ) nearest = false;\n if ( mix === void 0 ) mix = 1;\n\n Filter.call(this, vertex, fragment);\n\n this._size = 0;\n this._sliceSize = 0;\n this._slicePixelSize = 0;\n this._sliceInnerSize = 0;\n\n this._scaleMode = null;\n this._nearest = false;\n this.nearest = nearest;\n\n /**\n * The mix from 0 to 1, where 0 is the original image and 1 is the color mapped image.\n * @member {number}\n */\n this.mix = mix;\n\n this.colorMap = colorMap;\n }\n\n if ( Filter ) ColorMapFilter.__proto__ = Filter;\n ColorMapFilter.prototype = Object.create( Filter && Filter.prototype );\n ColorMapFilter.prototype.constructor = ColorMapFilter;\n\n var prototypeAccessors = { colorSize: { configurable: true },colorMap: { configurable: true },nearest: { configurable: true } };\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n ColorMapFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms._mix = this.mix;\n\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * the size of one color slice\n * @member {number}\n * @readonly\n */\n prototypeAccessors.colorSize.get = function () {\n return this._size;\n };\n\n /**\n * the colorMap texture\n * @member {PIXI.Texture}\n */\n prototypeAccessors.colorMap.get = function () {\n return this._colorMap;\n };\n prototypeAccessors.colorMap.set = function (colorMap) {\n if (!(colorMap instanceof Texture)) {\n colorMap = Texture.from(colorMap);\n }\n if (colorMap && colorMap.baseTexture) {\n colorMap.baseTexture.scaleMode = this._scaleMode;\n colorMap.baseTexture.mipmap = false;\n\n this._size = colorMap.height;\n this._sliceSize = 1 / this._size;\n this._slicePixelSize = this._sliceSize / this._size;\n this._sliceInnerSize = this._slicePixelSize * (this._size - 1);\n\n this.uniforms._size = this._size;\n this.uniforms._sliceSize = this._sliceSize;\n this.uniforms._slicePixelSize = this._slicePixelSize;\n this.uniforms._sliceInnerSize = this._sliceInnerSize;\n\n this.uniforms.colorMap = colorMap;\n }\n\n this._colorMap = colorMap;\n };\n\n /**\n * Whether use NEAREST for colorMap texture.\n * @member {boolean}\n */\n prototypeAccessors.nearest.get = function () {\n return this._nearest;\n };\n prototypeAccessors.nearest.set = function (nearest) {\n this._nearest = nearest;\n this._scaleMode = nearest ? SCALE_MODES.NEAREST : SCALE_MODES.LINEAR;\n\n var texture = this._colorMap;\n\n if (texture && texture.baseTexture) {\n texture.baseTexture._glTextures = {};\n\n texture.baseTexture.scaleMode = this._scaleMode;\n texture.baseTexture.mipmap = false;\n\n texture._updateID++;\n texture.baseTexture.emit('update', texture.baseTexture);\n }\n };\n\n /**\n * If the colorMap is based on canvas , and the content of canvas has changed,\n * then call `updateColorMap` for update texture.\n */\n ColorMapFilter.prototype.updateColorMap = function updateColorMap () {\n var texture = this._colorMap;\n\n if (texture && texture.baseTexture) {\n texture._updateID++;\n texture.baseTexture.emit('update', texture.baseTexture);\n\n this.colorMap = texture;\n }\n };\n\n /**\n * Destroys this filter\n *\n * @param {boolean} [destroyBase=false] Whether to destroy the base texture of colorMap as well\n */\n ColorMapFilter.prototype.destroy = function destroy (destroyBase) {\n if (this._colorMap) {\n this._colorMap.destroy(destroyBase);\n }\n Filter.prototype.destroy.call(this);\n };\n\n Object.defineProperties( ColorMapFilter.prototype, prototypeAccessors );\n\n return ColorMapFilter;\n}(Filter));\n\nexport { ColorMapFilter };\n//# sourceMappingURL=filter-color-map.esm.js.map\n","/*!\n * @pixi/filter-color-overlay - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-color-overlay is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { hex2rgb, rgb2hex } from '@pixi/utils';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec3 color;\\nvoid main(void) {\\n vec4 currentColor = texture2D(uSampler, vTextureCoord);\\n vec3 colorOverlay = color * currentColor.a;\\n gl_FragColor = vec4(colorOverlay.r, colorOverlay.g, colorOverlay.b, currentColor.a);\\n}\\n\";\n\n/**\n * Replace all colors within a source graphic with a single color.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/color-overlay.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-color-replace|@pixi/filter-color-replace}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number|Array} [color=0x000000] The resulting color, as a 3 component RGB e.g. [1.0, 0.5, 1.0]\n *\n * @example\n * // replaces red with blue\n * someSprite.filters = [new ColorOverlayFilter(\n * [1, 0, 0],\n * [0, 0, 1],\n * 0.001\n * )];\n *\n */\nvar ColorOverlayFilter = /*@__PURE__*/(function (Filter) {\n function ColorOverlayFilter(color) {\n if ( color === void 0 ) color = 0x000000;\n\n Filter.call(this, vertex, fragment);\n this.uniforms.color = new Float32Array(3);\n this.color = color;\n }\n\n if ( Filter ) ColorOverlayFilter.__proto__ = Filter;\n ColorOverlayFilter.prototype = Object.create( Filter && Filter.prototype );\n ColorOverlayFilter.prototype.constructor = ColorOverlayFilter;\n\n var prototypeAccessors = { color: { configurable: true } };\n\n /**\n * The resulting color, as a 3 component RGB e.g. [1.0, 0.5, 1.0]\n * @member {number|Array}\n * @default 0x000000\n */\n prototypeAccessors.color.set = function (value) {\n var arr = this.uniforms.color;\n if (typeof value === 'number') {\n hex2rgb(value, arr);\n this._color = value;\n }\n else {\n arr[0] = value[0];\n arr[1] = value[1];\n arr[2] = value[2];\n this._color = rgb2hex(arr);\n }\n };\n prototypeAccessors.color.get = function () {\n return this._color;\n };\n\n Object.defineProperties( ColorOverlayFilter.prototype, prototypeAccessors );\n\n return ColorOverlayFilter;\n}(Filter));\n\nexport { ColorOverlayFilter };\n//# sourceMappingURL=filter-color-overlay.esm.js.map\n","/*!\n * @pixi/filter-color-replace - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-color-replace is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { hex2rgb, rgb2hex } from '@pixi/utils';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec3 originalColor;\\nuniform vec3 newColor;\\nuniform float epsilon;\\nvoid main(void) {\\n vec4 currentColor = texture2D(uSampler, vTextureCoord);\\n vec3 colorDiff = originalColor - (currentColor.rgb / max(currentColor.a, 0.0000000001));\\n float colorDistance = length(colorDiff);\\n float doReplace = step(colorDistance, epsilon);\\n gl_FragColor = vec4(mix(currentColor.rgb, (newColor + colorDiff) * currentColor.a, doReplace), currentColor.a);\\n}\\n\";\n\n/**\n * ColorReplaceFilter, originally by mishaa, updated by timetocode\n * http://www.html5gamedevs.com/topic/10640-outline-a-sprite-change-certain-colors/?p=69966
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/color-replace.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-color-replace|@pixi/filter-color-replace}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number|Array} [originalColor=0xFF0000] The color that will be changed, as a 3 component RGB e.g. [1.0, 1.0, 1.0]\n * @param {number|Array} [newColor=0x000000] The resulting color, as a 3 component RGB e.g. [1.0, 0.5, 1.0]\n * @param {number} [epsilon=0.4] Tolerance/sensitivity of the floating-point comparison between colors (lower = more exact, higher = more inclusive)\n *\n * @example\n * // replaces true red with true blue\n * someSprite.filters = [new ColorReplaceFilter(\n * [1, 0, 0],\n * [0, 0, 1],\n * 0.001\n * )];\n * // replaces the RGB color 220, 220, 220 with the RGB color 225, 200, 215\n * someOtherSprite.filters = [new ColorReplaceFilter(\n * [220/255.0, 220/255.0, 220/255.0],\n * [225/255.0, 200/255.0, 215/255.0],\n * 0.001\n * )];\n * // replaces the RGB color 220, 220, 220 with the RGB color 225, 200, 215\n * someOtherSprite.filters = [new ColorReplaceFilter(0xdcdcdc, 0xe1c8d7, 0.001)];\n *\n */\nvar ColorReplaceFilter = /*@__PURE__*/(function (Filter) {\n function ColorReplaceFilter(originalColor, newColor, epsilon) {\n if ( originalColor === void 0 ) originalColor = 0xFF0000;\n if ( newColor === void 0 ) newColor = 0x000000;\n if ( epsilon === void 0 ) epsilon = 0.4;\n\n Filter.call(this, vertex, fragment);\n this.uniforms.originalColor = new Float32Array(3);\n this.uniforms.newColor = new Float32Array(3);\n this.originalColor = originalColor;\n this.newColor = newColor;\n this.epsilon = epsilon;\n }\n\n if ( Filter ) ColorReplaceFilter.__proto__ = Filter;\n ColorReplaceFilter.prototype = Object.create( Filter && Filter.prototype );\n ColorReplaceFilter.prototype.constructor = ColorReplaceFilter;\n\n var prototypeAccessors = { originalColor: { configurable: true },newColor: { configurable: true },epsilon: { configurable: true } };\n\n /**\n * The color that will be changed, as a 3 component RGB e.g. [1.0, 1.0, 1.0]\n * @member {number|Array}\n * @default 0xFF0000\n */\n prototypeAccessors.originalColor.set = function (value) {\n var arr = this.uniforms.originalColor;\n if (typeof value === 'number') {\n hex2rgb(value, arr);\n this._originalColor = value;\n }\n else {\n arr[0] = value[0];\n arr[1] = value[1];\n arr[2] = value[2];\n this._originalColor = rgb2hex(arr);\n }\n };\n prototypeAccessors.originalColor.get = function () {\n return this._originalColor;\n };\n\n /**\n * The resulting color, as a 3 component RGB e.g. [1.0, 0.5, 1.0]\n * @member {number|Array}\n * @default 0x000000\n */\n prototypeAccessors.newColor.set = function (value) {\n var arr = this.uniforms.newColor;\n if (typeof value === 'number') {\n hex2rgb(value, arr);\n this._newColor = value;\n }\n else {\n arr[0] = value[0];\n arr[1] = value[1];\n arr[2] = value[2];\n this._newColor = rgb2hex(arr);\n }\n };\n prototypeAccessors.newColor.get = function () {\n return this._newColor;\n };\n\n /**\n * Tolerance/sensitivity of the floating-point comparison between colors (lower = more exact, higher = more inclusive)\n * @member {number}\n * @default 0.4\n */\n prototypeAccessors.epsilon.set = function (value) {\n this.uniforms.epsilon = value;\n };\n prototypeAccessors.epsilon.get = function () {\n return this.uniforms.epsilon;\n };\n\n Object.defineProperties( ColorReplaceFilter.prototype, prototypeAccessors );\n\n return ColorReplaceFilter;\n}(Filter));\n\nexport { ColorReplaceFilter };\n//# sourceMappingURL=filter-color-replace.esm.js.map\n","/*!\n * @pixi/filter-convolution - v3.2.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-convolution is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"precision mediump float;\\n\\nvarying mediump vec2 vTextureCoord;\\n\\nuniform sampler2D uSampler;\\nuniform vec2 texelSize;\\nuniform float matrix[9];\\n\\nvoid main(void)\\n{\\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\\n\\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\\n\\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\\n\\n gl_FragColor =\\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\\n\\n gl_FragColor.a = c22.a;\\n}\\n\";\n\n/**\n * The ConvolutionFilter class applies a matrix convolution filter effect.\n * A convolution combines pixels in the input image with neighboring pixels to produce a new image.\n * A wide variety of image effects can be achieved through convolutions, including blurring, edge\n * detection, sharpening, embossing, and beveling. The matrix should be specified as a 9 point Array.\n * See https://docs.gimp.org/2.10/en/gimp-filter-convolution-matrix.html for more info.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/convolution.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-convolution|@pixi/filter-convolution}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param [matrix=[0,0,0,0,0,0,0,0,0]] {number[]} An array of values used for matrix transformation. Specified as a 9 point Array.\n * @param [width=200] {number} Width of the object you are transforming\n * @param [height=200] {number} Height of the object you are transforming\n */\nvar ConvolutionFilter = /*@__PURE__*/(function (Filter) {\n function ConvolutionFilter(matrix, width, height) {\n if ( width === void 0 ) width = 200;\n if ( height === void 0 ) height = 200;\n\n Filter.call(this, vertex, fragment);\n this.uniforms.texelSize = new Float32Array(2);\n this.uniforms.matrix = new Float32Array(9);\n if (matrix !== undefined) {\n this.matrix = matrix;\n }\n this.width = width;\n this.height = height;\n }\n\n if ( Filter ) ConvolutionFilter.__proto__ = Filter;\n ConvolutionFilter.prototype = Object.create( Filter && Filter.prototype );\n ConvolutionFilter.prototype.constructor = ConvolutionFilter;\n\n var prototypeAccessors = { matrix: { configurable: true },width: { configurable: true },height: { configurable: true } };\n\n /**\n * An array of values used for matrix transformation. Specified as a 9 point Array.\n *\n * @member {Array}\n */\n prototypeAccessors.matrix.get = function () {\n return this.uniforms.matrix;\n };\n prototypeAccessors.matrix.set = function (matrix) {\n var this$1 = this;\n\n matrix.forEach(function (v, i) { return this$1.uniforms.matrix[i] = v; });\n };\n\n /**\n * Width of the object you are transforming\n *\n * @member {number}\n */\n prototypeAccessors.width.get = function () {\n return 1/this.uniforms.texelSize[0];\n };\n prototypeAccessors.width.set = function (value) {\n this.uniforms.texelSize[0] = 1/value;\n };\n\n /**\n * Height of the object you are transforming\n *\n * @member {number}\n */\n prototypeAccessors.height.get = function () {\n return 1/this.uniforms.texelSize[1];\n };\n prototypeAccessors.height.set = function (value) {\n this.uniforms.texelSize[1] = 1/value;\n };\n\n Object.defineProperties( ConvolutionFilter.prototype, prototypeAccessors );\n\n return ConvolutionFilter;\n}(Filter));\n\nexport { ConvolutionFilter };\n//# sourceMappingURL=filter-convolution.esm.js.map\n","/*!\n * @pixi/filter-cross-hatch - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-cross-hatch is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"precision mediump float;\\n\\nvarying vec2 vTextureCoord;\\n\\nuniform sampler2D uSampler;\\n\\nvoid main(void)\\n{\\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\\n\\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\\n\\n if (lum < 1.00)\\n {\\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\\n {\\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\\n }\\n }\\n\\n if (lum < 0.75)\\n {\\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\\n {\\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\\n }\\n }\\n\\n if (lum < 0.50)\\n {\\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\\n {\\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\\n }\\n }\\n\\n if (lum < 0.3)\\n {\\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\\n {\\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\\n }\\n }\\n}\\n\";\n\n/**\n * A Cross Hatch effect filter.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/cross-hatch.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-cross-hatch|@pixi/filter-cross-hatch}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n */\nvar CrossHatchFilter = /*@__PURE__*/(function (Filter) {\n function CrossHatchFilter() {\n Filter.call(this, vertex, fragment);\n }\n\n if ( Filter ) CrossHatchFilter.__proto__ = Filter;\n CrossHatchFilter.prototype = Object.create( Filter && Filter.prototype );\n CrossHatchFilter.prototype.constructor = CrossHatchFilter;\n\n return CrossHatchFilter;\n}(Filter));\n\nexport { CrossHatchFilter };\n//# sourceMappingURL=filter-cross-hatch.esm.js.map\n","/*!\n * @pixi/filter-crt - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-crt is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\n\\nuniform vec4 filterArea;\\nuniform vec2 dimensions;\\n\\nconst float SQRT_2 = 1.414213;\\n\\nconst float light = 1.0;\\n\\nuniform float curvature;\\nuniform float lineWidth;\\nuniform float lineContrast;\\nuniform bool verticalLine;\\nuniform float noise;\\nuniform float noiseSize;\\n\\nuniform float vignetting;\\nuniform float vignettingAlpha;\\nuniform float vignettingBlur;\\n\\nuniform float seed;\\nuniform float time;\\n\\nfloat rand(vec2 co) {\\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\\n}\\n\\nvoid main(void)\\n{\\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\\n vec2 dir = vec2(vTextureCoord.xy - vec2(0.5, 0.5)) * filterArea.xy / dimensions;\\n\\n gl_FragColor = texture2D(uSampler, vTextureCoord);\\n vec3 rgb = gl_FragColor.rgb;\\n\\n if (noise > 0.0 && noiseSize > 0.0)\\n {\\n pixelCoord.x = floor(pixelCoord.x / noiseSize);\\n pixelCoord.y = floor(pixelCoord.y / noiseSize);\\n float _noise = rand(pixelCoord * noiseSize * seed) - 0.5;\\n rgb += _noise * noise;\\n }\\n\\n if (lineWidth > 0.0)\\n {\\n float _c = curvature > 0. ? curvature : 1.;\\n float k = curvature > 0. ?(length(dir * dir) * 0.25 * _c * _c + 0.935 * _c) : 1.;\\n vec2 uv = dir * k;\\n\\n float v = (verticalLine ? uv.x * dimensions.x : uv.y * dimensions.y) * min(1.0, 2.0 / lineWidth ) / _c;\\n float j = 1. + cos(v * 1.2 - time) * 0.5 * lineContrast;\\n rgb *= j;\\n float segment = verticalLine ? mod((dir.x + .5) * dimensions.x, 4.) : mod((dir.y + .5) * dimensions.y, 4.);\\n rgb *= 0.99 + ceil(segment) * 0.015;\\n }\\n\\n if (vignetting > 0.0)\\n {\\n float outter = SQRT_2 - vignetting * SQRT_2;\\n float darker = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + vignettingBlur * SQRT_2), 0.0, 1.0);\\n rgb *= darker + (1.0 - darker) * (1.0 - vignettingAlpha);\\n }\\n\\n gl_FragColor.rgb = rgb;\\n}\\n\";\n\n/**\n * The CRTFilter applies a CRT effect to an object.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/crt.gif)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-crt|@pixi/filter-crt}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n *\n * @param {object} [options] - The optional parameters of CRT effect\n * @param {number} [options.curvature=1.0] - Bent of interlaced lines, higher value means more bend\n * @param {number} [options.lineWidth=1.0] - Width of the interlaced lines\n * @param {number} [options.lineContrast=0.25] - Contrast of interlaced lines\n * @param {number} [options.verticalLine=false] - `true` is vertical lines, `false` is horizontal\n * @param {number} [options.noise=0.3] - Opacity/intensity of the noise effect between `0` and `1`\n * @param {number} [options.noiseSize=1.0] - The size of the noise particles\n * @param {number} [options.seed=0] - A seed value to apply to the random noise generation\n * @param {number} [options.vignetting=0.3] - The radius of the vignette effect, smaller\n * values produces a smaller vignette\n * @param {number} [options.vignettingAlpha=1.0] - Amount of opacity of vignette\n * @param {number} [options.vignettingBlur=0.3] - Blur intensity of the vignette\n * @param {number} [options.time=0] - For animating interlaced lines\n */\nvar CRTFilter = /*@__PURE__*/(function (Filter) {\n function CRTFilter(options) {\n Filter.call(this, vertex, fragment);\n this.uniforms.dimensions = new Float32Array(2);\n\n /**\n * For animating interlaced lines\n *\n * @member {number}\n * @default 0\n */\n this.time = 0;\n\n /**\n * A seed value to apply to the random noise generation\n *\n * @member {number}\n * @default 0\n */\n this.seed = 0;\n\n Object.assign(this, {\n curvature: 1.0,\n lineWidth: 1.0,\n lineContrast: 0.25,\n verticalLine: false,\n noise: 0.0,\n noiseSize: 1.0,\n seed: 0.0,\n vignetting: 0.3,\n vignettingAlpha: 1.0,\n vignettingBlur: 0.3,\n time: 0.0,\n }, options);\n }\n\n if ( Filter ) CRTFilter.__proto__ = Filter;\n CRTFilter.prototype = Object.create( Filter && Filter.prototype );\n CRTFilter.prototype.constructor = CRTFilter;\n\n var prototypeAccessors = { curvature: { configurable: true },lineWidth: { configurable: true },lineContrast: { configurable: true },verticalLine: { configurable: true },noise: { configurable: true },noiseSize: { configurable: true },vignetting: { configurable: true },vignettingAlpha: { configurable: true },vignettingBlur: { configurable: true } };\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n CRTFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms.dimensions[0] = input.filterFrame.width;\n this.uniforms.dimensions[1] = input.filterFrame.height;\n\n this.uniforms.seed = this.seed;\n this.uniforms.time = this.time;\n\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * Bent of interlaced lines, higher value means more bend\n *\n * @member {number}\n * @default 1\n */\n prototypeAccessors.curvature.set = function (value) {\n this.uniforms.curvature = value;\n };\n prototypeAccessors.curvature.get = function () {\n return this.uniforms.curvature;\n };\n\n /**\n * Width of interlaced lines\n *\n * @member {number}\n * @default 1\n */\n prototypeAccessors.lineWidth.set = function (value) {\n this.uniforms.lineWidth = value;\n };\n prototypeAccessors.lineWidth.get = function () {\n return this.uniforms.lineWidth;\n };\n\n /**\n * Contrast of interlaced lines\n *\n * @member {number}\n * @default 0.25\n */\n prototypeAccessors.lineContrast.set = function (value) {\n this.uniforms.lineContrast = value;\n };\n prototypeAccessors.lineContrast.get = function () {\n return this.uniforms.lineContrast;\n };\n\n /**\n * `true` for vertical lines, `false` for horizontal lines\n *\n * @member {boolean}\n * @default false\n */\n prototypeAccessors.verticalLine.set = function (value) {\n this.uniforms.verticalLine = value;\n };\n prototypeAccessors.verticalLine.get = function () {\n return this.uniforms.verticalLine;\n };\n\n /**\n * Opacity/intensity of the noise effect between `0` and `1`\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.noise.set = function (value) {\n this.uniforms.noise = value;\n };\n prototypeAccessors.noise.get = function () {\n return this.uniforms.noise;\n };\n\n /**\n * The size of the noise particles\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.noiseSize.set = function (value) {\n this.uniforms.noiseSize = value;\n };\n prototypeAccessors.noiseSize.get = function () {\n return this.uniforms.noiseSize;\n };\n\n /**\n * The radius of the vignette effect, smaller\n * values produces a smaller vignette\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.vignetting.set = function (value) {\n this.uniforms.vignetting = value;\n };\n prototypeAccessors.vignetting.get = function () {\n return this.uniforms.vignetting;\n };\n\n /**\n * Amount of opacity of vignette\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.vignettingAlpha.set = function (value) {\n this.uniforms.vignettingAlpha = value;\n };\n prototypeAccessors.vignettingAlpha.get = function () {\n return this.uniforms.vignettingAlpha;\n };\n\n /**\n * Blur intensity of the vignette\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.vignettingBlur.set = function (value) {\n this.uniforms.vignettingBlur = value;\n };\n prototypeAccessors.vignettingBlur.get = function () {\n return this.uniforms.vignettingBlur;\n };\n\n Object.defineProperties( CRTFilter.prototype, prototypeAccessors );\n\n return CRTFilter;\n}(Filter));\n\nexport { CRTFilter };\n//# sourceMappingURL=filter-crt.esm.js.map\n","/*!\n * @pixi/filter-dot - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-dot is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"precision mediump float;\\n\\nvarying vec2 vTextureCoord;\\nvarying vec4 vColor;\\n\\nuniform vec4 filterArea;\\nuniform sampler2D uSampler;\\n\\nuniform float angle;\\nuniform float scale;\\n\\nfloat pattern()\\n{\\n float s = sin(angle), c = cos(angle);\\n vec2 tex = vTextureCoord * filterArea.xy;\\n vec2 point = vec2(\\n c * tex.x - s * tex.y,\\n s * tex.x + c * tex.y\\n ) * scale;\\n return (sin(point.x) * sin(point.y)) * 4.0;\\n}\\n\\nvoid main()\\n{\\n vec4 color = texture2D(uSampler, vTextureCoord);\\n float average = (color.r + color.g + color.b) / 3.0;\\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\\n}\\n\";\n\n/**\n * @author Mat Groves http://matgroves.com/ @Doormat23\n * original filter: https://github.com/evanw/glfx.js/blob/master/src/filters/fun/dotscreen.js\n */\n\n/**\n * This filter applies a dotscreen effect making display objects appear to be made out of\n * black and white halftone dots like an old printer.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/dot.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-dot|@pixi/filter-dot}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number} [scale=1] The scale of the effect.\n * @param {number} [angle=5] The radius of the effect.\n */\nvar DotFilter = /*@__PURE__*/(function (Filter) {\n function DotFilter(scale, angle) {\n if ( scale === void 0 ) scale = 1;\n if ( angle === void 0 ) angle = 5;\n\n Filter.call(this, vertex, fragment);\n this.scale = scale;\n this.angle = angle;\n }\n\n if ( Filter ) DotFilter.__proto__ = Filter;\n DotFilter.prototype = Object.create( Filter && Filter.prototype );\n DotFilter.prototype.constructor = DotFilter;\n\n var prototypeAccessors = { scale: { configurable: true },angle: { configurable: true } };\n\n /**\n * The scale of the effect.\n * @member {number}\n * @default 1\n */\n prototypeAccessors.scale.get = function () {\n return this.uniforms.scale;\n };\n prototypeAccessors.scale.set = function (value) {\n this.uniforms.scale = value;\n };\n\n /**\n * The radius of the effect.\n * @member {number}\n * @default 5\n */\n prototypeAccessors.angle.get = function () {\n return this.uniforms.angle;\n };\n prototypeAccessors.angle.set = function (value) {\n this.uniforms.angle = value;\n };\n\n Object.defineProperties( DotFilter.prototype, prototypeAccessors );\n\n return DotFilter;\n}(Filter));\n\nexport { DotFilter };\n//# sourceMappingURL=filter-dot.esm.js.map\n","/*!\n * @pixi/filter-drop-shadow - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-drop-shadow is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { KawaseBlurFilter } from '@pixi/filter-kawase-blur';\nimport { Filter } from '@pixi/core';\nimport { settings } from '@pixi/settings';\nimport { DEG_TO_RAD, Point } from '@pixi/math';\nimport { rgb2hex, hex2rgb } from '@pixi/utils';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform float alpha;\\nuniform vec3 color;\\n\\nuniform vec2 shift;\\nuniform vec4 inputSize;\\n\\nvoid main(void){\\n vec4 sample = texture2D(uSampler, vTextureCoord - shift * inputSize.zw);\\n\\n // Premultiply alpha\\n sample.rgb = color.rgb * sample.a;\\n\\n // alpha user alpha\\n sample *= alpha;\\n\\n gl_FragColor = sample;\\n}\";\n\n/**\n * Drop shadow filter.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/drop-shadow.png)\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-drop-shadow|@pixi/filter-drop-shadow}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {object} [options] Filter options\n * @param {number} [options.rotation=45] The angle of the shadow in degrees.\n * @param {number} [options.distance=5] Distance of shadow\n * @param {number} [options.color=0x000000] Color of the shadow\n * @param {number} [options.alpha=0.5] Alpha of the shadow\n * @param {number} [options.shadowOnly=false] Whether render shadow only\n * @param {number} [options.blur=2] - Sets the strength of the Blur properties simultaneously\n * @param {number} [options.quality=3] - The quality of the Blur filter.\n * @param {number[]} [options.kernels=null] - The kernels of the Blur filter.\n * @param {number|number[]|PIXI.Point} [options.pixelSize=1] - the pixelSize of the Blur filter.\n * @param {number} [options.resolution=PIXI.settings.FILTER_RESOLUTION] - The resolution of the Blur filter.\n */\nvar DropShadowFilter = /*@__PURE__*/(function (Filter) {\n function DropShadowFilter(options) {\n\n // Fallback support for ctor: (rotation, distance, blur, color, alpha)\n if (options && options.constructor !== Object) {\n // eslint-disable-next-line no-console\n console.warn('DropShadowFilter now uses options instead of (rotation, distance, blur, color, alpha)');\n options = { rotation: options };\n if (arguments[1] !== undefined) {\n options.distance = arguments[1];\n }\n if (arguments[2] !== undefined) {\n options.blur = arguments[2];\n }\n if (arguments[3] !== undefined) {\n options.color = arguments[3];\n }\n if (arguments[4] !== undefined) {\n options.alpha = arguments[4];\n }\n }\n\n options = Object.assign({\n rotation: 45,\n distance: 5,\n color: 0x000000,\n alpha: 0.5,\n shadowOnly: false,\n kernels: null,\n blur: 2,\n quality: 3,\n pixelSize: 1,\n resolution: settings.FILTER_RESOLUTION,\n }, options);\n\n Filter.call(this);\n\n var kernels = options.kernels;\n var blur = options.blur;\n var quality = options.quality;\n var pixelSize = options.pixelSize;\n var resolution = options.resolution;\n\n this._tintFilter = new Filter(vertex, fragment);\n this._tintFilter.uniforms.color = new Float32Array(4);\n this._tintFilter.uniforms.shift = new Point();\n this._tintFilter.resolution = resolution;\n this._blurFilter = kernels ?\n new KawaseBlurFilter(kernels) :\n new KawaseBlurFilter(blur, quality);\n\n this.pixelSize = pixelSize;\n this.resolution = resolution;\n\n var shadowOnly = options.shadowOnly;\n var rotation = options.rotation;\n var distance = options.distance;\n var alpha = options.alpha;\n var color = options.color;\n\n this.shadowOnly = shadowOnly;\n this.rotation = rotation;\n this.distance = distance;\n this.alpha = alpha;\n this.color = color;\n\n this._updatePadding();\n }\n\n if ( Filter ) DropShadowFilter.__proto__ = Filter;\n DropShadowFilter.prototype = Object.create( Filter && Filter.prototype );\n DropShadowFilter.prototype.constructor = DropShadowFilter;\n\n var prototypeAccessors = { resolution: { configurable: true },distance: { configurable: true },rotation: { configurable: true },alpha: { configurable: true },color: { configurable: true },kernels: { configurable: true },blur: { configurable: true },quality: { configurable: true },pixelSize: { configurable: true } };\n\n DropShadowFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n var target = filterManager.getFilterTexture();\n\n this._tintFilter.apply(filterManager, input, target, 1);\n this._blurFilter.apply(filterManager, target, output, clear);\n\n if (this.shadowOnly !== true) {\n filterManager.applyFilter(this, input, output, 0);\n }\n\n filterManager.returnFilterTexture(target);\n };\n\n /**\n * Recalculate the proper padding amount.\n * @private\n */\n DropShadowFilter.prototype._updatePadding = function _updatePadding () {\n this.padding = this.distance + (this.blur * 2);\n };\n\n /**\n * Update the transform matrix of offset angle.\n * @private\n */\n DropShadowFilter.prototype._updateShift = function _updateShift () {\n this._tintFilter.uniforms.shift.set(\n this.distance * Math.cos(this.angle),\n this.distance * Math.sin(this.angle)\n );\n };\n\n /**\n * The resolution of the filter.\n *\n * @member {number}\n * @default PIXI.settings.FILTER_RESOLUTION\n */\n prototypeAccessors.resolution.get = function () {\n return this._resolution;\n };\n prototypeAccessors.resolution.set = function (value) {\n this._resolution = value;\n\n if (this._tintFilter) {\n this._tintFilter.resolution = value;\n }\n if (this._blurFilter) {\n this._blurFilter.resolution = value;\n }\n };\n\n /**\n * Distance offset of the shadow\n * @member {number}\n * @default 5\n */\n prototypeAccessors.distance.get = function () {\n return this._distance;\n };\n prototypeAccessors.distance.set = function (value) {\n this._distance = value;\n this._updatePadding();\n this._updateShift();\n };\n\n /**\n * The angle of the shadow in degrees\n * @member {number}\n * @default 2\n */\n prototypeAccessors.rotation.get = function () {\n return this.angle / DEG_TO_RAD;\n };\n prototypeAccessors.rotation.set = function (value) {\n this.angle = value * DEG_TO_RAD;\n this._updateShift();\n };\n\n /**\n * The alpha of the shadow\n * @member {number}\n * @default 1\n */\n prototypeAccessors.alpha.get = function () {\n return this._tintFilter.uniforms.alpha;\n };\n prototypeAccessors.alpha.set = function (value) {\n this._tintFilter.uniforms.alpha = value;\n };\n\n /**\n * The color of the shadow.\n * @member {number}\n * @default 0x000000\n */\n prototypeAccessors.color.get = function () {\n return rgb2hex(this._tintFilter.uniforms.color);\n };\n prototypeAccessors.color.set = function (value) {\n hex2rgb(value, this._tintFilter.uniforms.color);\n };\n\n /**\n * Sets the kernels of the Blur Filter\n *\n * @member {number[]}\n */\n prototypeAccessors.kernels.get = function () {\n return this._blurFilter.kernels;\n };\n prototypeAccessors.kernels.set = function (value) {\n this._blurFilter.kernels = value;\n };\n\n /**\n * The blur of the shadow\n * @member {number}\n * @default 2\n */\n prototypeAccessors.blur.get = function () {\n return this._blurFilter.blur;\n };\n prototypeAccessors.blur.set = function (value) {\n this._blurFilter.blur = value;\n this._updatePadding();\n };\n\n /**\n * Sets the quality of the Blur Filter\n *\n * @member {number}\n * @default 4\n */\n prototypeAccessors.quality.get = function () {\n return this._blurFilter.quality;\n };\n prototypeAccessors.quality.set = function (value) {\n this._blurFilter.quality = value;\n };\n\n /**\n * Sets the pixelSize of the Kawase Blur filter\n *\n * @member {number|number[]|PIXI.Point}\n * @default 1\n */\n prototypeAccessors.pixelSize.get = function () {\n return this._blurFilter.pixelSize;\n };\n prototypeAccessors.pixelSize.set = function (value) {\n this._blurFilter.pixelSize = value;\n };\n\n Object.defineProperties( DropShadowFilter.prototype, prototypeAccessors );\n\n return DropShadowFilter;\n}(Filter));\n\nexport { DropShadowFilter };\n//# sourceMappingURL=filter-drop-shadow.esm.js.map\n","/*!\n * @pixi/filter-emboss - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-emboss is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"precision mediump float;\\n\\nvarying vec2 vTextureCoord;\\n\\nuniform sampler2D uSampler;\\nuniform float strength;\\nuniform vec4 filterArea;\\n\\n\\nvoid main(void)\\n{\\n\\tvec2 onePixel = vec2(1.0 / filterArea);\\n\\n\\tvec4 color;\\n\\n\\tcolor.rgb = vec3(0.5);\\n\\n\\tcolor -= texture2D(uSampler, vTextureCoord - onePixel) * strength;\\n\\tcolor += texture2D(uSampler, vTextureCoord + onePixel) * strength;\\n\\n\\tcolor.rgb = vec3((color.r + color.g + color.b) / 3.0);\\n\\n\\tfloat alpha = texture2D(uSampler, vTextureCoord).a;\\n\\n\\tgl_FragColor = vec4(color.rgb * alpha, alpha);\\n}\\n\";\n\n/**\n * An RGB Split Filter.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/emboss.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-emboss|@pixi/filter-emboss}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number} [strength=5] Strength of the emboss.\n */\nvar EmbossFilter = /*@__PURE__*/(function (Filter) {\n function EmbossFilter(strength){\n if ( strength === void 0 ) strength = 5;\n\n Filter.call(this, vertex, fragment);\n this.strength = strength;\n }\n\n if ( Filter ) EmbossFilter.__proto__ = Filter;\n EmbossFilter.prototype = Object.create( Filter && Filter.prototype );\n EmbossFilter.prototype.constructor = EmbossFilter;\n\n var prototypeAccessors = { strength: { configurable: true } };\n\n /**\n * Strength of emboss.\n *\n * @member {number}\n */\n prototypeAccessors.strength.get = function () {\n return this.uniforms.strength;\n };\n prototypeAccessors.strength.set = function (value) {\n this.uniforms.strength = value;\n };\n\n Object.defineProperties( EmbossFilter.prototype, prototypeAccessors );\n\n return EmbossFilter;\n}(Filter));\n\nexport { EmbossFilter };\n//# sourceMappingURL=filter-emboss.esm.js.map\n","/*!\n * @pixi/filter-glitch - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-glitch is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter, Texture } from '@pixi/core';\nimport { SCALE_MODES } from '@pixi/constants';\nimport { DEG_TO_RAD } from '@pixi/math';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"// precision highp float;\\n\\nvarying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\n\\nuniform vec4 filterArea;\\nuniform vec4 filterClamp;\\nuniform vec2 dimensions;\\nuniform float aspect;\\n\\nuniform sampler2D displacementMap;\\nuniform float offset;\\nuniform float sinDir;\\nuniform float cosDir;\\nuniform int fillMode;\\n\\nuniform float seed;\\nuniform vec2 red;\\nuniform vec2 green;\\nuniform vec2 blue;\\n\\nconst int TRANSPARENT = 0;\\nconst int ORIGINAL = 1;\\nconst int LOOP = 2;\\nconst int CLAMP = 3;\\nconst int MIRROR = 4;\\n\\nvoid main(void)\\n{\\n vec2 coord = (vTextureCoord * filterArea.xy) / dimensions;\\n\\n if (coord.x > 1.0 || coord.y > 1.0) {\\n return;\\n }\\n\\n float cx = coord.x - 0.5;\\n float cy = (coord.y - 0.5) * aspect;\\n float ny = (-sinDir * cx + cosDir * cy) / aspect + 0.5;\\n\\n // displacementMap: repeat\\n // ny = ny > 1.0 ? ny - 1.0 : (ny < 0.0 ? 1.0 + ny : ny);\\n\\n // displacementMap: mirror\\n ny = ny > 1.0 ? 2.0 - ny : (ny < 0.0 ? -ny : ny);\\n\\n vec4 dc = texture2D(displacementMap, vec2(0.5, ny));\\n\\n float displacement = (dc.r - dc.g) * (offset / filterArea.x);\\n\\n coord = vTextureCoord + vec2(cosDir * displacement, sinDir * displacement * aspect);\\n\\n if (fillMode == CLAMP) {\\n coord = clamp(coord, filterClamp.xy, filterClamp.zw);\\n } else {\\n if( coord.x > filterClamp.z ) {\\n if (fillMode == TRANSPARENT) {\\n discard;\\n } else if (fillMode == LOOP) {\\n coord.x -= filterClamp.z;\\n } else if (fillMode == MIRROR) {\\n coord.x = filterClamp.z * 2.0 - coord.x;\\n }\\n } else if( coord.x < filterClamp.x ) {\\n if (fillMode == TRANSPARENT) {\\n discard;\\n } else if (fillMode == LOOP) {\\n coord.x += filterClamp.z;\\n } else if (fillMode == MIRROR) {\\n coord.x *= -filterClamp.z;\\n }\\n }\\n\\n if( coord.y > filterClamp.w ) {\\n if (fillMode == TRANSPARENT) {\\n discard;\\n } else if (fillMode == LOOP) {\\n coord.y -= filterClamp.w;\\n } else if (fillMode == MIRROR) {\\n coord.y = filterClamp.w * 2.0 - coord.y;\\n }\\n } else if( coord.y < filterClamp.y ) {\\n if (fillMode == TRANSPARENT) {\\n discard;\\n } else if (fillMode == LOOP) {\\n coord.y += filterClamp.w;\\n } else if (fillMode == MIRROR) {\\n coord.y *= -filterClamp.w;\\n }\\n }\\n }\\n\\n gl_FragColor.r = texture2D(uSampler, coord + red * (1.0 - seed * 0.4) / filterArea.xy).r;\\n gl_FragColor.g = texture2D(uSampler, coord + green * (1.0 - seed * 0.3) / filterArea.xy).g;\\n gl_FragColor.b = texture2D(uSampler, coord + blue * (1.0 - seed * 0.2) / filterArea.xy).b;\\n gl_FragColor.a = texture2D(uSampler, coord).a;\\n}\\n\";\n\n/**\n * The GlitchFilter applies a glitch effect to an object.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/glitch.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-glitch|@pixi/filter-glitch}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {object} [options] - The more optional parameters of the filter.\n * @param {number} [options.slices=5] - The maximum number of slices.\n * @param {number} [options.offset=100] - The maximum offset amount of slices.\n * @param {number} [options.direction=0] - The angle in degree of the offset of slices.\n * @param {number} [options.fillMode=0] - The fill mode of the space after the offset. Acceptable values:\n * - `0` {@link PIXI.filters.GlitchFilter.TRANSPARENT TRANSPARENT}\n * - `1` {@link PIXI.filters.GlitchFilter.ORIGINAL ORIGINAL}\n * - `2` {@link PIXI.filters.GlitchFilter.LOOP LOOP}\n * - `3` {@link PIXI.filters.GlitchFilter.CLAMP CLAMP}\n * - `4` {@link PIXI.filters.GlitchFilter.MIRROR MIRROR}\n * @param {number} [options.seed=0] - A seed value for randomizing glitch effect.\n * @param {number} [options.average=false] - `true` will divide the bands roughly based on equal amounts\n * where as setting to `false` will vary the band sizes dramatically (more random looking).\n * @param {number} [options.minSize=8] - Minimum size of individual slice. Segment of total `sampleSize`\n * @param {number} [options.sampleSize=512] - The resolution of the displacement map texture.\n * @param {number} [options.red=[0,0]] - Red channel offset\n * @param {number} [options.green=[0,0]] - Green channel offset.\n * @param {number} [options.blue=[0,0]] - Blue channel offset.\n */\nvar GlitchFilter = /*@__PURE__*/(function (Filter) {\n function GlitchFilter(options) {\n if ( options === void 0 ) options = {};\n\n\n Filter.call(this, vertex, fragment);\n this.uniforms.dimensions = new Float32Array(2);\n\n options = Object.assign({\n slices: 5,\n offset: 100,\n direction: 0,\n fillMode: 0,\n average: false,\n seed: 0,\n red: [0, 0],\n green: [0, 0],\n blue: [0, 0],\n minSize: 8,\n sampleSize: 512,\n }, options);\n\n this.direction = options.direction;\n this.red = options.red;\n this.green = options.green;\n this.blue = options.blue;\n\n /**\n * The maximum offset value for each of the slices.\n *\n * @member {number}\n */\n this.offset = options.offset;\n\n /**\n * The fill mode of the space after the offset.\n *\n * @member {number}\n */\n this.fillMode = options.fillMode;\n\n /**\n * `true` will divide the bands roughly based on equal amounts\n * where as setting to `false` will vary the band sizes dramatically (more random looking).\n *\n * @member {boolean}\n * @default false\n */\n this.average = options.average;\n\n /**\n * A seed value for randomizing color offset. Animating\n * this value to `Math.random()` produces a twitching effect.\n *\n * @member {number}\n */\n this.seed = options.seed;\n\n /**\n * Minimum size of slices as a portion of the `sampleSize`\n *\n * @member {number}\n */\n this.minSize = options.minSize;\n\n /**\n * Height of the displacement map canvas.\n *\n * @member {number}\n * @readonly\n */\n this.sampleSize = options.sampleSize;\n\n /**\n * Internally generated canvas.\n *\n * @member {HTMLCanvasElement} _canvas\n * @private\n */\n this._canvas = document.createElement('canvas');\n this._canvas.width = 4;\n this._canvas.height = this.sampleSize;\n\n /**\n * The displacement map is used to generate the bands.\n * If using your own texture, `slices` will be ignored.\n *\n * @member {PIXI.Texture}\n * @readonly\n */\n this.texture = Texture.from(this._canvas, { scaleMode: SCALE_MODES.NEAREST });\n\n /**\n * Internal number of slices\n * @member {number}\n * @private\n */\n this._slices = 0;\n\n // Set slices\n this.slices = options.slices;\n }\n\n if ( Filter ) GlitchFilter.__proto__ = Filter;\n GlitchFilter.prototype = Object.create( Filter && Filter.prototype );\n GlitchFilter.prototype.constructor = GlitchFilter;\n\n var prototypeAccessors = { sizes: { configurable: true },offsets: { configurable: true },slices: { configurable: true },direction: { configurable: true },red: { configurable: true },green: { configurable: true },blue: { configurable: true } };\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n GlitchFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n\n var width = input.filterFrame.width;\n var height = input.filterFrame.height;\n\n this.uniforms.dimensions[0] = width;\n this.uniforms.dimensions[1] = height;\n this.uniforms.aspect = height / width;\n\n this.uniforms.seed = this.seed;\n this.uniforms.offset = this.offset;\n this.uniforms.fillMode = this.fillMode;\n\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * Randomize the slices size (heights).\n *\n * @private\n */\n GlitchFilter.prototype._randomizeSizes = function _randomizeSizes () {\n var arr = this._sizes;\n var last = this._slices - 1;\n var size = this.sampleSize;\n var min = Math.min(this.minSize / size, 0.9 / this._slices);\n\n if (this.average) {\n var count = this._slices;\n var rest = 1;\n\n for (var i = 0; i < last; i++) {\n var averageWidth = rest / (count - i);\n var w = Math.max(averageWidth * (1 - Math.random() * 0.6), min);\n arr[i] = w;\n rest -= w;\n }\n arr[last] = rest;\n }\n else {\n var rest$1 = 1;\n var ratio = Math.sqrt(1 / this._slices);\n\n for (var i$1 = 0; i$1 < last; i$1++) {\n var w$1 = Math.max(ratio * rest$1 * Math.random(), min);\n arr[i$1] = w$1;\n rest$1 -= w$1;\n }\n arr[last] = rest$1;\n }\n\n this.shuffle();\n };\n\n /**\n * Shuffle the sizes of the slices, advanced usage.\n */\n GlitchFilter.prototype.shuffle = function shuffle () {\n var arr = this._sizes;\n var last = this._slices - 1;\n\n // shuffle\n for (var i = last; i > 0; i--) {\n var rand = (Math.random() * i) >> 0;\n var temp = arr[i];\n\n arr[i] = arr[rand];\n arr[rand] = temp;\n }\n };\n\n /**\n * Randomize the values for offset from -1 to 1\n *\n * @private\n */\n GlitchFilter.prototype._randomizeOffsets = function _randomizeOffsets () {\n for (var i = 0 ; i < this._slices; i++) {\n this._offsets[i] = Math.random() * (Math.random() < 0.5 ? -1 : 1);\n }\n };\n\n /**\n * Regenerating random size, offsets for slices.\n */\n GlitchFilter.prototype.refresh = function refresh () {\n this._randomizeSizes();\n this._randomizeOffsets();\n this.redraw();\n };\n\n /**\n * Redraw displacement bitmap texture, advanced usage.\n */\n GlitchFilter.prototype.redraw = function redraw () {\n var size = this.sampleSize;\n var texture = this.texture;\n var ctx = this._canvas.getContext('2d');\n ctx.clearRect(0, 0, 8, size);\n\n var offset;\n var y = 0;\n\n for (var i = 0 ; i < this._slices; i++) {\n offset = Math.floor(this._offsets[i] * 256);\n var height = this._sizes[i] * size;\n var red = offset > 0 ? offset : 0;\n var green = offset < 0 ? -offset : 0;\n ctx.fillStyle = 'rgba(' + red + ', ' + green + ', 0, 1)';\n ctx.fillRect(0, y >> 0, size, height + 1 >> 0);\n y += height;\n }\n\n texture.baseTexture.update();\n this.uniforms.displacementMap = texture;\n };\n\n /**\n * Manually custom slices size (height) of displacement bitmap\n *\n * @member {number[]}\n */\n prototypeAccessors.sizes.set = function (sizes) {\n var len = Math.min(this._slices, sizes.length);\n\n for (var i = 0; i < len; i++){\n this._sizes[i] = sizes[i];\n }\n };\n prototypeAccessors.sizes.get = function () {\n return this._sizes;\n };\n\n /**\n * Manually set custom slices offset of displacement bitmap, this is\n * a collection of values from -1 to 1. To change the max offset value\n * set `offset`.\n *\n * @member {number[]}\n */\n prototypeAccessors.offsets.set = function (offsets) {\n var len = Math.min(this._slices, offsets.length);\n\n for (var i = 0; i < len; i++){\n this._offsets[i] = offsets[i];\n }\n };\n prototypeAccessors.offsets.get = function () {\n return this._offsets;\n };\n\n /**\n * The count of slices.\n * @member {number}\n * @default 5\n */\n prototypeAccessors.slices.get = function () {\n return this._slices;\n };\n prototypeAccessors.slices.set = function (value) {\n if (this._slices === value) {\n return;\n }\n this._slices = value;\n this.uniforms.slices = value;\n this._sizes = this.uniforms.slicesWidth = new Float32Array(value);\n this._offsets = this.uniforms.slicesOffset = new Float32Array(value);\n this.refresh();\n };\n\n /**\n * The angle in degree of the offset of slices.\n * @member {number}\n * @default 0\n */\n prototypeAccessors.direction.get = function () {\n return this._direction;\n };\n prototypeAccessors.direction.set = function (value) {\n if (this._direction === value) {\n return;\n }\n this._direction = value;\n\n var radians = value * DEG_TO_RAD;\n\n this.uniforms.sinDir = Math.sin(radians);\n this.uniforms.cosDir = Math.cos(radians);\n };\n\n /**\n * Red channel offset.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.red.get = function () {\n return this.uniforms.red;\n };\n prototypeAccessors.red.set = function (value) {\n this.uniforms.red = value;\n };\n\n /**\n * Green channel offset.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.green.get = function () {\n return this.uniforms.green;\n };\n prototypeAccessors.green.set = function (value) {\n this.uniforms.green = value;\n };\n\n /**\n * Blue offset.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.blue.get = function () {\n return this.uniforms.blue;\n };\n prototypeAccessors.blue.set = function (value) {\n this.uniforms.blue = value;\n };\n\n /**\n * Removes all references\n */\n GlitchFilter.prototype.destroy = function destroy () {\n this.texture.destroy(true);\n this.texture = null;\n this._canvas = null;\n this.red = null;\n this.green = null;\n this.blue = null;\n this._sizes = null;\n this._offsets = null;\n };\n\n Object.defineProperties( GlitchFilter.prototype, prototypeAccessors );\n\n return GlitchFilter;\n}(Filter));\n\n/**\n * Fill mode as transparent\n *\n * @constant\n * @static\n * @member {int} TRANSPARENT\n * @memberof PIXI.filters.GlitchFilter\n * @readonly\n */\nGlitchFilter.TRANSPARENT = 0;\n\n/**\n * Fill mode as original\n *\n * @constant\n * @static\n * @member {int} ORIGINAL\n * @memberof PIXI.filters.GlitchFilter\n * @readonly\n */\nGlitchFilter.ORIGINAL = 1;\n\n/**\n * Fill mode as loop\n *\n * @constant\n * @static\n * @member {int} LOOP\n * @memberof PIXI.filters.GlitchFilter\n * @readonly\n */\nGlitchFilter.LOOP = 2;\n\n/**\n * Fill mode as clamp\n *\n * @constant\n * @static\n * @member {int} CLAMP\n * @memberof PIXI.filters.GlitchFilter\n * @readonly\n */\nGlitchFilter.CLAMP = 3;\n\n/**\n * Fill mode as mirror\n *\n * @constant\n * @static\n * @member {int} MIRROR\n * @memberof PIXI.filters.GlitchFilter\n * @readonly\n */\nGlitchFilter.MIRROR = 4;\n\nexport { GlitchFilter };\n//# sourceMappingURL=filter-glitch.esm.js.map\n","/*!\n * @pixi/filter-glow - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-glow is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { rgb2hex, hex2rgb } from '@pixi/utils';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nvarying vec4 vColor;\\n\\nuniform sampler2D uSampler;\\n\\nuniform float outerStrength;\\nuniform float innerStrength;\\n\\nuniform vec4 glowColor;\\n\\nuniform vec4 filterArea;\\nuniform vec4 filterClamp;\\nuniform bool knockout;\\n\\nconst float PI = 3.14159265358979323846264;\\n\\nconst float DIST = __DIST__;\\nconst float ANGLE_STEP_SIZE = min(__ANGLE_STEP_SIZE__, PI * 2.0);\\nconst float ANGLE_STEP_NUM = ceil(PI * 2.0 / ANGLE_STEP_SIZE);\\n\\nconst float MAX_TOTAL_ALPHA = ANGLE_STEP_NUM * DIST * (DIST + 1.0) / 2.0;\\n\\nvoid main(void) {\\n vec2 px = vec2(1.0 / filterArea.x, 1.0 / filterArea.y);\\n\\n float totalAlpha = 0.0;\\n\\n vec2 direction;\\n vec2 displaced;\\n vec4 curColor;\\n\\n for (float angle = 0.0; angle < PI * 2.0; angle += ANGLE_STEP_SIZE) {\\n direction = vec2(cos(angle), sin(angle)) * px;\\n\\n for (float curDistance = 0.0; curDistance < DIST; curDistance++) {\\n displaced = clamp(vTextureCoord + direction * \\n (curDistance + 1.0), filterClamp.xy, filterClamp.zw);\\n\\n curColor = texture2D(uSampler, displaced);\\n\\n totalAlpha += (DIST - curDistance) * curColor.a;\\n }\\n }\\n \\n curColor = texture2D(uSampler, vTextureCoord);\\n\\n float alphaRatio = (totalAlpha / MAX_TOTAL_ALPHA);\\n\\n float innerGlowAlpha = (1.0 - alphaRatio) * innerStrength * curColor.a;\\n float innerGlowStrength = min(1.0, innerGlowAlpha);\\n \\n vec4 innerColor = mix(curColor, glowColor, innerGlowStrength);\\n\\n float outerGlowAlpha = alphaRatio * outerStrength * (1. - curColor.a);\\n float outerGlowStrength = min(1.0 - innerColor.a, outerGlowAlpha);\\n\\n vec4 outerGlowColor = outerGlowStrength * glowColor.rgba;\\n \\n if (knockout) {\\n float resultAlpha = outerGlowAlpha + innerGlowAlpha;\\n gl_FragColor = vec4(glowColor.rgb * resultAlpha, resultAlpha);\\n }\\n else {\\n gl_FragColor = innerColor + outerGlowColor;\\n }\\n}\\n\";\n\n/**\n * GlowFilter, originally by mishaa\n * [codepen]{@link http://codepen.io/mishaa/pen/raKzrm}.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/glow.png)\n * @class\n *\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-glow|@pixi/filter-glow}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number} [options] Options for glow.\n * @param {number} [options.distance=10] The distance of the glow. Make it 2 times more for resolution=2.\n * It can't be changed after filter creation.\n * @param {number} [options.outerStrength=4] The strength of the glow outward from the edge of the sprite.\n * @param {number} [options.innerStrength=0] The strength of the glow inward from the edge of the sprite.\n * @param {number} [options.color=0xffffff] The color of the glow.\n * @param {number} [options.quality=0.1] A number between 0 and 1 that describes the quality of the glow.\n * The higher the number the less performant.\n * @param {boolean} [options.knockout=false] Toggle to hide the contents and only show glow.\n *\n * @example\n * someSprite.filters = [\n * new GlowFilter({ distance: 15, outerStrength: 2 })\n * ];\n */\nvar GlowFilter = /*@__PURE__*/(function (Filter) {\n function GlowFilter(options) {\n var ref = Object.assign({}, GlowFilter.defaults, options);\n var distance = ref.distance;\n var outerStrength = ref.outerStrength;\n var innerStrength = ref.innerStrength;\n var color = ref.color;\n var knockout = ref.knockout;\n var quality = ref.quality;\n\n distance = Math.round(distance);\n\n Filter.call(this, vertex, fragment\n .replace(/__ANGLE_STEP_SIZE__/gi, '' + (1 / quality / distance).toFixed(7))\n .replace(/__DIST__/gi, distance.toFixed(0) + '.0'));\n\n this.uniforms.glowColor = new Float32Array([0, 0, 0, 1]);\n\n Object.assign(this, {\n color: color,\n outerStrength: outerStrength,\n innerStrength: innerStrength,\n padding: distance,\n knockout: knockout,\n });\n }\n\n if ( Filter ) GlowFilter.__proto__ = Filter;\n GlowFilter.prototype = Object.create( Filter && Filter.prototype );\n GlowFilter.prototype.constructor = GlowFilter;\n\n var prototypeAccessors = { color: { configurable: true },outerStrength: { configurable: true },innerStrength: { configurable: true },knockout: { configurable: true } };\n\n /**\n * The color of the glow.\n * @member {number}\n * @default 0xFFFFFF\n */\n prototypeAccessors.color.get = function () {\n return rgb2hex(this.uniforms.glowColor);\n };\n prototypeAccessors.color.set = function (value) {\n hex2rgb(value, this.uniforms.glowColor);\n };\n\n /**\n * The strength of the glow outward from the edge of the sprite.\n * @member {number}\n * @default 4\n */\n prototypeAccessors.outerStrength.get = function () {\n return this.uniforms.outerStrength;\n };\n prototypeAccessors.outerStrength.set = function (value) {\n this.uniforms.outerStrength = value;\n };\n\n /**\n * The strength of the glow inward from the edge of the sprite.\n * @member {number}\n * @default 0\n */\n prototypeAccessors.innerStrength.get = function () {\n return this.uniforms.innerStrength;\n };\n prototypeAccessors.innerStrength.set = function (value) {\n this.uniforms.innerStrength = value;\n };\n\n /**\n * Only draw the glow, not the texture itself\n * @member {boolean}\n * @default false\n */\n prototypeAccessors.knockout.get = function () {\n return this.uniforms.knockout;\n };\n prototypeAccessors.knockout.set = function (value) {\n this.uniforms.knockout = value;\n };\n\n Object.defineProperties( GlowFilter.prototype, prototypeAccessors );\n\n return GlowFilter;\n}(Filter));\n\nGlowFilter.defaults = {\n distance: 10,\n outerStrength: 4,\n innerStrength: 0,\n color: 0xffffff,\n quality: 0.1,\n knockout: false,\n};\n\nexport { GlowFilter };\n//# sourceMappingURL=filter-glow.esm.js.map\n","/*!\n * @pixi/filter-godray - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-godray is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { Point, DEG_TO_RAD } from '@pixi/math';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar perlin = \"vec3 mod289(vec3 x)\\n{\\n return x - floor(x * (1.0 / 289.0)) * 289.0;\\n}\\nvec4 mod289(vec4 x)\\n{\\n return x - floor(x * (1.0 / 289.0)) * 289.0;\\n}\\nvec4 permute(vec4 x)\\n{\\n return mod289(((x * 34.0) + 1.0) * x);\\n}\\nvec4 taylorInvSqrt(vec4 r)\\n{\\n return 1.79284291400159 - 0.85373472095314 * r;\\n}\\nvec3 fade(vec3 t)\\n{\\n return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\\n}\\n// Classic Perlin noise, periodic variant\\nfloat pnoise(vec3 P, vec3 rep)\\n{\\n vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period\\n vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period\\n Pi0 = mod289(Pi0);\\n Pi1 = mod289(Pi1);\\n vec3 Pf0 = fract(P); // Fractional part for interpolation\\n vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\\n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\\n vec4 iz0 = Pi0.zzzz;\\n vec4 iz1 = Pi1.zzzz;\\n vec4 ixy = permute(permute(ix) + iy);\\n vec4 ixy0 = permute(ixy + iz0);\\n vec4 ixy1 = permute(ixy + iz1);\\n vec4 gx0 = ixy0 * (1.0 / 7.0);\\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\\n gx0 = fract(gx0);\\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\\n vec4 sz0 = step(gz0, vec4(0.0));\\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\\n vec4 gx1 = ixy1 * (1.0 / 7.0);\\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\\n gx1 = fract(gx1);\\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\\n vec4 sz1 = step(gz1, vec4(0.0));\\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\\n vec3 g000 = vec3(gx0.x, gy0.x, gz0.x);\\n vec3 g100 = vec3(gx0.y, gy0.y, gz0.y);\\n vec3 g010 = vec3(gx0.z, gy0.z, gz0.z);\\n vec3 g110 = vec3(gx0.w, gy0.w, gz0.w);\\n vec3 g001 = vec3(gx1.x, gy1.x, gz1.x);\\n vec3 g101 = vec3(gx1.y, gy1.y, gz1.y);\\n vec3 g011 = vec3(gx1.z, gy1.z, gz1.z);\\n vec3 g111 = vec3(gx1.w, gy1.w, gz1.w);\\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\\n g000 *= norm0.x;\\n g010 *= norm0.y;\\n g100 *= norm0.z;\\n g110 *= norm0.w;\\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\\n g001 *= norm1.x;\\n g011 *= norm1.y;\\n g101 *= norm1.z;\\n g111 *= norm1.w;\\n float n000 = dot(g000, Pf0);\\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\\n float n111 = dot(g111, Pf1);\\n vec3 fade_xyz = fade(Pf0);\\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\\n return 2.2 * n_xyz;\\n}\\nfloat turb(vec3 P, vec3 rep, float lacunarity, float gain)\\n{\\n float sum = 0.0;\\n float sc = 1.0;\\n float totalgain = 1.0;\\n for (float i = 0.0; i < 6.0; i++)\\n {\\n sum += totalgain * pnoise(P * sc, rep);\\n sc *= lacunarity;\\n totalgain *= gain;\\n }\\n return abs(sum);\\n}\\n\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec4 filterArea;\\nuniform vec2 dimensions;\\n\\nuniform vec2 light;\\nuniform bool parallel;\\nuniform float aspect;\\n\\nuniform float gain;\\nuniform float lacunarity;\\nuniform float time;\\nuniform float alpha;\\n\\n${perlin}\\n\\nvoid main(void) {\\n vec2 coord = vTextureCoord * filterArea.xy / dimensions.xy;\\n\\n float d;\\n\\n if (parallel) {\\n float _cos = light.x;\\n float _sin = light.y;\\n d = (_cos * coord.x) + (_sin * coord.y * aspect);\\n } else {\\n float dx = coord.x - light.x / dimensions.x;\\n float dy = (coord.y - light.y / dimensions.y) * aspect;\\n float dis = sqrt(dx * dx + dy * dy) + 0.00001;\\n d = dy / dis;\\n }\\n\\n vec3 dir = vec3(d, d, 0.0);\\n\\n float noise = turb(dir + vec3(time, 0.0, 62.1 + time) * 0.05, vec3(480.0, 320.0, 480.0), lacunarity, gain);\\n noise = mix(noise, 0.0, 0.3);\\n //fade vertically.\\n vec4 mist = vec4(noise, noise, noise, 1.0) * (1.0 - coord.y);\\n mist.a = 1.0;\\n // apply user alpha\\n mist *= alpha;\\n\\n gl_FragColor = texture2D(uSampler, vTextureCoord) + mist;\\n\\n}\\n\";\n\n/**\n * GordayFilter, {@link https://codepen.io/alaingalvan originally} by Alain Galvan\n *\n *\n *\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/godray.gif)\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-godray|@pixi/filter-godray}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n *\n * @example\n * displayObject.filters = [new GodrayFilter()];\n * @param {object} [options] Filter options\n * @param {number} [options.angle=30] Angle/Light-source of the rays.\n * @param {number} [options.gain=0.5] General intensity of the effect.\n * @param {number} [options.lacunrity=2.5] The density of the fractal noise.\n * @param {boolean} [options.parallel=true] `true` to use `angle`, `false` to use `center`\n * @param {number} [options.time=0] The current time position.\n * @param {PIXI.Point|number[]} [options.center=[0,0]] Focal point for non-parallel rays,\n * to use this `parallel` must be set to `false`.\n * @param {number} [options.alpha=1.0] the alpha, defaults to 1, affects transparency of rays\n */\nvar GodrayFilter = /*@__PURE__*/(function (Filter) {\n function GodrayFilter(options) {\n Filter.call(this, vertex, fragment.replace('${perlin}', perlin));\n\n this.uniforms.dimensions = new Float32Array(2);\n\n // Fallback support for ctor: (angle, gain, lacunarity, time)\n if (typeof options === 'number') {\n // eslint-disable-next-line no-console\n console.warn('GodrayFilter now uses options instead of (angle, gain, lacunarity, time)');\n options = { angle: options };\n if (arguments[1] !== undefined) {\n options.gain = arguments[1];\n }\n if (arguments[2] !== undefined) {\n options.lacunarity = arguments[2];\n }\n if (arguments[3] !== undefined) {\n options.time = arguments[3];\n }\n if (arguments[4] !== undefined) {\n options.alpha = arguments[4];\n }\n }\n\n options = Object.assign({\n angle: 30,\n gain: 0.5,\n lacunarity: 2.5,\n time: 0,\n parallel: true,\n center: [0, 0],\n alpha: 1,\n }, options);\n\n this._angleLight = new Point();\n this.angle = options.angle;\n this.gain = options.gain;\n this.lacunarity = options.lacunarity;\n this.alpha = options.alpha;\n\n /**\n * `true` if light rays are parallel (uses angle),\n * `false` to use the focal `center` point\n *\n * @member {boolean}\n * @default true\n */\n this.parallel = options.parallel;\n\n /**\n * The position of the emitting point for light rays\n * only used if `parallel` is set to `false`.\n *\n * @member {PIXI.Point|number[]}\n * @default [0, 0]\n */\n this.center = options.center;\n\n /**\n * The current time.\n *\n * @member {number}\n * @default 0\n */\n this.time = options.time;\n }\n\n if ( Filter ) GodrayFilter.__proto__ = Filter;\n GodrayFilter.prototype = Object.create( Filter && Filter.prototype );\n GodrayFilter.prototype.constructor = GodrayFilter;\n\n var prototypeAccessors = { angle: { configurable: true },gain: { configurable: true },lacunarity: { configurable: true },alpha: { configurable: true } };\n\n /**\n * Applies the filter.\n * @private\n * @param {PIXI.FilterManager} filterManager - The manager.\n * @param {PIXI.RenderTarget} input - The input target.\n * @param {PIXI.RenderTarget} output - The output target.\n */\n GodrayFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n var ref = input.filterFrame;\n var width = ref.width;\n var height = ref.height;\n\n this.uniforms.light = this.parallel ? this._angleLight : this.center;\n\n this.uniforms.parallel = this.parallel;\n this.uniforms.dimensions[0] = width;\n this.uniforms.dimensions[1] = height;\n this.uniforms.aspect = height / width;\n this.uniforms.time = this.time;\n this.uniforms.alpha = this.alpha;\n\n // draw the filter...\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * The angle/light-source of the rays in degrees. For instance, a value of 0 is vertical rays,\n * values of 90 or -90 produce horizontal rays.\n * @member {number}\n * @default 30\n */\n prototypeAccessors.angle.get = function () {\n return this._angle;\n };\n prototypeAccessors.angle.set = function (value) {\n this._angle = value;\n\n var radians = value * DEG_TO_RAD;\n\n this._angleLight.x = Math.cos(radians);\n this._angleLight.y = Math.sin(radians);\n };\n\n /**\n * General intensity of the effect. A value closer to 1 will produce a more intense effect,\n * where a value closer to 0 will produce a subtler effect.\n *\n * @member {number}\n * @default 0.5\n */\n prototypeAccessors.gain.get = function () {\n return this.uniforms.gain;\n };\n prototypeAccessors.gain.set = function (value) {\n this.uniforms.gain = value;\n };\n\n /**\n * The density of the fractal noise. A higher amount produces more rays and a smaller amound\n * produces fewer waves.\n *\n * @member {number}\n * @default 2.5\n */\n prototypeAccessors.lacunarity.get = function () {\n return this.uniforms.lacunarity;\n };\n prototypeAccessors.lacunarity.set = function (value) {\n this.uniforms.lacunarity = value;\n };\n\n /**\n * The alpha (opacity) of the rays. 0 is fully transparent, 1 is fully opaque\n * @member {number}\n * @default 1\n */\n prototypeAccessors.alpha.get = function () {\n return this.uniforms.alpha;\n };\n prototypeAccessors.alpha.set = function (value) {\n this.uniforms.alpha = value;\n };\n\n Object.defineProperties( GodrayFilter.prototype, prototypeAccessors );\n\n return GodrayFilter;\n}(Filter));\n\nexport { GodrayFilter };\n//# sourceMappingURL=filter-godray.esm.js.map\n","/*!\n * @pixi/filter-motion-blur - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-motion-blur is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { Point, ObservablePoint } from '@pixi/math';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec4 filterArea;\\n\\nuniform vec2 uVelocity;\\nuniform int uKernelSize;\\nuniform float uOffset;\\n\\nconst int MAX_KERNEL_SIZE = 2048;\\n\\n// Notice:\\n// the perfect way:\\n// int kernelSize = min(uKernelSize, MAX_KERNELSIZE);\\n// BUT in real use-case , uKernelSize < MAX_KERNELSIZE almost always.\\n// So use uKernelSize directly.\\n\\nvoid main(void)\\n{\\n vec4 color = texture2D(uSampler, vTextureCoord);\\n\\n if (uKernelSize == 0)\\n {\\n gl_FragColor = color;\\n return;\\n }\\n\\n vec2 velocity = uVelocity / filterArea.xy;\\n float offset = -uOffset / length(uVelocity) - 0.5;\\n int k = uKernelSize - 1;\\n\\n for(int i = 0; i < MAX_KERNEL_SIZE - 1; i++) {\\n if (i == k) {\\n break;\\n }\\n vec2 bias = velocity * (float(i) / float(k) + offset);\\n color += texture2D(uSampler, vTextureCoord + bias);\\n }\\n gl_FragColor = color / float(uKernelSize);\\n}\\n\";\n\n/**\n * The MotionBlurFilter applies a Motion blur to an object.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/motion-blur.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-motion-blur|@pixi/filter-motion-blur}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {PIXI.ObservablePoint|PIXI.Point|number[]} [velocity=[0, 0]] Sets the velocity of the motion for blur effect.\n * @param {number} [kernelSize=5] - The kernelSize of the blur filter. Must be odd number >= 5\n * @param {number} [offset=0] - The offset of the blur filter.\n */\nvar MotionBlurFilter = /*@__PURE__*/(function (Filter) {\n function MotionBlurFilter(velocity, kernelSize, offset) {\n if ( velocity === void 0 ) velocity = [0, 0];\n if ( kernelSize === void 0 ) kernelSize = 5;\n if ( offset === void 0 ) offset = 0;\n\n Filter.call(this, vertex, fragment);\n this.uniforms.uVelocity = new Float32Array(2);\n this._velocity = new ObservablePoint(this.velocityChanged, this);\n this.velocity = velocity;\n\n /**\n * The kernelSize of the blur, higher values are slower but look better.\n * Use odd value greater than 5.\n * @member {number}\n * @default 5\n */\n this.kernelSize = kernelSize;\n this.offset = offset;\n }\n\n if ( Filter ) MotionBlurFilter.__proto__ = Filter;\n MotionBlurFilter.prototype = Object.create( Filter && Filter.prototype );\n MotionBlurFilter.prototype.constructor = MotionBlurFilter;\n\n var prototypeAccessors = { velocity: { configurable: true },offset: { configurable: true } };\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n MotionBlurFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n var ref = this.velocity;\n var x = ref.x;\n var y = ref.y;\n\n this.uniforms.uKernelSize = (x !== 0 || y !== 0) ? this.kernelSize : 0;\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * Sets the velocity of the motion for blur effect.\n *\n * @member {PIXI.ObservablePoint|PIXI.Point|number[]}\n */\n prototypeAccessors.velocity.set = function (value) {\n if (Array.isArray(value)) {\n this._velocity.set(value[0], value[1]);\n }\n else if (value instanceof Point || value instanceof ObservablePoint) {\n this._velocity.copyFrom(value);\n }\n };\n\n prototypeAccessors.velocity.get = function () {\n return this._velocity;\n };\n\n /**\n * Handle velocity changed\n * @private\n */\n MotionBlurFilter.prototype.velocityChanged = function velocityChanged () {\n this.uniforms.uVelocity[0] = this._velocity.x;\n this.uniforms.uVelocity[1] = this._velocity.y;\n };\n\n /**\n * The offset of the blur filter.\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.offset.set = function (value) {\n this.uniforms.uOffset = value;\n };\n\n prototypeAccessors.offset.get = function () {\n return this.uniforms.uOffset;\n };\n\n Object.defineProperties( MotionBlurFilter.prototype, prototypeAccessors );\n\n return MotionBlurFilter;\n}(Filter));\n\nexport { MotionBlurFilter };\n//# sourceMappingURL=filter-motion-blur.esm.js.map\n","/*!\n * @pixi/filter-multi-color-replace - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-multi-color-replace is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { hex2rgb, rgb2hex } from '@pixi/utils';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\n\\nuniform float epsilon;\\n\\nconst int MAX_COLORS = %maxColors%;\\n\\nuniform vec3 originalColors[MAX_COLORS];\\nuniform vec3 targetColors[MAX_COLORS];\\n\\nvoid main(void)\\n{\\n gl_FragColor = texture2D(uSampler, vTextureCoord);\\n\\n float alpha = gl_FragColor.a;\\n if (alpha < 0.0001)\\n {\\n return;\\n }\\n\\n vec3 color = gl_FragColor.rgb / alpha;\\n\\n for(int i = 0; i < MAX_COLORS; i++)\\n {\\n vec3 origColor = originalColors[i];\\n if (origColor.r < 0.0)\\n {\\n break;\\n }\\n vec3 colorDiff = origColor - color;\\n if (length(colorDiff) < epsilon)\\n {\\n vec3 targetColor = targetColors[i];\\n gl_FragColor = vec4((targetColor + colorDiff) * alpha, alpha);\\n return;\\n }\\n }\\n}\\n\";\n\n/**\n * Filter for replacing a color with another color. Similar to ColorReplaceFilter, but support multiple\n * colors.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/multi-color-replace.png)\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-multi-color-replace|@pixi/filter-multi-color-replace}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {Array} replacements - The collection of replacement items. Each item is color-pair (an array length is 2).\n * In the pair, the first value is original color , the second value is target color.\n * @param {number} [epsilon=0.05] - Tolerance of the floating-point comparison between colors\n * (lower = more exact, higher = more inclusive)\n * @param {number} [maxColors] - The maximum number of replacements filter is able to use. Because the\n * fragment is only compiled once, this cannot be changed after construction.\n * If omitted, the default value is the length of `replacements`.\n *\n * @example\n * // replaces pure red with pure blue, and replaces pure green with pure white\n * someSprite.filters = [new MultiColorReplaceFilter(\n * [\n * [0xFF0000, 0x0000FF],\n * [0x00FF00, 0xFFFFFF]\n * ],\n * 0.001\n * )];\n *\n * You also could use [R, G, B] as the color\n * someOtherSprite.filters = [new MultiColorReplaceFilter(\n * [\n * [ [1,0,0], [0,0,1] ],\n * [ [0,1,0], [1,1,1] ]\n * ],\n * 0.001\n * )];\n *\n */\nvar MultiColorReplaceFilter = /*@__PURE__*/(function (Filter) {\n function MultiColorReplaceFilter(replacements, epsilon, maxColors) {\n if ( epsilon === void 0 ) epsilon = 0.05;\n if ( maxColors === void 0 ) maxColors = null;\n\n maxColors = maxColors || replacements.length;\n\n Filter.call(this, vertex, fragment.replace(/%maxColors%/g, maxColors));\n\n this.epsilon = epsilon;\n this._maxColors = maxColors;\n this._replacements = null;\n this.uniforms.originalColors = new Float32Array(maxColors * 3);\n this.uniforms.targetColors = new Float32Array(maxColors * 3);\n this.replacements = replacements;\n }\n\n if ( Filter ) MultiColorReplaceFilter.__proto__ = Filter;\n MultiColorReplaceFilter.prototype = Object.create( Filter && Filter.prototype );\n MultiColorReplaceFilter.prototype.constructor = MultiColorReplaceFilter;\n\n var prototypeAccessors = { replacements: { configurable: true },maxColors: { configurable: true },epsilon: { configurable: true } };\n\n /**\n * The source and target colors for replacement. See constructor for information on the format.\n *\n * @member {Array}\n */\n prototypeAccessors.replacements.set = function (replacements) {\n var originals = this.uniforms.originalColors;\n var targets = this.uniforms.targetColors;\n var colorCount = replacements.length;\n\n if (colorCount > this._maxColors) {\n throw (\"Length of replacements (\" + colorCount + \") exceeds the maximum colors length (\" + (this._maxColors) + \")\");\n }\n\n // Fill with negative values\n originals[colorCount * 3] = -1;\n\n for (var i = 0; i < colorCount; i++) {\n var pair = replacements[i];\n\n // for original colors\n var color = pair[0];\n if (typeof color === 'number') {\n color = hex2rgb(color);\n }\n else {\n pair[0] = rgb2hex(color);\n }\n\n originals[i * 3] = color[0];\n originals[(i * 3) + 1] = color[1];\n originals[(i * 3) + 2] = color[2];\n\n // for target colors\n var targetColor = pair[1];\n if (typeof targetColor === 'number') {\n targetColor = hex2rgb(targetColor);\n }\n else {\n pair[1] = rgb2hex(targetColor);\n }\n\n targets[i * 3] = targetColor[0];\n targets[(i * 3) + 1] = targetColor[1];\n targets[(i * 3) + 2] = targetColor[2];\n }\n\n this._replacements = replacements;\n };\n prototypeAccessors.replacements.get = function () {\n return this._replacements;\n };\n\n /**\n * Should be called after changing any of the contents of the replacements.\n * This is a convenience method for resetting the `replacements`.\n */\n MultiColorReplaceFilter.prototype.refresh = function refresh () {\n this.replacements = this._replacements;\n };\n\n /**\n * The maximum number of color replacements supported by this filter. Can be changed\n * _only_ during construction.\n *\n * @member {number}\n * @readonly\n */\n prototypeAccessors.maxColors.get = function () {\n return this._maxColors;\n };\n\n /**\n * Tolerance of the floating-point comparison between colors (lower = more exact, higher = more inclusive)\n *\n * @member {number}\n * @default 0.05\n */\n prototypeAccessors.epsilon.set = function (value) {\n this.uniforms.epsilon = value;\n };\n prototypeAccessors.epsilon.get = function () {\n return this.uniforms.epsilon;\n };\n\n Object.defineProperties( MultiColorReplaceFilter.prototype, prototypeAccessors );\n\n return MultiColorReplaceFilter;\n}(Filter));\n\nexport { MultiColorReplaceFilter };\n//# sourceMappingURL=filter-multi-color-replace.esm.js.map\n","/*!\n * @pixi/filter-old-film - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-old-film is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec4 filterArea;\\nuniform vec2 dimensions;\\n\\nuniform float sepia;\\nuniform float noise;\\nuniform float noiseSize;\\nuniform float scratch;\\nuniform float scratchDensity;\\nuniform float scratchWidth;\\nuniform float vignetting;\\nuniform float vignettingAlpha;\\nuniform float vignettingBlur;\\nuniform float seed;\\n\\nconst float SQRT_2 = 1.414213;\\nconst vec3 SEPIA_RGB = vec3(112.0 / 255.0, 66.0 / 255.0, 20.0 / 255.0);\\n\\nfloat rand(vec2 co) {\\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\\n}\\n\\nvec3 Overlay(vec3 src, vec3 dst)\\n{\\n // if (dst <= 0.5) then: 2 * src * dst\\n // if (dst > 0.5) then: 1 - 2 * (1 - dst) * (1 - src)\\n return vec3((dst.x <= 0.5) ? (2.0 * src.x * dst.x) : (1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)),\\n (dst.y <= 0.5) ? (2.0 * src.y * dst.y) : (1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)),\\n (dst.z <= 0.5) ? (2.0 * src.z * dst.z) : (1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z)));\\n}\\n\\n\\nvoid main()\\n{\\n gl_FragColor = texture2D(uSampler, vTextureCoord);\\n vec3 color = gl_FragColor.rgb;\\n\\n if (sepia > 0.0)\\n {\\n float gray = (color.x + color.y + color.z) / 3.0;\\n vec3 grayscale = vec3(gray);\\n\\n color = Overlay(SEPIA_RGB, grayscale);\\n\\n color = grayscale + sepia * (color - grayscale);\\n }\\n\\n vec2 coord = vTextureCoord * filterArea.xy / dimensions.xy;\\n\\n if (vignetting > 0.0)\\n {\\n float outter = SQRT_2 - vignetting * SQRT_2;\\n vec2 dir = vec2(vec2(0.5, 0.5) - coord);\\n dir.y *= dimensions.y / dimensions.x;\\n float darker = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + vignettingBlur * SQRT_2), 0.0, 1.0);\\n color.rgb *= darker + (1.0 - darker) * (1.0 - vignettingAlpha);\\n }\\n\\n if (scratchDensity > seed && scratch != 0.0)\\n {\\n float phase = seed * 256.0;\\n float s = mod(floor(phase), 2.0);\\n float dist = 1.0 / scratchDensity;\\n float d = distance(coord, vec2(seed * dist, abs(s - seed * dist)));\\n if (d < seed * 0.6 + 0.4)\\n {\\n highp float period = scratchDensity * 10.0;\\n\\n float xx = coord.x * period + phase;\\n float aa = abs(mod(xx, 0.5) * 4.0);\\n float bb = mod(floor(xx / 0.5), 2.0);\\n float yy = (1.0 - bb) * aa + bb * (2.0 - aa);\\n\\n float kk = 2.0 * period;\\n float dw = scratchWidth / dimensions.x * (0.75 + seed);\\n float dh = dw * kk;\\n\\n float tine = (yy - (2.0 - dh));\\n\\n if (tine > 0.0) {\\n float _sign = sign(scratch);\\n\\n tine = s * tine / period + scratch + 0.1;\\n tine = clamp(tine + 1.0, 0.5 + _sign * 0.5, 1.5 + _sign * 0.5);\\n\\n color.rgb *= tine;\\n }\\n }\\n }\\n\\n if (noise > 0.0 && noiseSize > 0.0)\\n {\\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\\n pixelCoord.x = floor(pixelCoord.x / noiseSize);\\n pixelCoord.y = floor(pixelCoord.y / noiseSize);\\n // vec2 d = pixelCoord * noiseSize * vec2(1024.0 + seed * 512.0, 1024.0 - seed * 512.0);\\n // float _noise = snoise(d) * 0.5;\\n float _noise = rand(pixelCoord * noiseSize * seed) - 0.5;\\n color += _noise * noise;\\n }\\n\\n gl_FragColor.rgb = color;\\n}\\n\";\n\n/**\n * The OldFilmFilter applies a Old film effect to an object.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/old-film.gif)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-old-film|@pixi/filter-old-film}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n *\n * @param {object|number} [options] - The optional parameters of old film effect.\n * When options is a number , it will be `seed`\n * @param {number} [options.sepia=0.3] - The amount of saturation of sepia effect,\n * a value of `1` is more saturation and closer to `0` is less, and a value of\n * `0` produces no sepia effect\n * @param {number} [options.noise=0.3] - Opacity/intensity of the noise effect between `0` and `1`\n * @param {number} [options.noiseSize=1.0] - The size of the noise particles\n * @param {number} [options.scratch=0.5] - How often scratches appear\n * @param {number} [options.scratchDensity=0.3] - The density of the number of scratches\n * @param {number} [options.scratchWidth=1.0] - The width of the scratches\n * @param {number} [options.vignetting=0.3] - The radius of the vignette effect, smaller\n * values produces a smaller vignette\n * @param {number} [options.vignettingAlpha=1.0] - Amount of opacity of vignette\n * @param {number} [options.vignettingBlur=0.3] - Blur intensity of the vignette\n * @param {number} [seed=0] - A see value to apply to the random noise generation\n */\nvar OldFilmFilter = /*@__PURE__*/(function (Filter) {\n function OldFilmFilter(options, seed) {\n if ( seed === void 0 ) seed = 0;\n\n Filter.call(this, vertex, fragment);\n this.uniforms.dimensions = new Float32Array(2);\n\n if (typeof options === 'number') {\n this.seed = options;\n options = null;\n }\n else {\n /**\n * A see value to apply to the random noise generation\n * @member {number}\n */\n this.seed = seed;\n }\n\n Object.assign(this, {\n sepia: 0.3,\n noise: 0.3,\n noiseSize: 1.0,\n scratch: 0.5,\n scratchDensity: 0.3,\n scratchWidth: 1.0,\n vignetting: 0.3,\n vignettingAlpha: 1.0,\n vignettingBlur: 0.3,\n }, options);\n }\n\n if ( Filter ) OldFilmFilter.__proto__ = Filter;\n OldFilmFilter.prototype = Object.create( Filter && Filter.prototype );\n OldFilmFilter.prototype.constructor = OldFilmFilter;\n\n var prototypeAccessors = { sepia: { configurable: true },noise: { configurable: true },noiseSize: { configurable: true },scratch: { configurable: true },scratchDensity: { configurable: true },scratchWidth: { configurable: true },vignetting: { configurable: true },vignettingAlpha: { configurable: true },vignettingBlur: { configurable: true } };\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n OldFilmFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms.dimensions[0] = input.filterFrame.width;\n this.uniforms.dimensions[1] = input.filterFrame.height;\n\n // named `seed` because in the most programming languages,\n // `random` used for \"the function for generating random value\".\n this.uniforms.seed = this.seed;\n\n filterManager.applyFilter(this, input, output, clear);\n };\n\n\n /**\n * The amount of saturation of sepia effect,\n * a value of `1` is more saturation and closer to `0` is less,\n * and a value of `0` produces no sepia effect\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.sepia.set = function (value) {\n this.uniforms.sepia = value;\n };\n\n prototypeAccessors.sepia.get = function () {\n return this.uniforms.sepia;\n };\n\n /**\n * Opacity/intensity of the noise effect between `0` and `1`\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.noise.set = function (value) {\n this.uniforms.noise = value;\n };\n\n prototypeAccessors.noise.get = function () {\n return this.uniforms.noise;\n };\n\n /**\n * The size of the noise particles\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.noiseSize.set = function (value) {\n this.uniforms.noiseSize = value;\n };\n\n prototypeAccessors.noiseSize.get = function () {\n return this.uniforms.noiseSize;\n };\n\n /**\n * How often scratches appear\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.scratch.set = function (value) {\n this.uniforms.scratch = value;\n };\n\n prototypeAccessors.scratch.get = function () {\n return this.uniforms.scratch;\n };\n\n /**\n * The density of the number of scratches\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.scratchDensity.set = function (value) {\n this.uniforms.scratchDensity = value;\n };\n\n prototypeAccessors.scratchDensity.get = function () {\n return this.uniforms.scratchDensity;\n };\n\n /**\n * The width of the scratches\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.scratchWidth.set = function (value) {\n this.uniforms.scratchWidth = value;\n };\n\n prototypeAccessors.scratchWidth.get = function () {\n return this.uniforms.scratchWidth;\n };\n\n /**\n * The radius of the vignette effect, smaller\n * values produces a smaller vignette\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.vignetting.set = function (value) {\n this.uniforms.vignetting = value;\n };\n\n prototypeAccessors.vignetting.get = function () {\n return this.uniforms.vignetting;\n };\n\n /**\n * Amount of opacity of vignette\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.vignettingAlpha.set = function (value) {\n this.uniforms.vignettingAlpha = value;\n };\n\n prototypeAccessors.vignettingAlpha.get = function () {\n return this.uniforms.vignettingAlpha;\n };\n\n /**\n * Blur intensity of the vignette\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.vignettingBlur.set = function (value) {\n this.uniforms.vignettingBlur = value;\n };\n\n prototypeAccessors.vignettingBlur.get = function () {\n return this.uniforms.vignettingBlur;\n };\n\n Object.defineProperties( OldFilmFilter.prototype, prototypeAccessors );\n\n return OldFilmFilter;\n}(Filter));\n\nexport { OldFilmFilter };\n//# sourceMappingURL=filter-old-film.esm.js.map\n","/*!\n * @pixi/filter-outline - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-outline is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { rgb2hex, hex2rgb } from '@pixi/utils';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\n\\nuniform vec2 thickness;\\nuniform vec4 outlineColor;\\nuniform vec4 filterClamp;\\n\\nconst float DOUBLE_PI = 3.14159265358979323846264 * 2.;\\n\\nvoid main(void) {\\n vec4 ownColor = texture2D(uSampler, vTextureCoord);\\n vec4 curColor;\\n float maxAlpha = 0.;\\n vec2 displaced;\\n for (float angle = 0.; angle <= DOUBLE_PI; angle += ${angleStep}) {\\n displaced.x = vTextureCoord.x + thickness.x * cos(angle);\\n displaced.y = vTextureCoord.y + thickness.y * sin(angle);\\n curColor = texture2D(uSampler, clamp(displaced, filterClamp.xy, filterClamp.zw));\\n maxAlpha = max(maxAlpha, curColor.a);\\n }\\n float resultAlpha = max(maxAlpha, ownColor.a);\\n gl_FragColor = vec4((ownColor.rgb + outlineColor.rgb * (1. - ownColor.a)) * resultAlpha, resultAlpha);\\n}\\n\";\n\n/**\n * OutlineFilter, originally by mishaa\n * http://www.html5gamedevs.com/topic/10640-outline-a-sprite-change-certain-colors/?p=69966\n * http://codepen.io/mishaa/pen/emGNRB
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/outline.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-outline|@pixi/filter-outline}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number} [thickness=1] The tickness of the outline. Make it 2 times more for resolution 2\n * @param {number} [color=0x000000] The color of the outline.\n * @param {number} [quality=0.1] The quality of the outline from `0` to `1`, using a higher quality\n * setting will result in slower performance and more accuracy.\n *\n * @example\n * someSprite.filters = [new OutlineFilter(2, 0x99ff99)];\n */\nvar OutlineFilter = /*@__PURE__*/(function (Filter) {\n function OutlineFilter(thickness, color, quality) {\n if ( thickness === void 0 ) thickness = 1;\n if ( color === void 0 ) color = 0x000000;\n if ( quality === void 0 ) quality = 0.1;\n\n var samples = Math.max(\n quality * OutlineFilter.MAX_SAMPLES,\n OutlineFilter.MIN_SAMPLES\n );\n var angleStep = (Math.PI * 2 / samples).toFixed(7);\n\n Filter.call(this, vertex, fragment.replace(/\\$\\{angleStep\\}/, angleStep));\n\n this.uniforms.thickness = new Float32Array([0, 0]);\n this.uniforms.outlineColor = new Float32Array([0, 0, 0, 1]);\n\n Object.assign(this, { thickness: thickness, color: color, quality: quality });\n }\n\n if ( Filter ) OutlineFilter.__proto__ = Filter;\n OutlineFilter.prototype = Object.create( Filter && Filter.prototype );\n OutlineFilter.prototype.constructor = OutlineFilter;\n\n var prototypeAccessors = { color: { configurable: true },thickness: { configurable: true } };\n\n OutlineFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms.thickness[0] = this._thickness / input._frame.width;\n this.uniforms.thickness[1] = this._thickness / input._frame.height;\n\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * The color of the glow.\n * @member {number}\n * @default 0x000000\n */\n prototypeAccessors.color.get = function () {\n return rgb2hex(this.uniforms.outlineColor);\n };\n prototypeAccessors.color.set = function (value) {\n hex2rgb(value, this.uniforms.outlineColor);\n };\n\n /**\n * The thickness of the outline.\n * @member {number}\n * @default 1\n */\n prototypeAccessors.thickness.get = function () {\n return this._thickness;\n };\n prototypeAccessors.thickness.set = function (value) {\n this._thickness = value;\n this.padding = value;\n };\n\n Object.defineProperties( OutlineFilter.prototype, prototypeAccessors );\n\n return OutlineFilter;\n}(Filter));\n\n/**\n * The minimum number of samples for rendering outline.\n * @static\n * @member {number} MIN_SAMPLES\n * @memberof PIXI.filters.OutlineFilter\n * @default 1\n */\nOutlineFilter.MIN_SAMPLES = 1;\n\n/**\n * The maximum number of samples for rendering outline.\n * @static\n * @member {number} MAX_SAMPLES\n * @memberof PIXI.filters.OutlineFilter\n * @default 100\n */\nOutlineFilter.MAX_SAMPLES = 100;\n\nexport { OutlineFilter };\n//# sourceMappingURL=filter-outline.esm.js.map\n","/*!\n * @pixi/filter-pixelate - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-pixelate is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"precision mediump float;\\n\\nvarying vec2 vTextureCoord;\\n\\nuniform vec2 size;\\nuniform sampler2D uSampler;\\n\\nuniform vec4 filterArea;\\n\\nvec2 mapCoord( vec2 coord )\\n{\\n coord *= filterArea.xy;\\n coord += filterArea.zw;\\n\\n return coord;\\n}\\n\\nvec2 unmapCoord( vec2 coord )\\n{\\n coord -= filterArea.zw;\\n coord /= filterArea.xy;\\n\\n return coord;\\n}\\n\\nvec2 pixelate(vec2 coord, vec2 size)\\n{\\n\\treturn floor( coord / size ) * size;\\n}\\n\\nvoid main(void)\\n{\\n vec2 coord = mapCoord(vTextureCoord);\\n\\n coord = pixelate(coord, size);\\n\\n coord = unmapCoord(coord);\\n\\n gl_FragColor = texture2D(uSampler, coord);\\n}\\n\";\n\n/**\n * This filter applies a pixelate effect making display objects appear 'blocky'.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/pixelate.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-pixelate|@pixi/filter-pixelate}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {PIXI.Point|Array|number} [size=10] Either the width/height of the size of the pixels, or square size\n */\nvar PixelateFilter = /*@__PURE__*/(function (Filter) {\n function PixelateFilter(size) {\n if ( size === void 0 ) size = 10;\n\n Filter.call(this, vertex, fragment);\n this.size = size;\n }\n\n if ( Filter ) PixelateFilter.__proto__ = Filter;\n PixelateFilter.prototype = Object.create( Filter && Filter.prototype );\n PixelateFilter.prototype.constructor = PixelateFilter;\n\n var prototypeAccessors = { size: { configurable: true } };\n\n /**\n * This a point that describes the size of the blocks.\n * x is the width of the block and y is the height.\n *\n * @member {PIXI.Point|Array|number}\n * @default 10\n */\n prototypeAccessors.size.get = function () {\n return this.uniforms.size;\n };\n prototypeAccessors.size.set = function (value) {\n if (typeof value === 'number') {\n value = [value, value];\n }\n this.uniforms.size = value;\n };\n\n Object.defineProperties( PixelateFilter.prototype, prototypeAccessors );\n\n return PixelateFilter;\n}(Filter));\n\nexport { PixelateFilter };\n//# sourceMappingURL=filter-pixelate.esm.js.map\n","/*!\n * @pixi/filter-radial-blur - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-radial-blur is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec4 filterArea;\\n\\nuniform float uRadian;\\nuniform vec2 uCenter;\\nuniform float uRadius;\\nuniform int uKernelSize;\\n\\nconst int MAX_KERNEL_SIZE = 2048;\\n\\nvoid main(void)\\n{\\n vec4 color = texture2D(uSampler, vTextureCoord);\\n\\n if (uKernelSize == 0)\\n {\\n gl_FragColor = color;\\n return;\\n }\\n\\n float aspect = filterArea.y / filterArea.x;\\n vec2 center = uCenter.xy / filterArea.xy;\\n float gradient = uRadius / filterArea.x * 0.3;\\n float radius = uRadius / filterArea.x - gradient * 0.5;\\n int k = uKernelSize - 1;\\n\\n vec2 coord = vTextureCoord;\\n vec2 dir = vec2(center - coord);\\n float dist = length(vec2(dir.x, dir.y * aspect));\\n\\n float radianStep = uRadian;\\n if (radius >= 0.0 && dist > radius) {\\n float delta = dist - radius;\\n float gap = gradient;\\n float scale = 1.0 - abs(delta / gap);\\n if (scale <= 0.0) {\\n gl_FragColor = color;\\n return;\\n }\\n radianStep *= scale;\\n }\\n radianStep /= float(k);\\n\\n float s = sin(radianStep);\\n float c = cos(radianStep);\\n mat2 rotationMatrix = mat2(vec2(c, -s), vec2(s, c));\\n\\n for(int i = 0; i < MAX_KERNEL_SIZE - 1; i++) {\\n if (i == k) {\\n break;\\n }\\n\\n coord -= center;\\n coord.y *= aspect;\\n coord = rotationMatrix * coord;\\n coord.y /= aspect;\\n coord += center;\\n\\n vec4 sample = texture2D(uSampler, coord);\\n\\n // switch to pre-multiplied alpha to correctly blur transparent images\\n // sample.rgb *= sample.a;\\n\\n color += sample;\\n }\\n\\n gl_FragColor = color / float(uKernelSize);\\n}\\n\";\n\n/**\n * The RadialBlurFilter applies a Motion blur to an object.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/radial-blur.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-radial-blur|@pixi/filter-radial-blur}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number} [angle=0] Sets the angle of the motion for blur effect.\n * @param {PIXI.Point|number[]} [center=[0,0]] The center of the radial.\n * @param {number} [kernelSize=5] - The kernelSize of the blur filter. But be odd number >= 3\n * @param {number} [radius=-1] - The maximum size of the blur radius, `-1` is infinite\n */\nvar RadialBlurFilter = /*@__PURE__*/(function (Filter) {\n function RadialBlurFilter(angle, center, kernelSize, radius) {\n if ( angle === void 0 ) angle = 0;\n if ( center === void 0 ) center = [0, 0];\n if ( kernelSize === void 0 ) kernelSize = 5;\n if ( radius === void 0 ) radius = -1;\n\n Filter.call(this, vertex, fragment);\n\n this._angle = 0;\n this.angle = angle;\n this.center = center;\n this.kernelSize = kernelSize;\n this.radius = radius;\n }\n\n if ( Filter ) RadialBlurFilter.__proto__ = Filter;\n RadialBlurFilter.prototype = Object.create( Filter && Filter.prototype );\n RadialBlurFilter.prototype.constructor = RadialBlurFilter;\n\n var prototypeAccessors = { angle: { configurable: true },center: { configurable: true },radius: { configurable: true } };\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n RadialBlurFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms.uKernelSize = this._angle !== 0 ? this.kernelSize : 0;\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * Sets the angle in degrees of the motion for blur effect.\n *\n * @member {PIXI.Point|number[]}\n * @default [0, 0]\n */\n prototypeAccessors.angle.set = function (value) {\n this._angle = value;\n this.uniforms.uRadian = value * Math.PI / 180;\n };\n\n prototypeAccessors.angle.get = function () {\n return this._angle;\n };\n\n /**\n * Center of the effect.\n *\n * @member {PIXI.Point|number[]}\n * @default [0, 0]\n */\n prototypeAccessors.center.get = function () {\n return this.uniforms.uCenter;\n };\n\n prototypeAccessors.center.set = function (value) {\n this.uniforms.uCenter = value;\n };\n\n /**\n * Outer radius of the effect. The default value of `-1` is infinite.\n *\n * @member {number}\n * @default -1\n */\n prototypeAccessors.radius.get = function () {\n return this.uniforms.uRadius;\n };\n\n prototypeAccessors.radius.set = function (value) {\n if (value < 0 || value === Infinity) {\n value = -1;\n }\n this.uniforms.uRadius = value;\n };\n\n Object.defineProperties( RadialBlurFilter.prototype, prototypeAccessors );\n\n return RadialBlurFilter;\n}(Filter));\n\nexport { RadialBlurFilter };\n//# sourceMappingURL=filter-radial-blur.esm.js.map\n","/*!\n * @pixi/filter-reflection - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-reflection is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\n\\nuniform vec4 filterArea;\\nuniform vec4 filterClamp;\\nuniform vec2 dimensions;\\n\\nuniform bool mirror;\\nuniform float boundary;\\nuniform vec2 amplitude;\\nuniform vec2 waveLength;\\nuniform vec2 alpha;\\nuniform float time;\\n\\nfloat rand(vec2 co) {\\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\\n}\\n\\nvoid main(void)\\n{\\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\\n vec2 coord = pixelCoord / dimensions;\\n\\n if (coord.y < boundary) {\\n gl_FragColor = texture2D(uSampler, vTextureCoord);\\n return;\\n }\\n\\n float k = (coord.y - boundary) / (1. - boundary + 0.0001);\\n float areaY = boundary * dimensions.y / filterArea.y;\\n float v = areaY + areaY - vTextureCoord.y;\\n float y = mirror ? v : vTextureCoord.y;\\n\\n float _amplitude = ((amplitude.y - amplitude.x) * k + amplitude.x ) / filterArea.x;\\n float _waveLength = ((waveLength.y - waveLength.x) * k + waveLength.x) / filterArea.y;\\n float _alpha = (alpha.y - alpha.x) * k + alpha.x;\\n\\n float x = vTextureCoord.x + cos(v * 6.28 / _waveLength - time) * _amplitude;\\n x = clamp(x, filterClamp.x, filterClamp.z);\\n\\n vec4 color = texture2D(uSampler, vec2(x, y));\\n\\n gl_FragColor = color * _alpha;\\n}\\n\";\n\n/**\n * Applies a reflection effect to simulate the reflection on water with waves.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/reflection.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-reflection|@pixi/filter-reflection}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n *\n * @param {object} [options] - The optional parameters of Reflection effect.\n * @param {number} [options.mirror=true] - `true` to reflect the image, `false` for waves-only\n * @param {number} [options.boundary=0.5] - Vertical position of the reflection point, default is 50% (middle)\n * smaller numbers produce a larger reflection, larger numbers produce a smaller reflection.\n * @param {number} [options.amplitude=[0, 20]] - Starting and ending amplitude of waves\n * @param {number} [options.waveLength=[30, 100]] - Starting and ending length of waves\n * @param {number} [options.alpha=[1, 1]] - Starting and ending alpha values\n * @param {number} [options.time=0] - Time for animating position of waves\n */\nvar ReflectionFilter = /*@__PURE__*/(function (Filter) {\n function ReflectionFilter(options) {\n Filter.call(this, vertex, fragment);\n this.uniforms.amplitude = new Float32Array(2);\n this.uniforms.waveLength = new Float32Array(2);\n this.uniforms.alpha = new Float32Array(2);\n this.uniforms.dimensions = new Float32Array(2);\n\n Object.assign(this, {\n mirror: true,\n boundary: 0.5,\n amplitude: [0, 20],\n waveLength: [30, 100],\n alpha: [1, 1],\n\n /**\n * Time for animating position of waves\n *\n * @member {number}\n * @memberof PIXI.filters.ReflectionFilter#\n * @default 0\n */\n time: 0,\n }, options);\n }\n\n if ( Filter ) ReflectionFilter.__proto__ = Filter;\n ReflectionFilter.prototype = Object.create( Filter && Filter.prototype );\n ReflectionFilter.prototype.constructor = ReflectionFilter;\n\n var prototypeAccessors = { mirror: { configurable: true },boundary: { configurable: true },amplitude: { configurable: true },waveLength: { configurable: true },alpha: { configurable: true } };\n\n /**\n * Override existing apply method in PIXI.Filter\n * @private\n */\n ReflectionFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms.dimensions[0] = input.filterFrame.width;\n this.uniforms.dimensions[1] = input.filterFrame.height;\n\n this.uniforms.time = this.time;\n\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * `true` to reflect the image, `false` for waves-only\n *\n * @member {boolean}\n * @default true\n */\n prototypeAccessors.mirror.set = function (value) {\n this.uniforms.mirror = value;\n };\n prototypeAccessors.mirror.get = function () {\n return this.uniforms.mirror;\n };\n\n /**\n * Vertical position of the reflection point, default is 50% (middle)\n * smaller numbers produce a larger reflection, larger numbers produce a smaller reflection.\n *\n * @member {number}\n * @default 0.5\n */\n prototypeAccessors.boundary.set = function (value) {\n this.uniforms.boundary = value;\n };\n prototypeAccessors.boundary.get = function () {\n return this.uniforms.boundary;\n };\n\n /**\n * Starting and ending amplitude of waves\n * @member {number[]}\n * @default [0, 20]\n */\n prototypeAccessors.amplitude.set = function (value) {\n this.uniforms.amplitude[0] = value[0];\n this.uniforms.amplitude[1] = value[1];\n };\n prototypeAccessors.amplitude.get = function () {\n return this.uniforms.amplitude;\n };\n\n /**\n * Starting and ending length of waves\n * @member {number[]}\n * @default [30, 100]\n */\n prototypeAccessors.waveLength.set = function (value) {\n this.uniforms.waveLength[0] = value[0];\n this.uniforms.waveLength[1] = value[1];\n };\n prototypeAccessors.waveLength.get = function () {\n return this.uniforms.waveLength;\n };\n\n /**\n * Starting and ending alpha values\n * @member {number[]}\n * @default [1, 1]\n */\n prototypeAccessors.alpha.set = function (value) {\n this.uniforms.alpha[0] = value[0];\n this.uniforms.alpha[1] = value[1];\n };\n prototypeAccessors.alpha.get = function () {\n return this.uniforms.alpha;\n };\n\n Object.defineProperties( ReflectionFilter.prototype, prototypeAccessors );\n\n return ReflectionFilter;\n}(Filter));\n\nexport { ReflectionFilter };\n//# sourceMappingURL=filter-reflection.esm.js.map\n","/*!\n * @pixi/filter-rgb-split - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-rgb-split is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"precision mediump float;\\n\\nvarying vec2 vTextureCoord;\\n\\nuniform sampler2D uSampler;\\nuniform vec4 filterArea;\\nuniform vec2 red;\\nuniform vec2 green;\\nuniform vec2 blue;\\n\\nvoid main(void)\\n{\\n gl_FragColor.r = texture2D(uSampler, vTextureCoord + red/filterArea.xy).r;\\n gl_FragColor.g = texture2D(uSampler, vTextureCoord + green/filterArea.xy).g;\\n gl_FragColor.b = texture2D(uSampler, vTextureCoord + blue/filterArea.xy).b;\\n gl_FragColor.a = texture2D(uSampler, vTextureCoord).a;\\n}\\n\";\n\n/**\n * An RGB Split Filter.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/rgb.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-rgb-split|@pixi/filter-rgb-split}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {PIXI.Point} [red=[-10,0]] Red channel offset\n * @param {PIXI.Point} [green=[0, 10]] Green channel offset\n * @param {PIXI.Point} [blue=[0, 0]] Blue channel offset\n */\nvar RGBSplitFilter = /*@__PURE__*/(function (Filter) {\n function RGBSplitFilter(red, green, blue) {\n if ( red === void 0 ) red = [-10, 0];\n if ( green === void 0 ) green = [0, 10];\n if ( blue === void 0 ) blue = [0, 0];\n\n Filter.call(this, vertex, fragment);\n this.red = red;\n this.green = green;\n this.blue = blue;\n }\n\n if ( Filter ) RGBSplitFilter.__proto__ = Filter;\n RGBSplitFilter.prototype = Object.create( Filter && Filter.prototype );\n RGBSplitFilter.prototype.constructor = RGBSplitFilter;\n\n var prototypeAccessors = { red: { configurable: true },green: { configurable: true },blue: { configurable: true } };\n\n /**\n * Red channel offset.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.red.get = function () {\n return this.uniforms.red;\n };\n prototypeAccessors.red.set = function (value) {\n this.uniforms.red = value;\n };\n\n /**\n * Green channel offset.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.green.get = function () {\n return this.uniforms.green;\n };\n prototypeAccessors.green.set = function (value) {\n this.uniforms.green = value;\n };\n\n /**\n * Blue offset.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.blue.get = function () {\n return this.uniforms.blue;\n };\n prototypeAccessors.blue.set = function (value) {\n this.uniforms.blue = value;\n };\n\n Object.defineProperties( RGBSplitFilter.prototype, prototypeAccessors );\n\n return RGBSplitFilter;\n}(Filter));\n\nexport { RGBSplitFilter };\n//# sourceMappingURL=filter-rgb-split.esm.js.map\n","/*!\n * @pixi/filter-shockwave - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-shockwave is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec4 filterArea;\\nuniform vec4 filterClamp;\\n\\nuniform vec2 center;\\n\\nuniform float amplitude;\\nuniform float wavelength;\\n// uniform float power;\\nuniform float brightness;\\nuniform float speed;\\nuniform float radius;\\n\\nuniform float time;\\n\\nconst float PI = 3.14159;\\n\\nvoid main()\\n{\\n float halfWavelength = wavelength * 0.5 / filterArea.x;\\n float maxRadius = radius / filterArea.x;\\n float currentRadius = time * speed / filterArea.x;\\n\\n float fade = 1.0;\\n\\n if (maxRadius > 0.0) {\\n if (currentRadius > maxRadius) {\\n gl_FragColor = texture2D(uSampler, vTextureCoord);\\n return;\\n }\\n fade = 1.0 - pow(currentRadius / maxRadius, 2.0);\\n }\\n\\n vec2 dir = vec2(vTextureCoord - center / filterArea.xy);\\n dir.y *= filterArea.y / filterArea.x;\\n float dist = length(dir);\\n\\n if (dist <= 0.0 || dist < currentRadius - halfWavelength || dist > currentRadius + halfWavelength) {\\n gl_FragColor = texture2D(uSampler, vTextureCoord);\\n return;\\n }\\n\\n vec2 diffUV = normalize(dir);\\n\\n float diff = (dist - currentRadius) / halfWavelength;\\n\\n float p = 1.0 - pow(abs(diff), 2.0);\\n\\n // float powDiff = diff * pow(p, 2.0) * ( amplitude * fade );\\n float powDiff = 1.25 * sin(diff * PI) * p * ( amplitude * fade );\\n\\n vec2 offset = diffUV * powDiff / filterArea.xy;\\n\\n // Do clamp :\\n vec2 coord = vTextureCoord + offset;\\n vec2 clampedCoord = clamp(coord, filterClamp.xy, filterClamp.zw);\\n vec4 color = texture2D(uSampler, clampedCoord);\\n if (coord != clampedCoord) {\\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\\n }\\n\\n // No clamp :\\n // gl_FragColor = texture2D(uSampler, vTextureCoord + offset);\\n\\n color.rgb *= 1.0 + (brightness - 1.0) * p * fade;\\n\\n gl_FragColor = color;\\n}\\n\";\n\n/**\n * The ShockwaveFilter class lets you apply a shockwave effect.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/shockwave.gif)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-shockwave|@pixi/filter-shockwave}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n *\n * @param {PIXI.Point|number[]} [center=[0.5, 0.5]] See `center` property.\n * @param {object} [options] - The optional parameters of shockwave filter.\n * @param {number} [options.amplitude=0.5] - See `amplitude`` property.\n * @param {number} [options.wavelength=1.0] - See `wavelength` property.\n * @param {number} [options.speed=500.0] - See `speed` property.\n * @param {number} [options.brightness=8] - See `brightness` property.\n * @param {number} [options.radius=4] - See `radius` property.\n * @param {number} [time=0] - See `time` property.\n */\nvar ShockwaveFilter = /*@__PURE__*/(function (Filter) {\n function ShockwaveFilter(center, options, time) {\n if ( center === void 0 ) center = [0.0, 0.0];\n if ( options === void 0 ) options = {};\n if ( time === void 0 ) time = 0;\n\n Filter.call(this, vertex, fragment);\n\n this.center = center;\n\n if (Array.isArray(options)) {\n // eslint-disable-next-line no-console\n console.warn('Deprecated Warning: ShockwaveFilter params Array has been changed to options Object.');\n options = {};\n }\n\n options = Object.assign({\n amplitude: 30.0,\n wavelength: 160.0,\n brightness: 1.0,\n speed: 500.0,\n radius: -1.0,\n }, options);\n\n this.amplitude = options.amplitude;\n\n this.wavelength = options.wavelength;\n\n this.brightness = options.brightness;\n\n this.speed = options.speed;\n\n this.radius = options.radius;\n\n /**\n * Sets the elapsed time of the shockwave.\n * It could control the current size of shockwave.\n *\n * @member {number}\n */\n this.time = time;\n }\n\n if ( Filter ) ShockwaveFilter.__proto__ = Filter;\n ShockwaveFilter.prototype = Object.create( Filter && Filter.prototype );\n ShockwaveFilter.prototype.constructor = ShockwaveFilter;\n\n var prototypeAccessors = { center: { configurable: true },amplitude: { configurable: true },wavelength: { configurable: true },brightness: { configurable: true },speed: { configurable: true },radius: { configurable: true } };\n\n ShockwaveFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n /**\n * There is no set/get of `time`, for performance.\n * Because in the most real cases, `time` will be changed in ever game tick.\n * Use set/get will take more function-call.\n */\n this.uniforms.time = this.time;\n\n filterManager.applyFilter(this, input, output, clear);\n };\n\n /**\n * Sets the center of the shockwave in normalized screen coords. That is\n * (0,0) is the top-left and (1,1) is the bottom right.\n *\n * @member {PIXI.Point|number[]}\n */\n prototypeAccessors.center.get = function () {\n return this.uniforms.center;\n };\n prototypeAccessors.center.set = function (value) {\n this.uniforms.center = value;\n };\n\n /**\n * The amplitude of the shockwave.\n *\n * @member {number}\n */\n prototypeAccessors.amplitude.get = function () {\n return this.uniforms.amplitude;\n };\n prototypeAccessors.amplitude.set = function (value) {\n this.uniforms.amplitude = value;\n };\n\n /**\n * The wavelength of the shockwave.\n *\n * @member {number}\n */\n prototypeAccessors.wavelength.get = function () {\n return this.uniforms.wavelength;\n };\n prototypeAccessors.wavelength.set = function (value) {\n this.uniforms.wavelength = value;\n };\n\n /**\n * The brightness of the shockwave.\n *\n * @member {number}\n */\n prototypeAccessors.brightness.get = function () {\n return this.uniforms.brightness;\n };\n prototypeAccessors.brightness.set = function (value) {\n this.uniforms.brightness = value;\n };\n\n /**\n * The speed about the shockwave ripples out.\n * The unit is `pixel/second`\n *\n * @member {number}\n */\n prototypeAccessors.speed.get = function () {\n return this.uniforms.speed;\n };\n prototypeAccessors.speed.set = function (value) {\n this.uniforms.speed = value;\n };\n\n /**\n * The maximum radius of shockwave.\n * `< 0.0` means it's infinity.\n *\n * @member {number}\n */\n prototypeAccessors.radius.get = function () {\n return this.uniforms.radius;\n };\n prototypeAccessors.radius.set = function (value) {\n this.uniforms.radius = value;\n };\n\n Object.defineProperties( ShockwaveFilter.prototype, prototypeAccessors );\n\n return ShockwaveFilter;\n}(Filter));\n\nexport { ShockwaveFilter };\n//# sourceMappingURL=filter-shockwave.esm.js.map\n","/*!\n * @pixi/filter-simple-lightmap - v3.1.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-simple-lightmap is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { hex2rgb, rgb2hex } from '@pixi/utils';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform sampler2D uLightmap;\\nuniform vec4 filterArea;\\nuniform vec2 dimensions;\\nuniform vec4 ambientColor;\\nvoid main() {\\n vec4 diffuseColor = texture2D(uSampler, vTextureCoord);\\n vec2 lightCoord = (vTextureCoord * filterArea.xy) / dimensions;\\n vec4 light = texture2D(uLightmap, lightCoord);\\n vec3 ambient = ambientColor.rgb * ambientColor.a;\\n vec3 intensity = ambient + light.rgb;\\n vec3 finalColor = diffuseColor.rgb * intensity;\\n gl_FragColor = vec4(finalColor, diffuseColor.a);\\n}\\n\";\n\n/**\n* SimpleLightmap, originally by Oza94\n* http://www.html5gamedevs.com/topic/20027-pixijs-simple-lightmapping/\n* http://codepen.io/Oza94/pen/EPoRxj\n*\n* You have to specify filterArea, or suffer consequences.\n* You may have to use it with `filter.dontFit = true`,\n* until we rewrite this using same approach as for DisplacementFilter.\n*\n* ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/simple-lightmap.png)\n* @class\n* @extends PIXI.Filter\n* @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-simple-lightmap|@pixi/filter-simple-lightmap}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n* @param {PIXI.Texture} texture a texture where your lightmap is rendered\n* @param {Array|number} [color=0x000000] An RGBA array of the ambient color\n* @param {number} [alpha=1] Default alpha set independent of color (if it's a number, not array).\n*\n* @example\n* displayObject.filters = [new SimpleLightmapFilter(texture, 0x666666)];\n*/\nvar SimpleLightmapFilter = /*@__PURE__*/(function (Filter) {\n function SimpleLightmapFilter(texture, color, alpha) {\n if ( color === void 0 ) color = 0x000000;\n if ( alpha === void 0 ) alpha = 1;\n\n Filter.call(this, vertex, fragment);\n this.uniforms.dimensions = new Float32Array(2);\n this.uniforms.ambientColor = new Float32Array([0, 0, 0, alpha]);\n this.texture = texture;\n this.color = color;\n }\n\n if ( Filter ) SimpleLightmapFilter.__proto__ = Filter;\n SimpleLightmapFilter.prototype = Object.create( Filter && Filter.prototype );\n SimpleLightmapFilter.prototype.constructor = SimpleLightmapFilter;\n\n var prototypeAccessors = { texture: { configurable: true },color: { configurable: true },alpha: { configurable: true } };\n\n /**\n * Applies the filter.\n * @private\n * @param {PIXI.FilterManager} filterManager - The manager.\n * @param {PIXI.RenderTarget} input - The input target.\n * @param {PIXI.RenderTarget} output - The output target.\n */\n SimpleLightmapFilter.prototype.apply = function apply (filterManager, input, output, clear) {\n this.uniforms.dimensions[0] = input.filterFrame.width;\n this.uniforms.dimensions[1] = input.filterFrame.height;\n\n // draw the filter...\n filterManager.applyFilter(this, input, output, clear);\n };\n\n\n /**\n * a texture where your lightmap is rendered\n * @member {PIXI.Texture}\n */\n prototypeAccessors.texture.get = function () {\n return this.uniforms.uLightmap;\n };\n prototypeAccessors.texture.set = function (value) {\n this.uniforms.uLightmap = value;\n };\n\n /**\n * An RGBA array of the ambient color or a hex color without alpha\n * @member {Array|number}\n */\n prototypeAccessors.color.set = function (value) {\n var arr = this.uniforms.ambientColor;\n if (typeof value === 'number') {\n hex2rgb(value, arr);\n this._color = value;\n }\n else {\n arr[0] = value[0];\n arr[1] = value[1];\n arr[2] = value[2];\n arr[3] = value[3];\n this._color = rgb2hex(arr);\n }\n };\n prototypeAccessors.color.get = function () {\n return this._color;\n };\n\n /**\n * When setting `color` as hex, this can be used to set alpha independently.\n * @member {number}\n */\n prototypeAccessors.alpha.get = function () {\n return this.uniforms.ambientColor[3];\n };\n prototypeAccessors.alpha.set = function (value) {\n this.uniforms.ambientColor[3] = value;\n };\n\n Object.defineProperties( SimpleLightmapFilter.prototype, prototypeAccessors );\n\n return SimpleLightmapFilter;\n}(Filter));\n\nexport { SimpleLightmapFilter };\n//# sourceMappingURL=filter-simple-lightmap.esm.js.map\n","/*!\n * @pixi/filter-tilt-shift - v3.2.0\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-tilt-shift is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { Point } from '@pixi/math';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\n\\nuniform sampler2D uSampler;\\nuniform float blur;\\nuniform float gradientBlur;\\nuniform vec2 start;\\nuniform vec2 end;\\nuniform vec2 delta;\\nuniform vec2 texSize;\\n\\nfloat random(vec3 scale, float seed)\\n{\\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\\n}\\n\\nvoid main(void)\\n{\\n vec4 color = vec4(0.0);\\n float total = 0.0;\\n\\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\\n\\n for (float t = -30.0; t <= 30.0; t++)\\n {\\n float percent = (t + offset - 0.5) / 30.0;\\n float weight = 1.0 - abs(percent);\\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\\n sample.rgb *= sample.a;\\n color += sample * weight;\\n total += weight;\\n }\\n\\n color /= total;\\n color.rgb /= color.a + 0.00001;\\n\\n gl_FragColor = color;\\n}\\n\";\n\n/**\n * @author Vico @vicocotea\n * original filter https://github.com/evanw/glfx.js/blob/master/src/filters/blur/tiltshift.js by Evan Wallace : http://madebyevan.com/\n */\n\n/**\n * A TiltShiftAxisFilter.\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @private\n */\nvar TiltShiftAxisFilter = /*@__PURE__*/(function (Filter) {\n function TiltShiftAxisFilter(blur, gradientBlur, start, end){\n if ( blur === void 0 ) blur = 100;\n if ( gradientBlur === void 0 ) gradientBlur = 600;\n if ( start === void 0 ) start = null;\n if ( end === void 0 ) end = null;\n\n Filter.call(this, vertex, fragment);\n this.uniforms.blur = blur;\n this.uniforms.gradientBlur = gradientBlur;\n this.uniforms.start = start || new Point(0, window.innerHeight / 2);\n this.uniforms.end = end || new Point(600, window.innerHeight / 2);\n this.uniforms.delta = new Point(30, 30);\n this.uniforms.texSize = new Point(window.innerWidth, window.innerHeight);\n this.updateDelta();\n }\n\n if ( Filter ) TiltShiftAxisFilter.__proto__ = Filter;\n TiltShiftAxisFilter.prototype = Object.create( Filter && Filter.prototype );\n TiltShiftAxisFilter.prototype.constructor = TiltShiftAxisFilter;\n\n var prototypeAccessors = { blur: { configurable: true },gradientBlur: { configurable: true },start: { configurable: true },end: { configurable: true } };\n\n /**\n * Updates the filter delta values.\n * This is overridden in the X and Y filters, does nothing for this class.\n *\n */\n TiltShiftAxisFilter.prototype.updateDelta = function updateDelta () {\n this.uniforms.delta.x = 0;\n this.uniforms.delta.y = 0;\n };\n\n /**\n * The strength of the blur.\n *\n * @member {number}\n * @memberof PIXI.filters.TiltShiftAxisFilter#\n */\n prototypeAccessors.blur.get = function () {\n return this.uniforms.blur;\n };\n prototypeAccessors.blur.set = function (value) {\n this.uniforms.blur = value;\n };\n\n /**\n * The strength of the gradient blur.\n *\n * @member {number}\n * @memberof PIXI.filters.TiltShiftAxisFilter#\n */\n prototypeAccessors.gradientBlur.get = function () {\n return this.uniforms.gradientBlur;\n };\n prototypeAccessors.gradientBlur.set = function (value) {\n this.uniforms.gradientBlur = value;\n };\n\n /**\n * The X value to start the effect at.\n *\n * @member {PIXI.Point}\n * @memberof PIXI.filters.TiltShiftAxisFilter#\n */\n prototypeAccessors.start.get = function () {\n return this.uniforms.start;\n };\n prototypeAccessors.start.set = function (value) {\n this.uniforms.start = value;\n this.updateDelta();\n };\n\n /**\n * The X value to end the effect at.\n *\n * @member {PIXI.Point}\n * @memberof PIXI.filters.TiltShiftAxisFilter#\n */\n prototypeAccessors.end.get = function () {\n return this.uniforms.end;\n };\n prototypeAccessors.end.set = function (value) {\n this.uniforms.end = value;\n this.updateDelta();\n };\n\n Object.defineProperties( TiltShiftAxisFilter.prototype, prototypeAccessors );\n\n return TiltShiftAxisFilter;\n}(Filter));\n\n/**\n * @author Vico @vicocotea\n * original filter https://github.com/evanw/glfx.js/blob/master/src/filters/blur/tiltshift.js by Evan Wallace : http://madebyevan.com/\n */\n\n/**\n * A TiltShiftXFilter.\n *\n * @class\n * @extends PIXI.TiltShiftAxisFilter\n * @memberof PIXI.filters\n * @private\n */\nvar TiltShiftXFilter = /*@__PURE__*/(function (TiltShiftAxisFilter) {\n function TiltShiftXFilter () {\n TiltShiftAxisFilter.apply(this, arguments);\n }\n\n if ( TiltShiftAxisFilter ) TiltShiftXFilter.__proto__ = TiltShiftAxisFilter;\n TiltShiftXFilter.prototype = Object.create( TiltShiftAxisFilter && TiltShiftAxisFilter.prototype );\n TiltShiftXFilter.prototype.constructor = TiltShiftXFilter;\n\n TiltShiftXFilter.prototype.updateDelta = function updateDelta () {\n var dx = this.uniforms.end.x - this.uniforms.start.x;\n var dy = this.uniforms.end.y - this.uniforms.start.y;\n var d = Math.sqrt(dx * dx + dy * dy);\n this.uniforms.delta.x = dx / d;\n this.uniforms.delta.y = dy / d;\n };\n\n return TiltShiftXFilter;\n}(TiltShiftAxisFilter));\n\n/**\n * @author Vico @vicocotea\n * original filter https://github.com/evanw/glfx.js/blob/master/src/filters/blur/tiltshift.js by Evan Wallace : http://madebyevan.com/\n */\n\n/**\n * A TiltShiftYFilter.\n *\n * @class\n * @extends PIXI.TiltShiftAxisFilter\n * @memberof PIXI.filters\n * @private\n */\nvar TiltShiftYFilter = /*@__PURE__*/(function (TiltShiftAxisFilter) {\n function TiltShiftYFilter () {\n TiltShiftAxisFilter.apply(this, arguments);\n }\n\n if ( TiltShiftAxisFilter ) TiltShiftYFilter.__proto__ = TiltShiftAxisFilter;\n TiltShiftYFilter.prototype = Object.create( TiltShiftAxisFilter && TiltShiftAxisFilter.prototype );\n TiltShiftYFilter.prototype.constructor = TiltShiftYFilter;\n\n TiltShiftYFilter.prototype.updateDelta = function updateDelta () {\n var dx = this.uniforms.end.x - this.uniforms.start.x;\n var dy = this.uniforms.end.y - this.uniforms.start.y;\n var d = Math.sqrt(dx * dx + dy * dy);\n this.uniforms.delta.x = -dy / d;\n this.uniforms.delta.y = dx / d;\n };\n\n return TiltShiftYFilter;\n}(TiltShiftAxisFilter));\n\n/**\n * @author Vico @vicocotea\n * original filter https://github.com/evanw/glfx.js/blob/master/src/filters/blur/tiltshift.js by Evan Wallace : http://madebyevan.com/\n */\n\n/**\n * A TiltShift Filter. Manages the pass of both a TiltShiftXFilter and TiltShiftYFilter.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/tilt-shift.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-tilt-shift|@pixi/filter-tilt-shift}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {number} [blur=100] The strength of the blur.\n * @param {number} [gradientBlur=600] The strength of the gradient blur.\n * @param {PIXI.Point} [start=null] The Y value to start the effect at.\n * @param {PIXI.Point} [end=null] The Y value to end the effect at.\n */\nvar TiltShiftFilter = /*@__PURE__*/(function (Filter) {\n function TiltShiftFilter(blur, gradientBlur, start, end) {\n if ( blur === void 0 ) blur = 100;\n if ( gradientBlur === void 0 ) gradientBlur = 600;\n if ( start === void 0 ) start = null;\n if ( end === void 0 ) end = null;\n\n Filter.call(this);\n this.tiltShiftXFilter = new TiltShiftXFilter(blur, gradientBlur, start, end);\n this.tiltShiftYFilter = new TiltShiftYFilter(blur, gradientBlur, start, end);\n }\n\n if ( Filter ) TiltShiftFilter.__proto__ = Filter;\n TiltShiftFilter.prototype = Object.create( Filter && Filter.prototype );\n TiltShiftFilter.prototype.constructor = TiltShiftFilter;\n\n var prototypeAccessors = { blur: { configurable: true },gradientBlur: { configurable: true },start: { configurable: true },end: { configurable: true } };\n\n TiltShiftFilter.prototype.apply = function apply (filterManager, input, output) {\n var renderTarget = filterManager.getFilterTexture();\n this.tiltShiftXFilter.apply(filterManager, input, renderTarget, 1);\n this.tiltShiftYFilter.apply(filterManager, renderTarget, output);\n filterManager.returnFilterTexture(renderTarget);\n };\n\n /**\n * The strength of the blur.\n *\n * @member {number}\n */\n prototypeAccessors.blur.get = function () {\n return this.tiltShiftXFilter.blur;\n };\n prototypeAccessors.blur.set = function (value) {\n this.tiltShiftXFilter.blur = this.tiltShiftYFilter.blur = value;\n };\n\n /**\n * The strength of the gradient blur.\n *\n * @member {number}\n */\n prototypeAccessors.gradientBlur.get = function () {\n return this.tiltShiftXFilter.gradientBlur;\n };\n prototypeAccessors.gradientBlur.set = function (value) {\n this.tiltShiftXFilter.gradientBlur = this.tiltShiftYFilter.gradientBlur = value;\n };\n\n /**\n * The Y value to start the effect at.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.start.get = function () {\n return this.tiltShiftXFilter.start;\n };\n prototypeAccessors.start.set = function (value) {\n this.tiltShiftXFilter.start = this.tiltShiftYFilter.start = value;\n };\n\n /**\n * The Y value to end the effect at.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.end.get = function () {\n return this.tiltShiftXFilter.end;\n };\n prototypeAccessors.end.set = function (value) {\n this.tiltShiftXFilter.end = this.tiltShiftYFilter.end = value;\n };\n\n Object.defineProperties( TiltShiftFilter.prototype, prototypeAccessors );\n\n return TiltShiftFilter;\n}(Filter));\n\nexport { TiltShiftAxisFilter, TiltShiftFilter, TiltShiftXFilter, TiltShiftYFilter };\n//# sourceMappingURL=filter-tilt-shift.esm.js.map\n","/*!\n * @pixi/filter-twist - v3.2.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-twist is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\nimport { Point } from '@pixi/math';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\n\\nuniform sampler2D uSampler;\\nuniform float radius;\\nuniform float angle;\\nuniform vec2 offset;\\nuniform vec4 filterArea;\\n\\nvec2 mapCoord( vec2 coord )\\n{\\n coord *= filterArea.xy;\\n coord += filterArea.zw;\\n\\n return coord;\\n}\\n\\nvec2 unmapCoord( vec2 coord )\\n{\\n coord -= filterArea.zw;\\n coord /= filterArea.xy;\\n\\n return coord;\\n}\\n\\nvec2 twist(vec2 coord)\\n{\\n coord -= offset;\\n\\n float dist = length(coord);\\n\\n if (dist < radius)\\n {\\n float ratioDist = (radius - dist) / radius;\\n float angleMod = ratioDist * ratioDist * angle;\\n float s = sin(angleMod);\\n float c = cos(angleMod);\\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\\n }\\n\\n coord += offset;\\n\\n return coord;\\n}\\n\\nvoid main(void)\\n{\\n\\n vec2 coord = mapCoord(vTextureCoord);\\n\\n coord = twist(coord);\\n\\n coord = unmapCoord(coord);\\n\\n gl_FragColor = texture2D(uSampler, coord );\\n\\n}\\n\";\n\n/**\n * This filter applies a twist effect making display objects appear twisted in the given direction.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/twist.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-twist|@pixi/filter-twist}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {object} [options] Object object to use.\n * @param {number} [options.radius=200] The radius of the twist.\n * @param {number} [options.angle=4] The angle of the twist.\n * @param {number} [options.padding=20] Padding for filter area.\n * @param {number} [options.offset] Center of twist, in local, pixel coordinates.\n */\nvar TwistFilter = /*@__PURE__*/(function (Filter) {\n function TwistFilter(options) {\n Filter.call(this, vertex, fragment);\n\n // @deprecated: constructor (radius, angle, padding)\n if (typeof options === 'number') {\n options = { radius: options };\n if (arguments[1] !== undefined) {\n options.angle = arguments[1];\n }\n if (arguments[2] !== undefined) {\n options.padding = arguments[2];\n }\n }\n\n Object.assign(this, {\n radius: 200,\n angle: 4,\n padding: 20,\n offset: new Point(),\n }, options);\n }\n\n if ( Filter ) TwistFilter.__proto__ = Filter;\n TwistFilter.prototype = Object.create( Filter && Filter.prototype );\n TwistFilter.prototype.constructor = TwistFilter;\n\n var prototypeAccessors = { offset: { configurable: true },radius: { configurable: true },angle: { configurable: true } };\n\n /**\n * This point describes the the offset of the twist.\n *\n * @member {PIXI.Point}\n */\n prototypeAccessors.offset.get = function () {\n return this.uniforms.offset;\n };\n prototypeAccessors.offset.set = function (value) {\n this.uniforms.offset = value;\n };\n\n /**\n * The radius of the twist.\n *\n * @member {number}\n */\n prototypeAccessors.radius.get = function () {\n return this.uniforms.radius;\n };\n prototypeAccessors.radius.set = function (value) {\n this.uniforms.radius = value;\n };\n\n /**\n * The angle of the twist.\n *\n * @member {number}\n */\n prototypeAccessors.angle.get = function () {\n return this.uniforms.angle;\n };\n prototypeAccessors.angle.set = function (value) {\n this.uniforms.angle = value;\n };\n\n Object.defineProperties( TwistFilter.prototype, prototypeAccessors );\n\n return TwistFilter;\n}(Filter));\n\nexport { TwistFilter };\n//# sourceMappingURL=filter-twist.esm.js.map\n","/*!\n * @pixi/filter-zoom-blur - v3.2.1\n * Compiled Wed, 30 Dec 2020 19:05:53 UTC\n *\n * @pixi/filter-zoom-blur is licensed under the MIT License.\n * http://www.opensource.org/licenses/mit-license\n */\nimport { Filter } from '@pixi/core';\n\nvar vertex = \"attribute vec2 aVertexPosition;\\nattribute vec2 aTextureCoord;\\n\\nuniform mat3 projectionMatrix;\\n\\nvarying vec2 vTextureCoord;\\n\\nvoid main(void)\\n{\\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\\n vTextureCoord = aTextureCoord;\\n}\";\n\nvar fragment = \"varying vec2 vTextureCoord;\\nuniform sampler2D uSampler;\\nuniform vec4 filterArea;\\n\\nuniform vec2 uCenter;\\nuniform float uStrength;\\nuniform float uInnerRadius;\\nuniform float uRadius;\\n\\nconst float MAX_KERNEL_SIZE = ${maxKernelSize};\\n\\n// author: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\\nhighp float rand(vec2 co, float seed) {\\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n highp float dt = dot(co + seed, vec2(a, b)), sn = mod(dt, 3.14159);\\n return fract(sin(sn) * c + seed);\\n}\\n\\nvoid main() {\\n\\n float minGradient = uInnerRadius * 0.3;\\n float innerRadius = (uInnerRadius + minGradient * 0.5) / filterArea.x;\\n\\n float gradient = uRadius * 0.3;\\n float radius = (uRadius - gradient * 0.5) / filterArea.x;\\n\\n float countLimit = MAX_KERNEL_SIZE;\\n\\n vec2 dir = vec2(uCenter.xy / filterArea.xy - vTextureCoord);\\n float dist = length(vec2(dir.x, dir.y * filterArea.y / filterArea.x));\\n\\n float strength = uStrength;\\n\\n float delta = 0.0;\\n float gap;\\n if (dist < innerRadius) {\\n delta = innerRadius - dist;\\n gap = minGradient;\\n } else if (radius >= 0.0 && dist > radius) { // radius < 0 means it's infinity\\n delta = dist - radius;\\n gap = gradient;\\n }\\n\\n if (delta > 0.0) {\\n float normalCount = gap / filterArea.x;\\n delta = (normalCount - delta) / normalCount;\\n countLimit *= delta;\\n strength *= delta;\\n if (countLimit < 1.0)\\n {\\n gl_FragColor = texture2D(uSampler, vTextureCoord);\\n return;\\n }\\n }\\n\\n // randomize the lookup values to hide the fixed number of samples\\n float offset = rand(vTextureCoord, 0.0);\\n\\n float total = 0.0;\\n vec4 color = vec4(0.0);\\n\\n dir *= strength;\\n\\n for (float t = 0.0; t < MAX_KERNEL_SIZE; t++) {\\n float percent = (t + offset) / MAX_KERNEL_SIZE;\\n float weight = 4.0 * (percent - percent * percent);\\n vec2 p = vTextureCoord + dir * percent;\\n vec4 sample = texture2D(uSampler, p);\\n\\n // switch to pre-multiplied alpha to correctly blur transparent images\\n // sample.rgb *= sample.a;\\n\\n color += sample * weight;\\n total += weight;\\n\\n if (t > countLimit){\\n break;\\n }\\n }\\n\\n color /= total;\\n // switch back from pre-multiplied alpha\\n // color.rgb /= color.a + 0.00001;\\n\\n gl_FragColor = color;\\n}\\n\";\n\n/**\n * The ZoomFilter applies a Zoom blur to an object.
\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/zoom-blur.png)\n *\n * @class\n * @extends PIXI.Filter\n * @memberof PIXI.filters\n * @see {@link https://www.npmjs.com/package/@pixi/filter-zoom-blur|@pixi/filter-zoom-blur}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n * @param {object} [options] Filter options to use.\n * @param {number} [options.strength=0.1] Sets the strength of the zoom blur effect\n * @param {PIXI.Point|number[]} [options.center=[0,0]] The center of the zoom.\n * @param {number} [options.innerRadius=0] The inner radius of zoom. The part in inner circle won't apply zoom blur effect.\n * @param {number} [options.radius=-1] See `radius` property.\n * @param {number} [options.maxKernelSize=32] On older iOS devices, it's better to not go above `13.0`. Decreasing this\n * value will produce a lower-quality blur effect with more dithering.\n */\nvar ZoomBlurFilter = /*@__PURE__*/(function (Filter) {\n function ZoomBlurFilter(options) {\n // @deprecated (strength, center, innerRadius, radius) args\n if (typeof options !== 'object') {\n var strength = arguments[0];\n var center = arguments[1];\n var innerRadius = arguments[2];\n var radius = arguments[3];\n options = {};\n if (strength !== undefined) {\n options.strength = strength;\n }\n if (center !== undefined) {\n options.center = center;\n }\n if (innerRadius !== undefined) {\n options.innerRadius = innerRadius;\n }\n if (radius !== undefined) {\n options.radius = radius;\n }\n }\n\n // Apply default values\n options = Object.assign({\n strength: 0.1,\n center: [0, 0],\n innerRadius: 0,\n radius: -1,\n maxKernelSize: 32,\n }, options);\n\n Filter.call(this, vertex, fragment.replace('${maxKernelSize}', options.maxKernelSize.toFixed(1)));\n\n this.strength = options.strength;\n this.center = options.center;\n this.innerRadius = options.innerRadius;\n this.radius = options.radius;\n }\n\n if ( Filter ) ZoomBlurFilter.__proto__ = Filter;\n ZoomBlurFilter.prototype = Object.create( Filter && Filter.prototype );\n ZoomBlurFilter.prototype.constructor = ZoomBlurFilter;\n\n var prototypeAccessors = { center: { configurable: true },strength: { configurable: true },innerRadius: { configurable: true },radius: { configurable: true } };\n\n /**\n * Center of the effect.\n *\n * @member {PIXI.Point|number[]}\n * @default [0, 0]\n */\n prototypeAccessors.center.get = function () {\n return this.uniforms.uCenter;\n };\n prototypeAccessors.center.set = function (value) {\n this.uniforms.uCenter = value;\n };\n\n /**\n * Intensity of the zoom effect.\n *\n * @member {number}\n * @default 0.1\n */\n prototypeAccessors.strength.get = function () {\n return this.uniforms.uStrength;\n };\n prototypeAccessors.strength.set = function (value) {\n this.uniforms.uStrength = value;\n };\n\n /**\n * Radius of the inner region not effected by blur.\n *\n * @member {number}\n * @default 0\n */\n prototypeAccessors.innerRadius.get = function () {\n return this.uniforms.uInnerRadius;\n };\n prototypeAccessors.innerRadius.set = function (value) {\n this.uniforms.uInnerRadius = value;\n };\n\n /**\n * Outer radius of the effect. The default value is `-1`.\n * `< 0.0` means it's infinity.\n *\n * @member {number}\n * @default -1\n */\n prototypeAccessors.radius.get = function () {\n return this.uniforms.uRadius;\n };\n prototypeAccessors.radius.set = function (value) {\n if (value < 0 || value === Infinity) {\n value = -1;\n }\n this.uniforms.uRadius = value;\n };\n\n Object.defineProperties( ZoomBlurFilter.prototype, prototypeAccessors );\n\n return ZoomBlurFilter;\n}(Filter));\n\nexport { ZoomBlurFilter };\n//# sourceMappingURL=filter-zoom-blur.esm.js.map\n"],"names":["vertex","fragment","AdjustmentFilter","Filter","options","call","this","Object","assign","gamma","saturation","contrast","brightness","red","green","blue","alpha","__proto__","prototype","create","constructor","apply","filterManager","input","output","clear","uniforms","Math","max","applyFilter","fragmentClamp","KawaseBlurFilter","blur","quality","clamp","uOffset","Float32Array","_pixelSize","Point","pixelSize","_clamp","_kernels","Array","isArray","kernels","_blur","prototypeAccessors","configurable","offset","uvX","x","_frame","width","uvY","y","height","_quality","tmp","renderTarget","getFilterTexture","source","target","last","i","returnFilterTexture","_updatePadding","padding","ceil","reduce","acc","v","_generateKernels","k","step","push","get","set","value","length","round","defineProperties","ExtractBrightnessFilter","threshold","fragment$1","AdvancedBloomFilter","bloomScale","resolution","settings","FILTER_RESOLUTION","_extractFilter","_blurFilter","currentState","brightTarget","bloomTarget","bloomTexture","_resolution","AsciiFilter","size","BevelFilter","lightColor","shadowColor","rotation","thickness","lightAlpha","shadowAlpha","_updateTransform","transformX","_thickness","cos","_angle","transformY","sin","DEG_TO_RAD","rgb2hex","hex2rgb","BloomFilter","kernelSize","blurX","blurY","blurXFilter","BlurFilterPass","blurYFilter","blendMode","BLEND_MODES","SCREEN","defaultFilter","AlphaFilter","BulgePinchFilter","center","arguments","radius","strength","undefined","dimensions","filterFrame","ColorMapFilter","colorMap","nearest","mix","_size","_sliceSize","_slicePixelSize","_sliceInnerSize","_scaleMode","_nearest","colorSize","_mix","_colorMap","Texture","from","baseTexture","scaleMode","mipmap","SCALE_MODES","NEAREST","LINEAR","texture","_glTextures","_updateID","emit","updateColorMap","destroy","destroyBase","ColorOverlayFilter","color","arr","_color","ColorReplaceFilter","originalColor","newColor","epsilon","_originalColor","_newColor","ConvolutionFilter","matrix","texelSize","this$1","forEach","CrossHatchFilter","CRTFilter","time","seed","curvature","lineWidth","lineContrast","verticalLine","noise","noiseSize","vignetting","vignettingAlpha","vignettingBlur","DotFilter","scale","angle","DropShadowFilter","console","warn","distance","shadowOnly","_tintFilter","shift","_updateShift","_distance","EmbossFilter","GlitchFilter","slices","direction","fillMode","average","minSize","sampleSize","_canvas","document","createElement","_slices","sizes","offsets","aspect","_randomizeSizes","_sizes","min","count","rest","averageWidth","w","random","rest$1","ratio","sqrt","i$1","w$1","shuffle","rand","temp","_randomizeOffsets","_offsets","refresh","redraw","ctx","getContext","clearRect","floor","fillStyle","fillRect","update","displacementMap","len","slicesWidth","slicesOffset","_direction","radians","sinDir","cosDir","TRANSPARENT","ORIGINAL","LOOP","CLAMP","MIRROR","GlowFilter","ref","defaults","outerStrength","innerStrength","knockout","replace","toFixed","glowColor","perlin","GodrayFilter","gain","lacunarity","parallel","_angleLight","light","MotionBlurFilter","velocity","uVelocity","_velocity","ObservablePoint","velocityChanged","uKernelSize","copyFrom","MultiColorReplaceFilter","replacements","maxColors","_maxColors","_replacements","originalColors","targetColors","originals","targets","colorCount","pair","targetColor","OldFilmFilter","sepia","scratch","scratchDensity","scratchWidth","OutlineFilter","samples","MAX_SAMPLES","MIN_SAMPLES","angleStep","PI","outlineColor","PixelateFilter","RadialBlurFilter","uRadian","uCenter","uRadius","Infinity","ReflectionFilter","amplitude","waveLength","mirror","boundary","RGBSplitFilter","ShockwaveFilter","wavelength","speed","SimpleLightmapFilter","ambientColor","uLightmap","TiltShiftAxisFilter","gradientBlur","start","end","window","innerHeight","delta","texSize","innerWidth","updateDelta","TiltShiftXFilter","dx","dy","d","TiltShiftYFilter","TiltShiftFilter","tiltShiftXFilter","tiltShiftYFilter","TwistFilter","ZoomBlurFilter","innerRadius","maxKernelSize","uStrength","uInnerRadius"],"mappings":"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"}