{"version":3,"file":"AlphaFilter.mjs","sources":["../../../../src/filters/defaults/alpha/AlphaFilter.ts"],"sourcesContent":["import { GlProgram } from '../../../rendering/renderers/gl/shader/GlProgram';\nimport { GpuProgram } from '../../../rendering/renderers/gpu/shader/GpuProgram';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup';\nimport { Filter } from '../../Filter';\nimport vertex from '../defaultFilter.vert';\nimport fragment from './alpha.frag';\nimport source from './alpha.wgsl';\n\nimport type { FilterOptions } from '../../Filter';\n\n/**\n * Options for AlphaFilter\n * @category filters\n * @standard\n */\nexport interface AlphaFilterOptions extends FilterOptions\n{\n    /**\n     * Amount of alpha from 0 to 1, where 0 is transparent\n     * @default 1\n     */\n    alpha: number;\n}\n\n/**\n * Simplest filter - applies alpha.\n *\n * Use this instead of Container's alpha property to avoid visual layering of individual elements.\n * AlphaFilter applies alpha evenly across the entire display object and any opaque elements it contains.\n * If elements are not opaque, they will blend with each other anyway.\n *\n * Very handy if you want to use common features of all filters:\n *\n * 1. Assign a blendMode to this filter, blend all elements inside display object with background.\n *\n * 2. To use clipping in display coordinates, assign a filterArea to the same container that has this filter.\n * @category filters\n * @standard\n * @noInheritDoc\n * @example\n * import { AlphaFilter } from 'pixi.js';\n *\n * const filter = new AlphaFilter({ alpha: 0.5 });\n * sprite.filters = filter;\n *\n * // update alpha\n * filter.alpha = 0.8;\n */\nexport class AlphaFilter extends Filter\n{\n    /**\n     * Default options for the AlphaFilter.\n     * @example\n     * ```ts\n     * AlphaFilter.defaultOptions = {\n     *     alpha: 0.5, // Default alpha value\n     * };\n     * // Use default options\n     * const filter = new AlphaFilter(); // Uses default alpha of 0.5\n     * ```\n     */\n    public static defaultOptions: AlphaFilterOptions = {\n        /**\n         * Amount of alpha transparency to apply.\n         * - 0 = fully transparent\n         * - 1 = fully opaque (default)\n         * @default 1\n         */\n        alpha: 1,\n    };\n\n    constructor(options?: AlphaFilterOptions)\n    {\n        options = { ...AlphaFilter.defaultOptions, ...options };\n\n        const gpuProgram = GpuProgram.from({\n            vertex: {\n                source,\n                entryPoint: 'mainVertex',\n            },\n            fragment: {\n                source,\n                entryPoint: 'mainFragment',\n            },\n        });\n\n        const glProgram = GlProgram.from({\n            vertex,\n            fragment,\n            name: 'alpha-filter'\n        });\n\n        const { alpha, ...rest } = options;\n\n        const alphaUniforms = new UniformGroup({\n            uAlpha: { value: alpha, type: 'f32' },\n        });\n\n        super({\n            ...rest,\n            gpuProgram,\n            glProgram,\n            resources: {\n                alphaUniforms\n            },\n        });\n    }\n\n    /**\n     * The alpha value of the filter.\n     * Controls the transparency of the filtered display object.\n     * @example\n     * ```ts\n     * // Create filter with initial alpha\n     * const filter = new AlphaFilter({ alpha: 0.5 });\n     *\n     * // Update alpha value dynamically\n     * filter.alpha = 0.8;\n     * ```\n     * @default 1\n     * @remarks\n     * - 0 = fully transparent\n     * - 1 = fully opaque\n     * - Values are clamped between 0 and 1\n     */\n    get alpha(): number { return this.resources.alphaUniforms.uniforms.uAlpha; }\n    set alpha(value: number) { this.resources.alphaUniforms.uniforms.uAlpha = value; }\n}\n"],"names":[],"mappings":";;;;;;;;;AAgDO,MAAM,YAAA,GAAN,MAAM,YAAA,SAAoB,MAAA,CACjC;AAAA,EAsBI,YAAY,OAAA,EACZ;AACI,IAAA,OAAA,GAAU,EAAE,GAAG,YAAA,CAAY,cAAA,EAAgB,GAAG,OAAA,EAAQ;AAEtD,IAAA,MAAM,UAAA,GAAa,WAAW,IAAA,CAAK;AAAA,MAC/B,MAAA,EAAQ;AAAA,QACJ,MAAA;AAAA,QACA,UAAA,EAAY;AAAA,OAChB;AAAA,MACA,QAAA,EAAU;AAAA,QACN,MAAA;AAAA,QACA,UAAA,EAAY;AAAA;AAChB,KACH,CAAA;AAED,IAAA,MAAM,SAAA,GAAY,UAAU,IAAA,CAAK;AAAA,MAC7B,MAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,KAAA,EAAO,GAAG,IAAA,EAAK,GAAI,OAAA;AAE3B,IAAA,MAAM,aAAA,GAAgB,IAAI,YAAA,CAAa;AAAA,MACnC,MAAA,EAAQ,EAAE,KAAA,EAAO,KAAA,EAAO,MAAM,KAAA;AAAM,KACvC,CAAA;AAED,IAAA,KAAA,CAAM;AAAA,MACF,GAAG,IAAA;AAAA,MACH,UAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA,EAAW;AAAA,QACP;AAAA;AACJ,KACH,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,IAAI,KAAA,GAAgB;AAAE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,QAAA,CAAS,MAAA;AAAA,EAAQ;AAAA,EAC3E,IAAI,MAAM,KAAA,EAAe;AAAE,IAAA,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,QAAA,CAAS,MAAA,GAAS,KAAA;AAAA,EAAO;AACrF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/Ea,YAAA,CAaK,cAAA,GAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO/C,KAAA,EAAO;AACX,CAAA;AArBG,IAAM,WAAA,GAAN;;;;"}