{"version":3,"file":"BackdropBlurFilter.mjs","sources":["../../src/backdrop-blur/BackdropBlurFilter.ts"],"sourcesContent":["import {\n    BlurFilter,\n    BlurFilterOptions,\n    Filter,\n    FilterSystem,\n    GlProgram,\n    GpuProgram,\n    RenderSurface,\n    Texture,\n    TexturePool,\n} from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './backdrop-blur-blend.frag';\nimport wgslFragment from './backdrop-blur-blend.wgsl';\n\n/**\n * The BackdropBlurFilter applies a Gaussian blur to everything behind an object, and then draws the object on top of it.<br>\n * ![original](../screenshots/original.png)![filter](../screenshots/backdrop-blur.png)\n *\n * @class\n * @extends BlurFilter\n */\nexport class BackdropBlurFilter extends BlurFilter\n{\n    private _blendPass: Filter;\n\n    /**\n     * @param options - The options of the blur filter.\n     */\n    constructor(options?: BlurFilterOptions)\n    {\n        super(options);\n\n        this.blendRequired = true;\n        this.padding = 0;\n\n        this._blendPass = new Filter({\n            gpuProgram: GpuProgram.from({\n                vertex: {\n                    source: wgslVertex,\n                    entryPoint: 'mainVertex',\n                },\n                fragment: {\n                    source: wgslFragment,\n                    entryPoint: 'mainFragment',\n                },\n            }),\n            glProgram: GlProgram.from({\n                vertex,\n                fragment,\n                name: 'drop-shadow-filter',\n            }),\n            resources: {\n                uBackground: Texture.EMPTY,\n            },\n        });\n    }\n\n    /**\n     * Override existing apply method in `Filter`\n     * @override\n     * @ignore\n     */\n    public apply(\n        filterManager: FilterSystem,\n        input: Texture,\n        output: RenderSurface,\n        clearMode: boolean\n    ): void\n    {\n        // @ts-expect-error - this should probably not be grabbed from a private property\n        const backTexture = filterManager._activeFilterData.backTexture;\n\n        const blurredBackground = TexturePool.getSameSizeTexture(input);\n\n        super.apply(filterManager, backTexture, blurredBackground, true);\n\n        this._blendPass.resources.uBackground = blurredBackground.source;\n        this._blendPass.apply(filterManager, input, output, clearMode);\n\n        TexturePool.returnTexture(blurredBackground);\n    }\n\n    protected updatePadding(): void\n    {\n        this.padding = 0;\n    }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAsBO,MAAM,2BAA2B,UACxC,CAAA;AAAA;AAAA;AAAA;AAAA,EAMI,YAAY,OACZ,EAAA;AACI,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAPjB,IAAQ,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAA;AASJ,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;AACrB,IAAA,IAAA,CAAK,OAAU,GAAA,CAAA,CAAA;AAEf,IAAK,IAAA,CAAA,UAAA,GAAa,IAAI,MAAO,CAAA;AAAA,MACzB,UAAA,EAAY,WAAW,IAAK,CAAA;AAAA,QACxB,MAAQ,EAAA;AAAA,UACJ,MAAQ,EAAA,UAAA;AAAA,UACR,UAAY,EAAA,YAAA;AAAA,SAChB;AAAA,QACA,QAAU,EAAA;AAAA,UACN,MAAQ,EAAA,YAAA;AAAA,UACR,UAAY,EAAA,cAAA;AAAA,SAChB;AAAA,OACH,CAAA;AAAA,MACD,SAAA,EAAW,UAAU,IAAK,CAAA;AAAA,QACtB,MAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAM,EAAA,oBAAA;AAAA,OACT,CAAA;AAAA,MACD,SAAW,EAAA;AAAA,QACP,aAAa,OAAQ,CAAA,KAAA;AAAA,OACzB;AAAA,KACH,CAAA,CAAA;AAAA,GACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,KACH,CAAA,aAAA,EACA,KACA,EAAA,MAAA,EACA,SAEJ,EAAA;AAEI,IAAM,MAAA,WAAA,GAAc,cAAc,iBAAkB,CAAA,WAAA,CAAA;AAEpD,IAAM,MAAA,iBAAA,GAAoB,WAAY,CAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AAE9D,IAAA,KAAA,CAAM,KAAM,CAAA,aAAA,EAAe,WAAa,EAAA,iBAAA,EAAmB,IAAI,CAAA,CAAA;AAE/D,IAAK,IAAA,CAAA,UAAA,CAAW,SAAU,CAAA,WAAA,GAAc,iBAAkB,CAAA,MAAA,CAAA;AAC1D,IAAA,IAAA,CAAK,UAAW,CAAA,KAAA,CAAM,aAAe,EAAA,KAAA,EAAO,QAAQ,SAAS,CAAA,CAAA;AAE7D,IAAA,WAAA,CAAY,cAAc,iBAAiB,CAAA,CAAA;AAAA,GAC/C;AAAA,EAEU,aACV,GAAA;AACI,IAAA,IAAA,CAAK,OAAU,GAAA,CAAA,CAAA;AAAA,GACnB;AACJ;;;;"}