{"version":3,"file":"BloomFilter.mjs","sources":["../../src/bloom/BloomFilter.ts"],"sourcesContent":["/* eslint-disable max-len */\nimport {\n    AlphaFilter,\n    BlurFilterPass,\n    deprecation,\n    FilterSystem,\n    PointData,\n    RenderSurface,\n    Texture,\n    TexturePool,\n} from 'pixi.js';\n\ntype DeprecatedBlurValue = number | PointData | number[];\n\n/** Options for the BloomFilter constructor. */\nexport interface BloomFilterOptions\n{\n    /**\n     * Sets the strength of the blur. If only a number is provided, it will assign to both x and y.\n     * @default {x:2,y:2}\n     */\n    strength?: PointData | number;\n    /**\n     * The quality of the blur.\n     * @default 4\n     */\n    quality?: number;\n    /**\n     * The resolution of the blurX & blurY filter.\n     * @default 1\n     */\n    resolution?: number;\n    /**\n     * The kernel size of the blur filter. Must be an odd number between 5 and 15 (inclusive).\n     * @default 5\n     */\n    kernelSize?: number;\n}\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.<br>\n * ![original](../screenshots/original.png)![filter](../screenshots/bloom.png)\n *\n * @class\n * @extends Filter\n */\nexport class BloomFilter extends AlphaFilter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: BloomFilterOptions = {\n        strength: { x: 2, y: 2 },\n        quality: 4,\n        resolution: 1,\n        kernelSize: 5\n    };\n\n    private _blurXFilter: BlurFilterPass;\n    private _blurYFilter: BlurFilterPass;\n    private _strength: PointData;\n\n    /**\n     * @param {BloomFilterOptions} options - Options for the BloomFilter constructor.\n     */\n    constructor(options?: BloomFilterOptions);\n    /**\n    * @deprecated since 6.0.0\n    *\n    * @param {number|PIXI.PointData|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=1] - 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    */\n    constructor(blur?: DeprecatedBlurValue, quality?: number, resolution?: number, kernelSize?: number);\n    /** @ignore */\n    constructor(...args: [BloomFilterOptions?] | [DeprecatedBlurValue?, number?, number?, number?])\n    {\n        let options = args[0] ?? {};\n\n        if (typeof options === 'number' || Array.isArray(options) || ('x' in options && 'y' in options))\n        {\n            // eslint-disable-next-line max-len\n            deprecation('6.0.0', 'BloomFilter constructor params are now options object. See params: { strength, quality, resolution, kernelSize }');\n\n            let strength = options;\n\n            if (Array.isArray(strength)) strength = { x: strength[0], y: strength[1] };\n\n            options = { strength };\n\n            if (args[1] !== undefined) options.quality = args[1];\n            if (args[2] !== undefined) options.resolution = args[2];\n            if (args[3] !== undefined) options.kernelSize = args[3];\n        }\n\n        options = { ...BloomFilter.DEFAULT_OPTIONS, ...options } as BloomFilterOptions;\n\n        super();\n\n        this._strength = { x: 2, y: 2 };\n\n        if (options.strength)\n        {\n            if (typeof options.strength === 'number')\n            {\n                this._strength.x = options.strength;\n                this._strength.y = options.strength;\n            }\n            else\n            {\n                this._strength.x = options.strength.x;\n                this._strength.y = options.strength.y;\n            }\n        }\n\n        this._blurXFilter = new BlurFilterPass({\n            ...options,\n            horizontal: true,\n            strength: this.strengthX,\n        });\n\n        this._blurYFilter = new BlurFilterPass({\n            ...options,\n            horizontal: false,\n            strength: this.strengthY,\n        });\n\n        this._blurYFilter.blendMode = 'screen';\n\n        Object.assign(this, options);\n    }\n\n    /**\n     * Override existing apply method in `Filter`\n     * @override\n     * @ignore\n     */\n    public override apply(\n        filterManager: FilterSystem,\n        input: Texture,\n        output: RenderSurface,\n        clear: boolean,\n    ): void\n    {\n        const renderTarget = TexturePool.getSameSizeTexture(input);\n\n        filterManager.applyFilter(this, input, output, clear);\n        this._blurXFilter.apply(filterManager, input, renderTarget, true);\n        this._blurYFilter.apply(filterManager, renderTarget, output, false);\n\n        TexturePool.returnTexture(renderTarget);\n    }\n\n    /**\n     * Sets the strength of both the blurX and blurY properties simultaneously\n     * @default 2\n     */\n    get strength(): PointData { return this._strength; }\n    set strength(value: PointData | number)\n    {\n        this._strength = typeof value === 'number' ? { x: value, y: value } : value;\n        this._updateStrength();\n    }\n\n    /**\n     * Sets the strength of the blur on the `x` axis\n     * @default 2\n     */\n    get strengthX(): number { return this.strength.x; }\n    set strengthX(value: number)\n    {\n        this.strength.x = value;\n        this._updateStrength();\n    }\n\n    /**\n     * Sets the strength of the blur on the `y` axis\n     * @default 2\n     */\n    get strengthY(): number { return this.strength.y; }\n    set strengthY(value: number)\n    {\n        this.strength.y = value;\n        this._updateStrength();\n    }\n\n    private _updateStrength()\n    {\n        this._blurXFilter.blur = this.strengthX;\n        this._blurYFilter.blur = this.strengthY;\n    }\n\n    /**\n     * @deprecated since 6.0.0\n     *\n     * The strength of both the blurX and blurY properties simultaneously\n     * @default 2\n     * @see BloomFilter#strength\n     */\n    get blur(): number\n    {\n        deprecation('6.0.0', 'BloomFilter.blur is deprecated, please use BloomFilter.strength instead');\n\n        return this.strengthX;\n    }\n    set blur(value: number)\n    {\n        deprecation('6.0.0', 'BloomFilter.blur is deprecated, please use BloomFilter.strength instead');\n\n        this.strength = value;\n    }\n\n    /**\n     * @deprecated since 6.0.0\n     *\n     * The strength of the blurX property\n     * @default 2\n     * @see BloomFilter#strengthX\n     */\n    get blurX(): number\n    {\n        deprecation('6.0.0', 'BloomFilter.blurX is deprecated, please use BloomFilter.strengthX instead');\n\n        return this.strengthX;\n    }\n    set blurX(value: number)\n    {\n        deprecation('6.0.0', 'BloomFilter.blurX is deprecated, please use BloomFilter.strengthX instead');\n\n        this.strengthX = value;\n    }\n\n    /**\n     * @deprecated since 6.0.0\n     *\n     * The strength of the blurY property\n     * @default 2\n     * @see BloomFilter#strengthY\n     */\n    get blurY(): number\n    {\n        deprecation('6.0.0', 'BloomFilter.blurY is deprecated, please use BloomFilter.strengthY instead');\n\n        return this.strengthY;\n    }\n    set blurY(value: number)\n    {\n        deprecation('6.0.0', 'BloomFilter.blurY is deprecated, please use BloomFilter.strengthY instead');\n\n        this.strengthY = value;\n    }\n}\n"],"names":[],"mappings":"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"}