{"version":3,"file":"filter-advanced-bloom.mjs","sources":["../src/ExtractBrightnessFilter.ts","../src/AdvancedBloomFilter.ts"],"sourcesContent":["import { vertex } from '@tools/fragments';\nimport fragment from './extract-brightness.frag';\nimport { Filter } from '@pixi/core';\n\n/**\n * Internal filter for AdvancedBloomFilter to get brightness.\n * @class\n * @private\n */\nclass ExtractBrightnessFilter extends Filter\n{\n    /**\n     * @param {number} [threshold] - Defines how bright a color needs to be extracted.\n     */\n    constructor(threshold = 0.5)\n    {\n        super(vertex, fragment);\n\n        this.threshold = threshold;\n    }\n\n    /**\n     * Defines how bright a color needs to be extracted.\n     *\n     * @default 0.5\n     */\n    get threshold(): number\n    {\n        return this.uniforms.threshold;\n    }\n    set threshold(value: number)\n    {\n        this.uniforms.threshold = value;\n    }\n}\n\nexport { ExtractBrightnessFilter };\n\n","import { ExtractBrightnessFilter } from './ExtractBrightnessFilter';\nimport { KawaseBlurFilter } from '@pixi/filter-kawase-blur';\nimport { vertex } from '@tools/fragments';\nimport fragment from './advanced-bloom.frag';\nimport { Filter, settings } from '@pixi/core';\nimport type { FilterSystem, FilterState, RenderTexture, CLEAR_MODES } from '@pixi/core';\nimport type { PixelSizeValue } from '@pixi/filter-kawase-blur';\n\ninterface AdvancedBloomFilterOptions\n{\n    threshold: number,\n    bloomScale: number,\n    brightness: number,\n    kernels: number[] | null,\n    blur: number,\n    quality: number,\n    pixelSize: PixelSizeValue,\n    resolution: number,\n}\n\n/**\n * The AdvancedBloomFilter applies a Bloom Effect to an object. Unlike the normal BloomFilter\n * this had some advanced controls for adjusting the look of the bloom. Note: this filter\n * is slower than normal BloomFilter.<br>\n * ![original](../tools/screenshots/dist/original.png)![filter](../tools/screenshots/dist/advanced-bloom.png)\n *\n * @class\n * @extends PIXI.Filter\n * @see {@link https://www.npmjs.com/package/@pixi/filter-advanced-bloom|@pixi/filter-advanced-bloom}\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n */\nclass AdvancedBloomFilter extends Filter\n{\n    /** Default construction options. */\n    public static readonly defaults: AdvancedBloomFilterOptions = {\n        threshold: 0.5,\n        bloomScale: 1.0,\n        brightness: 1.0,\n        kernels: null,\n        blur: 8,\n        quality: 4,\n        pixelSize: 1,\n        resolution: settings.FILTER_RESOLUTION,\n    };\n\n    /** To adjust the strength of the bloom. Higher values is more intense brightness. */\n    public bloomScale = 1;\n\n    /** The brightness, lower value is more subtle brightness, higher value is blown-out. */\n    public brightness = 1;\n\n    private _extractFilter: ExtractBrightnessFilter;\n    private _blurFilter: KawaseBlurFilter;\n    protected _resolution: number = settings.FILTER_RESOLUTION;\n\n    /**\n     * @param {object|number} [options] - The optional parameters of advanced bloom filter.\n     *                        When options is a number , it will be `options.threshold`.\n     * @param {number} [options.threshold=0.5] - Defines how bright a color needs to be to affect bloom.\n     * @param {number} [options.bloomScale=1.0] - To adjust the strength of the bloom. Higher values is\n     *        more intense brightness.\n     * @param {number} [options.brightness=1.0] - The brightness, lower value is more subtle brightness,\n     *        higher value is blown-out.\n     * @param {number} [options.blur=8] - Sets the strength of the Blur properties simultaneously\n     * @param {number} [options.quality=4] - The quality of the Blur filter.\n     * @param {number[]} [options.kernels=null] - The kernels of the Blur filter.\n     * @param {number|number[]|PIXI.Point} [options.pixelSize=1] - the pixelSize of the Blur filter.\n     * @param {number} [options.resolution=PIXI.settings.FILTER_RESOLUTION] - The resolution of the Blur filter.\n     */\n    constructor(options?: Partial<AdvancedBloomFilterOptions>)\n    {\n        super(vertex, fragment);\n\n        if (typeof options === 'number')\n        {\n            options = { threshold: options };\n        }\n\n        const opt:AdvancedBloomFilterOptions = Object.assign(AdvancedBloomFilter.defaults, options);\n\n        this.bloomScale = opt.bloomScale;\n        this.brightness = opt.brightness;\n\n        const { kernels, blur, quality, pixelSize, resolution } = opt;\n\n        this._extractFilter = new ExtractBrightnessFilter(opt.threshold);\n        this._extractFilter.resolution = resolution;\n        this._blurFilter = kernels\n            ? new KawaseBlurFilter(kernels)\n            : new KawaseBlurFilter(blur, quality);\n        this.pixelSize = pixelSize;\n        this.resolution = resolution;\n    }\n\n    /**\n     * Override existing apply method in PIXI.Filter\n     *\n     * @private\n     */\n    apply(\n        filterManager: FilterSystem,\n        input: RenderTexture,\n        output: RenderTexture,\n        clear: CLEAR_MODES,\n        currentState?: FilterState): void\n    {\n        const brightTarget = filterManager.getFilterTexture();\n\n        this._extractFilter.apply(filterManager, input, brightTarget, 1, currentState);\n\n        const bloomTarget = filterManager.getFilterTexture();\n\n        this._blurFilter.apply(filterManager, brightTarget, bloomTarget, 1);\n\n        this.uniforms.bloomScale = this.bloomScale;\n        this.uniforms.brightness = this.brightness;\n        this.uniforms.bloomTexture = bloomTarget;\n\n        filterManager.applyFilter(this, input, output, clear);\n\n        filterManager.returnFilterTexture(bloomTarget);\n        filterManager.returnFilterTexture(brightTarget);\n    }\n\n    /**\n     * The resolution of the filter.\n     * @ignore\n     */\n    get resolution(): number\n    {\n        return this._resolution;\n    }\n    set resolution(value: number)\n    {\n        this._resolution = value;\n\n        if (this._extractFilter)\n        {\n            this._extractFilter.resolution = value;\n        }\n        if (this._blurFilter)\n        {\n            this._blurFilter.resolution = value;\n        }\n    }\n\n    /**\n     * Defines how bright a color needs to be to affect bloom.\n     *\n     * @default 0.5\n     */\n    get threshold(): number\n    {\n        return this._extractFilter.threshold;\n    }\n    set threshold(value: number)\n    {\n        this._extractFilter.threshold = value;\n    }\n\n    /**\n     * Sets the kernels of the Blur Filter\n     */\n    get kernels(): number[]\n    {\n        return this._blurFilter.kernels;\n    }\n    set kernels(value: number[])\n    {\n        this._blurFilter.kernels = value;\n    }\n\n    /**\n     * Sets the strength of the Blur properties simultaneously\n     *\n     * @default 2\n     */\n    get blur(): number\n    {\n        return this._blurFilter.blur;\n    }\n    set blur(value: number)\n    {\n        this._blurFilter.blur = value;\n    }\n\n    /**\n     * Sets the quality of the Blur Filter\n     *\n     * @default 4\n     */\n    get quality(): number\n    {\n        return this._blurFilter.quality;\n    }\n    set quality(value: number)\n    {\n        this._blurFilter.quality = value;\n    }\n\n    /**\n     * Sets the pixelSize of the Kawase Blur filter\n     *\n     * @member {number|number[]|PIXI.Point}\n     * @default 1\n     */\n    get pixelSize(): PixelSizeValue\n    {\n        return this._blurFilter.pixelSize;\n    }\n    set pixelSize(value: PixelSizeValue)\n    {\n        this._blurFilter.pixelSize = value;\n    }\n}\n\nexport { AdvancedBloomFilter };\nexport type { AdvancedBloomFilterOptions };\n"],"names":["ExtractBrightnessFilter","Filter","threshold","vertex","fragment","value","_AdvancedBloomFilter","options","settings","opt","kernels","blur","quality","pixelSize","resolution","KawaseBlurFilter","filterManager","input","output","clear","currentState","brightTarget","bloomTarget","AdvancedBloomFilter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASA,MAAMA,UAAgCC,CACtC,CAII,YAAYC,EAAY,GACxB,CACI,MAAMC,EAAQC,CAAQ,EAEtB,KAAK,UAAYF,CACrB,CAOA,IAAI,WACJ,CACI,OAAO,KAAK,SAAS,SACzB,CACA,IAAI,UAAUG,EACd,CACI,KAAK,SAAS,UAAYA,CAC9B,CACJ;;;;;;;;;;;;;;ECHA,MAAMC,EAAN,cAAkCL,CAClC,CAqCI,YAAYM,EACZ,CACI,MAAMJ,EAAQC,CAAQ,EAzB1B,KAAO,WAAa,EAGpB,KAAO,WAAa,EAIpB,KAAU,YAAsBI,EAAS,kBAoBjC,OAAOD,GAAY,WAEnBA,EAAU,CAAE,UAAWA,CAAQ,GAGnC,MAAME,EAAiC,OAAO,OAAOH,EAAoB,SAAUC,CAAO,EAE1F,KAAK,WAAaE,EAAI,WACtB,KAAK,WAAaA,EAAI,WAEtB,KAAM,CAAE,QAAAC,EAAS,KAAAC,EAAM,QAAAC,EAAS,UAAAC,EAAW,WAAAC,CAAW,EAAIL,EAE1D,KAAK,eAAiB,IAAIT,EAAwBS,EAAI,SAAS,EAC/D,KAAK,eAAe,WAAaK,EACjC,KAAK,YAAcJ,EACb,IAAIK,EAAiBL,CAAO,EAC5B,IAAIK,EAAiBJ,EAAMC,CAAO,EACxC,KAAK,UAAYC,EACjB,KAAK,WAAaC,CACtB,CAOA,MACIE,EACAC,EACAC,EACAC,EACAC,EACJ,CACI,MAAMC,EAAeL,EAAc,iBAEnC,EAAA,KAAK,eAAe,MAAMA,EAAeC,EAAOI,EAAc,EAAGD,CAAY,EAE7E,MAAME,EAAcN,EAAc,iBAAiB,EAEnD,KAAK,YAAY,MAAMA,EAAeK,EAAcC,EAAa,CAAC,EAElE,KAAK,SAAS,WAAa,KAAK,WAChC,KAAK,SAAS,WAAa,KAAK,WAChC,KAAK,SAAS,aAAeA,EAE7BN,EAAc,YAAY,KAAMC,EAAOC,EAAQC,CAAK,EAEpDH,EAAc,oBAAoBM,CAAW,EAC7CN,EAAc,oBAAoBK,CAAY,CAClD,CAMA,IAAI,YACJ,CACI,OAAO,KAAK,WAChB,CACA,IAAI,WAAWhB,EACf,CACI,KAAK,YAAcA,EAEf,KAAK,iBAEL,KAAK,eAAe,WAAaA,GAEjC,KAAK,cAEL,KAAK,YAAY,WAAaA,EAEtC,CAOA,IAAI,WACJ,CACI,OAAO,KAAK,eAAe,SAC/B,CACA,IAAI,UAAUA,EACd,CACI,KAAK,eAAe,UAAYA,CACpC,CAKA,IAAI,SACJ,CACI,OAAO,KAAK,YAAY,OAC5B,CACA,IAAI,QAAQA,EACZ,CACI,KAAK,YAAY,QAAUA,CAC/B,CAOA,IAAI,MACJ,CACI,OAAO,KAAK,YAAY,IAC5B,CACA,IAAI,KAAKA,EACT,CACI,KAAK,YAAY,KAAOA,CAC5B,CAOA,IAAI,SACJ,CACI,OAAO,KAAK,YAAY,OAC5B,CACA,IAAI,QAAQA,EACZ,CACI,KAAK,YAAY,QAAUA,CAC/B,CAQA,IAAI,WACJ,CACI,OAAO,KAAK,YAAY,SAC5B,CACA,IAAI,UAAUA,EACd,CACI,KAAK,YAAY,UAAYA,CACjC,CACJ,EAvLMkB,IAAAA,EAANjB,EAAMiB,EAGqB,SAAuC,CAC1D,UAAW,GACX,WAAY,EACZ,WAAY,EACZ,QAAS,KACT,KAAM,EACN,QAAS,EACT,UAAW,EACX,WAAYf,EAAS,iBACzB"}