{"version":3,"file":"RadialBlurFilter.mjs","sources":["../../src/radial-blur/RadialBlurFilter.ts"],"sourcesContent":["import { deprecation, Filter, GlProgram, GpuProgram } from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './radial-blur.frag';\nimport source from './radial-blur.wgsl';\n\nimport type { PointData } from 'pixi.js';\n\n/** Options for the RadialBlurFilter constructor. */\nexport interface RadialBlurFilterOptions\n{\n    /**\n     * Sets the angle of the motion for blur effect\n     * @default 0\n     */\n    angle?: number;\n    /**\n     * The `x` and `y` offset coordinates to change the position of the center of the circle of effect.\n     * This should be a size 2 array or an object containing `x` and `y` values, you cannot change types\n     * once defined in the constructor\n     * @default {x:0,y:0}\n     */\n    center?: PointData | number[];\n    /**\n     * The kernelSize of the blur filter. Must be odd number >= 3\n     * @default 5\n     */\n    kernelSize?: number;\n    /**\n     * The maximum size of the blur radius, less than `0` equates to infinity\n     * @default -1\n     */\n    radius?: number\n}\n\n/**\n * The RadialBlurFilter applies a Motion blur to an object.<br>\n * ![original](../screenshots/original.png)![filter](../screenshots/radial-blur.png)\n *\n * @class\n * @extends Filter\n */\nexport class RadialBlurFilter extends Filter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: RadialBlurFilterOptions = {\n        angle: 0,\n        center: { x: 0, y: 0 },\n        kernelSize: 5,\n        radius: -1,\n    };\n\n    public uniforms: {\n        uRadian: number;\n        uCenter: PointData;\n        uKernelSize: number;\n        uRadius: number;\n    };\n\n    private _angle!: number;\n    private _kernelSize!: number;\n\n    /**\n     * @param options - Options for the RadialBlurFilter constructor.\n     */\n    constructor(options?: RadialBlurFilterOptions);\n    /**\n     * @deprecated since 6.0.0\n     *\n     * @param {number} [angle=0] - Sets the angle of the motion for blur effect.\n     * @param {PIXI.Point|number[]} [center=[0,0]] - The center of the radial.\n     * @param {number} [kernelSize=5] - The kernelSize of the blur filter. Must be odd number >= 3\n     * @param {number} [radius=-1] - The maximum size of the blur radius, `-1` is infinite\n     */\n    constructor(angle?: number, center?: PointData | number[], kernelSize?: number, radius?: number);\n    /** @ignore */\n    constructor(...args: [RadialBlurFilterOptions?] | [number?, (PointData | number[])?, number?, number?])\n    {\n        let options = args[0] ?? {};\n\n        if (typeof options === 'number')\n        {\n            // eslint-disable-next-line max-len\n            deprecation('6.0.0', 'RadialBlurFilter constructor params are now options object. See params: { angle, center, kernelSize, radius }');\n\n            options = { angle: options };\n\n            if (args[1])\n            {\n                const x = 'x' in args[1] ? args[1].x : args[1][0];\n                const y = 'y' in args[1] ? args[1].y : args[1][1];\n\n                options.center = { x, y };\n            }\n            if (args[2]) options.kernelSize = args[2];\n            if (args[3]) options.radius = args[3];\n        }\n\n        options = { ...RadialBlurFilter.DEFAULT_OPTIONS, ...options };\n\n        const gpuProgram = GpuProgram.from({\n            vertex: {\n                source: wgslVertex,\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: 'radial-blur-filter',\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                radialBlurUniforms: {\n                    uRadian: { value: 0, type: 'f32' },\n                    uCenter: { value: { x: 0, y: 0 }, type: 'vec2<f32>' },\n                    uKernelSize: { value: options.kernelSize, type: 'i32' },\n                    uRadius: { value: options.radius, type: 'f32' },\n                }\n            },\n        });\n\n        this.uniforms = this.resources.radialBlurUniforms.uniforms;\n\n        Object.assign(this, options);\n    }\n\n    private _updateKernelSize()\n    {\n        this.uniforms.uKernelSize = this._angle !== 0 ? this.kernelSize : 0;\n    }\n\n    /**\n     * Sets the angle in degrees of the motion for blur effect.\n     * @default 0\n     */\n    get angle(): number { return this._angle; }\n    set angle(value: number)\n    {\n        this._angle = value;\n        this.uniforms.uRadian = value * Math.PI / 180;\n        this._updateKernelSize();\n    }\n\n    /**\n     * The `x` and `y` offset coordinates to change the position of the center of the circle of effect.\n     * This should be a size 2 array or an object containing `x` and `y` values, you cannot change types\n     * once defined in the constructor\n     * @default {x:0,y:0}\n     */\n    get center(): PointData { return this.uniforms.uCenter; }\n    set center(value: PointData | number[])\n    {\n        if (Array.isArray(value))\n        {\n            value = { x: value[0], y: value[1] };\n        }\n\n        this.uniforms.uCenter = value;\n    }\n\n    /**\n     * Sets the velocity of the motion for blur effect on the `x` axis\n     * @default 0\n     */\n    get centerX(): number { return this.center.x; }\n    set centerX(value: number) { this.center.x = value; }\n\n    /**\n     * Sets the velocity of the motion for blur effect on the `x` axis\n     * @default 0\n     */\n    get centerY(): number { return this.center.y; }\n    set centerY(value: number) { this.center.y = value; }\n\n    /**\n     * The kernelSize of the blur filter. Must be odd number >= 3\n     * @default 5\n     */\n    get kernelSize(): number { return this._kernelSize; }\n    set kernelSize(value: number)\n    {\n        this._kernelSize = value;\n        this._updateKernelSize();\n    }\n\n    /**\n     * The maximum size of the blur radius, less than `0` equates to infinity\n     * @default -1\n     */\n    get radius(): number { return this.uniforms.uRadius; }\n    set radius(value: number) { this.uniforms.uRadius = value < 0 || value === Infinity ? -1 : value; }\n}\n"],"names":[],"mappings":"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"}