{"version":3,"file":"BlurFilter.mjs","sources":["../../../../src/filters/defaults/blur/BlurFilter.ts"],"sourcesContent":["import { TexturePool } from '../../../rendering/renderers/shared/texture/TexturePool';\nimport { RendererType } from '../../../rendering/renderers/types';\nimport { deprecation, v8_0_0 } from '../../../utils/logging/deprecation';\nimport { Filter } from '../../Filter';\nimport { BlurFilterPass } from './BlurFilterPass';\n\nimport type { RenderSurface } from '../../../rendering/renderers/shared/renderTarget/RenderTargetSystem';\nimport type { Texture } from '../../../rendering/renderers/shared/texture/Texture';\nimport type { FilterOptions } from '../../Filter';\nimport type { FilterSystem } from '../../FilterSystem';\n\n/**\n * Options for BlurFilter\n * @memberof filters\n */\nexport interface BlurFilterOptions extends FilterOptions\n{\n    /**\n     * The strength of the blur filter.\n     * @default 8\n     */\n    strength?: number;\n    /**\n     * The horizontal strength of the blur.\n     * @default 8\n     */\n    strengthX?: number;\n    /**\n     * The vertical strength of the blur.\n     * @default 8\n     */\n    strengthY?: number;\n    /**\n     * The quality of the blur filter.\n     * @default 4\n     */\n    quality?: number;\n    /**\n     * The kernelSize of the blur filter.Options: 5, 7, 9, 11, 13, 15.\n     * @default 5\n     */\n    kernelSize?: number;\n}\n\n/**\n * The BlurFilter applies a Gaussian blur to an object.\n *\n * The strength of the blur can be set for the x-axis and y-axis separately.\n * @memberof filters\n */\nexport class BlurFilter extends Filter\n{\n    /** Default blur filter options */\n    public static defaultOptions: Partial<BlurFilterOptions> = {\n        /** The strength of the blur filter. */\n        strength: 8,\n        /** The quality of the blur filter. */\n        quality: 4,\n        /** The kernelSize of the blur filter.Options: 5, 7, 9, 11, 13, 15. */\n        kernelSize: 5,\n    };\n\n    /** The horizontal blur filter */\n    public blurXFilter: BlurFilterPass;\n    /** The vertical blur filter */\n    public blurYFilter: BlurFilterPass;\n\n    private _repeatEdgePixels = false;\n\n    /**\n     * @param {filters.BlurFilterOptions} options - The options of the blur filter.\n     */\n    constructor(options?: BlurFilterOptions);\n    /** @deprecated since 8.0.0 */\n    constructor(strength?: number, quality?: number, resolution?: number | null, kernelSize?: number);\n    constructor(...args: [BlurFilterOptions?] | [number?, number?, number?, number?])\n    {\n        let options = args[0] ?? {};\n\n        // if options is a number)\n        if (typeof options === 'number')\n        {\n            // #if _DEBUG\n            // eslint-disable-next-line max-len\n            deprecation(v8_0_0, 'BlurFilter constructor params are now options object. See params: { strength, quality, resolution, kernelSize }');\n            // #endif\n\n            options = { strength: options };\n\n            if (args[1] !== undefined)options.quality = args[1];\n            if (args[2] !== undefined)options.resolution = args[2] || 'inherit';\n            if (args[3] !== undefined)options.kernelSize = args[3];\n        }\n\n        options = { ...BlurFilterPass.defaultOptions, ...options };\n\n        const { strength, strengthX, strengthY, quality, ...rest } = options;\n\n        super({\n            ...rest,\n            compatibleRenderers: RendererType.BOTH,\n            resources: {}\n        });\n\n        this.blurXFilter = new BlurFilterPass({ horizontal: true, ...options });\n        this.blurYFilter = new BlurFilterPass({ horizontal: false, ...options });\n\n        this.quality = quality;\n        this.strengthX = strengthX ?? strength;\n        this.strengthY = strengthY ?? strength;\n        this.repeatEdgePixels = false;\n    }\n\n    /**\n     * Applies the filter.\n     * @param filterManager - The manager.\n     * @param input - The input target.\n     * @param output - The output target.\n     * @param clearMode - How to clear\n     */\n    public apply(\n        filterManager: FilterSystem,\n        input: Texture,\n        output: RenderSurface,\n        clearMode: boolean\n    ): void\n    {\n        const xStrength = Math.abs(this.blurXFilter.strength);\n        const yStrength = Math.abs(this.blurYFilter.strength);\n\n        if (xStrength && yStrength)\n        {\n            const tempTexture = TexturePool.getSameSizeTexture(input);\n\n            this.blurXFilter.blendMode = 'normal';\n            this.blurXFilter.apply(filterManager, input, tempTexture, true);\n            this.blurYFilter.blendMode = this.blendMode;\n            this.blurYFilter.apply(filterManager, tempTexture, output, clearMode);\n\n            TexturePool.returnTexture(tempTexture);\n        }\n        else if (yStrength)\n        {\n            this.blurYFilter.blendMode = this.blendMode;\n            this.blurYFilter.apply(filterManager, input, output, clearMode);\n        }\n        else\n        {\n            this.blurXFilter.blendMode = this.blendMode;\n            this.blurXFilter.apply(filterManager, input, output, clearMode);\n        }\n    }\n\n    protected updatePadding(): void\n    {\n        if (this._repeatEdgePixels)\n        {\n            this.padding = 0;\n        }\n        else\n        {\n            this.padding = Math.max(Math.abs(this.blurXFilter.blur), Math.abs(this.blurYFilter.blur)) * 2;\n        }\n    }\n\n    /**\n     * Sets the strength of both the blurX and blurY properties simultaneously\n     * @default 8\n     */\n    get strength(): number\n    {\n        if (this.strengthX !== this.strengthY)\n        {\n            throw new Error('BlurFilter\\'s strengthX and strengthY are different');\n        }\n\n        return this.strengthX;\n    }\n\n    set strength(value: number)\n    {\n        this.blurXFilter.blur = this.blurYFilter.blur = value;\n        this.updatePadding();\n    }\n\n    /**\n     * Sets the number of passes for blur. More passes means higher quality bluring.\n     * @default 1\n     */\n    get quality(): number\n    {\n        return this.blurXFilter.quality;\n    }\n\n    set quality(value: number)\n    {\n        this.blurXFilter.quality = this.blurYFilter.quality = value;\n    }\n\n    /**\n     * Sets the strength of horizontal blur\n     * @default 8\n     */\n    get strengthX(): number\n    {\n        return this.blurXFilter.blur;\n    }\n\n    set strengthX(value: number)\n    {\n        this.blurXFilter.blur = value;\n        this.updatePadding();\n    }\n\n    /**\n     * Sets the strength of the vertical blur\n     * @default 8\n     */\n    get strengthY(): number\n    {\n        return this.blurYFilter.blur;\n    }\n\n    set strengthY(value: number)\n    {\n        this.blurYFilter.blur = value;\n        this.updatePadding();\n    }\n\n    /**\n     * Sets the strength of both the blurX and blurY properties simultaneously\n     * @default 2\n     * @deprecated since 8.3.0\n     * @see BlurFilter.strength\n     */\n    get blur(): number\n    {\n        // #if _DEBUG\n        deprecation('8.3.0', 'BlurFilter.blur is deprecated, please use BlurFilter.strength instead.');\n        // #endif\n\n        return this.strength;\n    }\n\n    set blur(value: number)\n    {\n        // #if _DEBUG\n        deprecation('8.3.0', 'BlurFilter.blur is deprecated, please use BlurFilter.strength instead.');\n        // #endif\n        this.strength = value;\n    }\n\n    /**\n     * Sets the strength of the blurX property\n     * @default 2\n     * @deprecated since 8.3.0\n     * @see BlurFilter.strengthX\n     */\n    get blurX(): number\n    {\n        // #if _DEBUG\n        deprecation('8.3.0', 'BlurFilter.blurX is deprecated, please use BlurFilter.strengthX instead.');\n        // #endif\n\n        return this.strengthX;\n    }\n\n    set blurX(value: number)\n    {\n        // #if _DEBUG\n        deprecation('8.3.0', 'BlurFilter.blurX is deprecated, please use BlurFilter.strengthX instead.');\n        // #endif\n        this.strengthX = value;\n    }\n\n    /**\n     * Sets the strength of the blurY property\n     * @default 2\n     * @deprecated since 8.3.0\n     * @see BlurFilter.strengthY\n     */\n    get blurY(): number\n    {\n        // #if _DEBUG\n        deprecation('8.3.0', 'BlurFilter.blurY is deprecated, please use BlurFilter.strengthY instead.');\n        // #endif\n\n        return this.strengthY;\n    }\n\n    set blurY(value: number)\n    {\n        // #if _DEBUG\n        deprecation('8.3.0', 'BlurFilter.blurY is deprecated, please use BlurFilter.strengthY instead.');\n        // #endif\n        this.strengthY = value;\n    }\n\n    /**\n     * If set to true the edge of the target will be clamped\n     * @default false\n     */\n    get repeatEdgePixels(): boolean\n    {\n        return this._repeatEdgePixels;\n    }\n\n    set repeatEdgePixels(value: boolean)\n    {\n        this._repeatEdgePixels = value;\n        this.updatePadding();\n    }\n}\n"],"names":[],"mappings":"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"}