{"version":3,"file":"HslAdjustmentFilter.mjs","sources":["../../src/hsl-adjustment/HslAdjustmentFilter.ts"],"sourcesContent":["import { Filter, GlProgram, GpuProgram } from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './hsladjustment.frag';\nimport source from './hsladjustment.wgsl';\n\n/**\n * Options for the HslAdjustmentFilter constructor.\n */\nexport interface HslAdjustmentFilterOptions\n{\n    /**\n     * The amount of hue in degrees (-180 to 180)\n     * @default 0\n     */\n    hue: number;\n    /**\n     * The amount of color saturation (-1 to 1)\n     * @default 0\n     */\n    saturation: number;\n    /**\n     * The amount of lightness (-1 to 1)\n     * @default 0\n     */\n    lightness: number;\n    /**\n     * Whether to colorize the image\n     * @default false\n     */\n    colorize: boolean;\n    /**\n     * The amount of alpha (0 to 1)\n     * @default 1\n     */\n    alpha: number;\n}\n\n/**\n * ![original](../screenshots/original.png)![filter](../screenshots/hsl-adjustment.png)\n *\n * This WebGPU filter has been ported from the WebGL renderer that was originally created by Viktor Persson (@vikpe)\n *\n * @class\n * @extends Filter\n */\nexport class HslAdjustmentFilter extends Filter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: HslAdjustmentFilterOptions = {\n        hue: 0,\n        saturation: 0,\n        lightness: 0,\n        colorize: false,\n        alpha: 1,\n    };\n\n    public uniforms: {\n        uHsl: Float32Array;\n        uColorize: number;\n        uAlpha: number;\n    };\n\n    private _hue!: number;\n\n    /**\n     * @param options - Options for the HslAdjustmentFilter constructor.\n     */\n    constructor(options?: HslAdjustmentFilterOptions)\n    {\n        options = { ...HslAdjustmentFilter.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: 'hsl-adjustment-filter',\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                hslUniforms: {\n                    uHsl: { value: new Float32Array(3), type: 'vec3<f32>' },\n                    uColorize: { value: options.colorize ? 1 : 0, type: 'f32' },\n                    uAlpha: { value: options.alpha, type: 'f32' },\n                },\n            },\n        });\n\n        this.uniforms = this.resources.hslUniforms.uniforms;\n        Object.assign(this, options);\n    }\n\n    /**\n     * The amount of hue in degrees (-180 to 180)\n     * @default 0\n     */\n    get hue(): number { return this._hue; }\n    set hue(value: number)\n    {\n        this._hue = value;\n        this.uniforms.uHsl[0] = value * (Math.PI / 180);\n    }\n\n    /**\n     * The amount of lightness (-1 to 1)\n     * @default 0\n     */\n    get saturation(): number { return this.uniforms.uHsl[1]; }\n    set saturation(value: number) { this.uniforms.uHsl[1] = value; }\n\n    /**\n     * The amount of lightness (-1 to 1)\n     * @default 0\n     */\n    get lightness(): number { return this.uniforms.uHsl[2]; }\n    set lightness(value: number) { this.uniforms.uHsl[2] = value; }\n\n    /**\n     * Whether to colorize the image\n     * @default false\n     */\n    get colorize(): boolean { return this.uniforms.uColorize === 1; }\n    set colorize(value: boolean) { this.uniforms.uColorize = value ? 1 : 0; }\n\n    /**\n     * The amount of alpha (0 to 1)\n     * @default 1\n     */\n    get alpha(): number { return this.uniforms.uAlpha; }\n    set alpha(value: number) { this.uniforms.uAlpha = value; }\n}\n"],"names":[],"mappings":"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"}