{"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 * Configuration options for the BlurFilter.\n * Controls how the Gaussian blur effect is applied.\n * @example\n * ```ts\n * // Basic blur with default values\n * const filter = new BlurFilter();\n *\n * // Custom blur configuration\n * const filter = new BlurFilter({\n *     strength: 8,        // Overall blur strength\n *     quality: 4,         // Higher quality = better blur\n *     kernelSize: 5      // Size of blur kernel\n * });\n *\n * // Different horizontal/vertical blur\n * const filter = new BlurFilter({\n *     strengthX: 4,      // Horizontal blur only\n *     strengthY: 12,     // Stronger vertical blur\n *     quality: 2         // Lower quality for better performance\n * });\n * ```\n * @remarks\n * - Higher quality values produce better blur but impact performance\n * - KernelSize affects blur precision and performance\n * - Strength values determine blur intensity\n * @see {@link BlurFilter} The filter that uses these options\n * @see {@link FilterOptions} Base filter options\n * @category filters\n * @standard\n */\nexport interface BlurFilterOptions extends FilterOptions\n{\n    /**\n     * The strength of the blur filter.\n     * Applied to both horizontal and vertical blur if strengthX/Y not set.\n     * @default 8\n     */\n    strength?: number;\n\n    /**\n     * The horizontal strength of the blur.\n     * Overrides strength parameter for x-axis.\n     * @default 8\n     */\n    strengthX?: number;\n\n    /**\n     * The vertical strength of the blur.\n     * Overrides strength parameter for y-axis.\n     * @default 8\n     */\n    strengthY?: number;\n\n    /**\n     * The quality of the blur filter.\n     * Higher values mean better quality but slower performance.\n     * @default 4\n     */\n    quality?: number;\n\n    /**\n     * The kernelSize of the blur filter.\n     * Larger values create more precise blur but impact performance.\n     * Options: 5, 7, 9, 11, 13, 15.\n     * @default 5\n     */\n    kernelSize?: number;\n\n    /**\n     * When true, uses the legacy (pre-v8.x) blur pass behavior where strength\n     * is distributed uniformly across passes (`strength / passes`) instead of\n     * the optimized halving scheme. This also disables per-pass WebGPU UBO batching.\n     * @default false\n     */\n    legacy?: boolean;\n}\n\n/**\n * The BlurFilter applies a Gaussian blur to an object.\n * The strength of the blur can be set for the x-axis and y-axis separately.\n * @example\n * ```ts\n * import { BlurFilter } from 'pixi.js';\n *\n * // Create with default settings\n * const filter = new BlurFilter();\n *\n * // Create with custom settings\n * const filter = new BlurFilter({\n *     strength: 8,      // Overall blur strength\n *     quality: 4,       // Blur quality (higher = better but slower)\n *     kernelSize: 5     // Size of blur kernel matrix\n * });\n *\n * // Apply to a display object\n * sprite.filters = [filter];\n *\n * // Update properties\n * filter.strength = 10;          // Set both X and Y blur\n * filter.strengthX = 5;          // Set only horizontal blur\n * filter.strengthY = 15;         // Set only vertical blur\n * filter.quality = 2;            // Adjust quality\n *\n * // Enable edge pixel clamping\n * filter.repeatEdgePixels = true;\n * ```\n * @remarks\n * - Higher quality values produce better blur but impact performance\n * - Strength controls blur intensity independently for X and Y\n * - Can be optimized using quality and kernelSize settings\n * - Supports edge pixel clamping for special effects\n * @see {@link BlurFilterPass} For single-direction blur\n * @see {@link FilterOptions} For base filter options\n * @category filters\n * @standard\n * @noInheritDoc\n */\nexport class BlurFilter extends Filter\n{\n    /**\n     * Default blur filter options\n     * @example\n     * ```ts\n     * // Set default options for all BlurFilters\n     * BlurFilter.defaultOptions = {\n     *     strength: 10,       // Default blur strength\n     *     quality: 2,        // Default blur quality\n     *     kernelSize: 7      // Default kernel size\n     * };\n     * // Create a filter with these defaults\n     * const filter = new BlurFilter(); // Uses default options\n     * ```\n     * @remarks\n     * - These options are used when creating a new BlurFilter without specific parameters\n     * - Can be overridden by passing options to the constructor\n     * - Useful for setting global defaults for all blur filters in your application\n     * @see {@link BlurFilterOptions} For detailed options\n     * @see {@link BlurFilter} The filter that uses these options\n     */\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        /** Whether to use legacy blur pass behavior. */\n        legacy: false,\n    };\n\n    /**\n     * The horizontal blur filter\n     * @advanced\n     */\n    public blurXFilter: BlurFilterPass;\n    /**\n     * The vertical blur filter\n     * @advanced\n     */\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     * @advanced\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     * Controls the overall intensity of the Gaussian blur effect.\n     * @example\n     * ```ts\n     * // Set equal blur strength for both axes\n     * filter.strength = 8;\n     *\n     * // Will throw error if X and Y are different\n     * filter.strengthX = 4;\n     * filter.strengthY = 8;\n     * filter.strength; // Error: BlurFilter's strengthX and strengthY are different\n     * ```\n     * @default 8\n     * @throws {Error} If strengthX and strengthY are different values\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 blurring.\n     * Controls the precision and smoothness of the blur effect at the cost of performance.\n     * @example\n     * ```ts\n     * // High quality blur (slower)\n     * filter.quality = 8;\n     *\n     * // Low quality blur (faster)\n     * filter.quality = 2;\n     * ```\n     * @default 4\n     * @remarks Higher values produce better quality but impact performance\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     * Controls the blur intensity along the x-axis independently.\n     * @example\n     * ```ts\n     * // Apply horizontal-only blur\n     * filter.strengthX = 8;\n     * filter.strengthY = 0;\n     *\n     * // Create motion blur effect\n     * filter.strengthX = 16;\n     * filter.strengthY = 2;\n     * ```\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     * Controls the blur intensity along the y-axis independently.\n     * @example\n     * ```ts\n     * // Apply vertical-only blur\n     * filter.strengthX = 0;\n     * filter.strengthY = 8;\n     *\n     * // Create radial blur effect\n     * filter.strengthX = 8;\n     * filter.strengthY = 8;\n     * ```\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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"}