{"version":3,"file":"MotionBlurFilter.mjs","sources":["../../src/motion-blur/MotionBlurFilter.ts"],"sourcesContent":["/* eslint-disable max-len */\nimport { deprecation, Filter, GlProgram, GpuProgram, ObservablePoint, PointData } from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './motion-blur.frag';\nimport source from './motion-blur.wgsl';\n\n/** Options for the MotionBlurFilter constructor. */\nexport interface MotionBlurFilterOptions\n{\n    /**\n     * Sets the velocity of the motion for blur 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    velocity?: PointData | number[];\n    /**\n     * The kernelSize of the blur filter. Must be odd number >= 5\n     * @default 5\n     */\n    kernelSize?: number;\n    /**\n     * The offset of the blur filter\n     * @default 0\n     */\n    offset?: number;\n}\n\n/**\n * The MotionBlurFilter applies a Motion blur to an object.<br>\n * ![original](../screenshots/original.png)![filter](../screenshots/motion-blur.png)\n *\n * @class\n * @extends Filter\n */\nexport class MotionBlurFilter extends Filter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: MotionBlurFilterOptions = {\n        velocity: { x: 0, y: 0 },\n        kernelSize: 5,\n        offset: 0,\n    };\n\n    public uniforms: {\n        uVelocity: PointData;\n        uKernelSize: number;\n        uOffset: number;\n    };\n\n    private _kernelSize!: number;\n\n    /**\n     * @param options - Options for the MotionBlurFilter constructor.\n     */\n    constructor(options?: MotionBlurFilterOptions);\n    /**\n     * @deprecated since 8.0.0\n     *\n     * @param {PIXI.ObservablePoint|PIXI.PointData|number[]} [velocity=[0, 0]] - Sets the velocity of the motion for blur effect.\n     * @param {number} [kernelSize=5] - The kernelSize of the blur filter. Must be odd number >= 5\n     * @param {number} [offset=0] - The offset of the blur filter.\n     */\n    constructor(velocity?: number[] | PointData | ObservablePoint, kernelSize?: number, offset?: number);\n    /** @ignore */\n    constructor(...args: [MotionBlurFilterOptions?] | [(number[] | PointData | ObservablePoint)?, number?, number?])\n    {\n        let options = args[0] ?? {};\n\n        if (Array.isArray(options) || ('x' in options && 'y' in options) || options instanceof ObservablePoint)\n        {\n            // eslint-disable-next-line max-len\n            deprecation('6.0.0', 'MotionBlurFilter constructor params are now options object. See params: { velocity, kernelSize, offset }');\n\n            const x = 'x' in options ? options.x : options[0];\n            const y = 'y' in options ? options.y : options[1];\n\n            options = { velocity: { x, y } };\n\n            if (args[1] !== undefined) options.kernelSize = args[1];\n            if (args[2] !== undefined) options.offset = args[2];\n        }\n\n        options = { ...MotionBlurFilter.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: 'motion-blur-filter',\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                motionBlurUniforms: {\n                    uVelocity: { value: { x: 0, y: 0 }, type: 'vec2<f32>' },\n                    uKernelSize: { value: Math.trunc(options.kernelSize ?? 5), type: 'i32' },\n                    uOffset: { value: options.offset, type: 'f32' },\n                }\n            },\n        });\n\n        this.uniforms = this.resources.motionBlurUniforms.uniforms;\n\n        Object.assign(this, options);\n    }\n\n    /**\n     * Sets the velocity of the motion for blur 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 velocity(): PointData { return this.uniforms.uVelocity; }\n    set velocity(value: PointData | number[])\n    {\n        if (Array.isArray(value))\n        {\n            value = { x: value[0], y: value[1] };\n        }\n\n        this.uniforms.uVelocity = value;\n        this._updateDirty();\n    }\n\n    /**\n     * Sets the velocity of the motion for blur effect on the `x` axis\n     * @default 0\n     */\n    get velocityX(): number { return this.velocity.x; }\n    set velocityX(value: number)\n    {\n        this.velocity.x = value;\n        this._updateDirty();\n    }\n\n    /**\n     * Sets the velocity of the motion for blur effect on the `x` axis\n     * @default 0\n     */\n    get velocityY(): number { return this.velocity.y; }\n    set velocityY(value: number)\n    {\n        this.velocity.y = value;\n        this._updateDirty();\n    }\n\n    /**\n     * The kernelSize of the blur filter. Must be odd number >= 5\n     * @default 5\n     */\n    get kernelSize(): number { return this._kernelSize; }\n    set kernelSize(value: number)\n    {\n        this._kernelSize = value;\n        this._updateDirty();\n    }\n\n    /**\n     * The offset of the blur filter\n     * @default 0\n     */\n    get offset(): number { return this.uniforms.uOffset; }\n    set offset(value: number) { this.uniforms.uOffset = value; }\n\n    private _updateDirty()\n    {\n        // The padding will be increased as the velocity and intern the blur size is changed\n        this.padding = (Math.max(Math.abs(this.velocityX), Math.abs(this.velocityY)) >> 0) + 1;\n        this.uniforms.uKernelSize = (this.velocityX !== 0 || this.velocityY !== 0) ? this._kernelSize : 0;\n    }\n}\n"],"names":[],"mappings":"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"}