{"version":3,"file":"TiltShiftAxisFilter.mjs","sources":["../../src/tilt-shift/TiltShiftAxisFilter.ts"],"sourcesContent":["import { Filter, GlProgram, GpuProgram, PointData, ViewSystem } from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './tilt-shift.frag';\nimport source from './tilt-shift.wgsl';\n\n// @author Vico @vicocotea\n// original filter https://github.com/evanw/glfx.js/blob/master/src/filters/blur/tiltshift.js\n// by Evan Wallace : http://madebyevan.com/\n\n/**\n * Options for creating filter.\n */\ninterface TiltShiftAxisFilterOptions\n{\n    /** The strength of the blur. */\n    blur?: number;\n    /** The strength of the blur gradient */\n    gradientBlur?: number;\n    /** The position to start the effect at. */\n    start?: PointData;\n    /** The position to end the effect at. */\n    end?: PointData;\n    /** The axis that the filter is calculating for. */\n    axis?: 'vertical' | 'horizontal';\n}\n\n/**\n * A TiltShiftAxisFilter.\n *\n * @class\n * @extends Filter\n * @private\n */\nexport class TiltShiftAxisFilter extends Filter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: TiltShiftAxisFilterOptions = {\n        /** The strength of the blur. */\n        blur: 100,\n        /** The strength of the blur gradient */\n        gradientBlur: 600,\n    };\n\n    public uniforms: {\n        uBlur: Float32Array;\n        uStart: PointData\n        uEnd: PointData;\n        uDelta: Float32Array;\n    };\n\n    private _tiltAxis: TiltShiftAxisFilterOptions['axis'];\n\n    constructor(options?: TiltShiftAxisFilterOptions)\n    {\n        const { width, height } = ViewSystem.defaultOptions as { width: number, height: number };\n\n        options = {\n            ...TiltShiftAxisFilter.DEFAULT_OPTIONS,\n            /** The position to start the effect at. */\n            start: { x: 0, y: height / 2 },\n            /** The position to end the effect at. */\n            end: { x: width, y: height / 2 },\n            ...options,\n        } as TiltShiftAxisFilterOptions;\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: 'tilt-shift-axis-filter',\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                tiltShiftUniforms: {\n                    uBlur: {\n                        value: new Float32Array([\n                            options.blur as number,\n                            options.gradientBlur as number,\n                        ]), type: 'vec2<f32>'\n                    },\n                    uStart: { value: options.start, type: 'vec2<f32>' },\n                    uEnd: { value: options.end, type: 'vec2<f32>' },\n                    uDelta: { value: new Float32Array([0, 0]), type: 'vec2<f32>' },\n                },\n            },\n        });\n\n        this.uniforms = this.resources.tiltShiftUniforms.uniforms;\n        this._tiltAxis = options.axis;\n    }\n\n    /**\n     * Updates the filter delta values.\n     * @ignore\n     */\n    public updateDelta(): void\n    {\n        this.uniforms.uDelta[0] = 0;\n        this.uniforms.uDelta[1] = 0;\n\n        if (this._tiltAxis === undefined) return;\n\n        const end = this.uniforms.uEnd;\n        const start = this.uniforms.uStart;\n\n        const dx = end.x - start.x;\n        const dy = end.y - start.y;\n        const d = Math.sqrt((dx * dx) + (dy * dy));\n\n        const isVert = this._tiltAxis === 'vertical';\n\n        this.uniforms.uDelta[0] = !isVert ? dx / d : -dy / d;\n        this.uniforms.uDelta[1] = !isVert ? dy / d : dx / d;\n    }\n}\n"],"names":[],"mappings":"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"}