{"version":3,"file":"BlurFilterPass.mjs","sources":["../src/BlurFilterPass.ts"],"sourcesContent":["import { CLEAR_MODES, Filter } from 'pixijs/core';\nimport { generateBlurFragSource } from './generateBlurFragSource';\nimport { generateBlurVertSource } from './generateBlurVertSource';\n\nimport type { FilterSystem, RenderTexture } from 'pixijs/core';\n\n/**\n * The BlurFilterPass applies a horizontal or vertical Gaussian blur to an object.\n * @memberof PIXI\n */\nexport class BlurFilterPass extends Filter\n{\n    public horizontal: boolean;\n    public strength: number;\n    public passes: number;\n\n    private _quality: number;\n\n    /**\n     * @param horizontal - Do pass along the x-axis (`true`) or y-axis (`false`).\n     * @param strength - The strength of the blur filter.\n     * @param quality - The quality of the blur filter.\n     * @param resolution - The resolution of the blur filter.\n     * @param kernelSize - The kernelSize of the blur filter.Options: 5, 7, 9, 11, 13, 15.\n     */\n    constructor(horizontal: boolean, strength = 8, quality = 4, resolution = Filter.defaultResolution, kernelSize = 5)\n    {\n        const vertSrc = generateBlurVertSource(kernelSize, horizontal);\n        const fragSrc = generateBlurFragSource(kernelSize);\n\n        super(\n            // vertex shader\n            vertSrc,\n            // fragment shader\n            fragSrc\n        );\n\n        this.horizontal = horizontal;\n\n        this.resolution = resolution;\n\n        this._quality = 0;\n\n        this.quality = quality;\n\n        this.blur = strength;\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, input: RenderTexture, output: RenderTexture, clearMode: CLEAR_MODES\n    ): void\n    {\n        if (output)\n        {\n            if (this.horizontal)\n            {\n                this.uniforms.strength = (1 / output.width) * (output.width / input.width);\n            }\n            else\n            {\n                this.uniforms.strength = (1 / output.height) * (output.height / input.height);\n            }\n        }\n        else\n        {\n            if (this.horizontal) // eslint-disable-line\n            {\n                this.uniforms.strength = (1 / filterManager.renderer.width) * (filterManager.renderer.width / input.width);\n            }\n            else\n            {\n                this.uniforms.strength = (1 / filterManager.renderer.height) * (filterManager.renderer.height / input.height); // eslint-disable-line\n            }\n        }\n\n        // screen space!\n        this.uniforms.strength *= this.strength;\n        this.uniforms.strength /= this.passes;\n\n        if (this.passes === 1)\n        {\n            filterManager.applyFilter(this, input, output, clearMode);\n        }\n        else\n        {\n            const renderTarget = filterManager.getFilterTexture();\n            const renderer = filterManager.renderer;\n\n            let flip = input;\n            let flop = renderTarget;\n\n            this.state.blend = false;\n            filterManager.applyFilter(this, flip, flop, CLEAR_MODES.CLEAR);\n\n            for (let i = 1; i < this.passes - 1; i++)\n            {\n                filterManager.bindAndClear(flip, CLEAR_MODES.BLIT);\n\n                this.uniforms.uSampler = flop;\n\n                const temp = flop;\n\n                flop = flip;\n                flip = temp;\n\n                renderer.shader.bind(this);\n                renderer.geometry.draw(5);\n            }\n\n            this.state.blend = true;\n            filterManager.applyFilter(this, flop, output, clearMode);\n            filterManager.returnFilterTexture(renderTarget);\n        }\n    }\n    /**\n     * Sets the strength of both the blur.\n     * @default 16\n     */\n    get blur(): number\n    {\n        return this.strength;\n    }\n\n    set blur(value: number)\n    {\n        this.padding = 1 + (Math.abs(value) * 2);\n        this.strength = value;\n    }\n\n    /**\n     * Sets the quality of the blur by modifying the number of passes. More passes means higher\n     * quality bluring but the lower the performance.\n     * @default 4\n     */\n    get quality(): number\n    {\n        return this._quality;\n    }\n\n    set quality(value: number)\n    {\n        this._quality = value;\n        this.passes = value;\n    }\n}\n"],"names":[],"mappings":"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"}