{"version":3,"file":"AdjustmentFilter.mjs","sources":["../../src/adjustment/AdjustmentFilter.ts"],"sourcesContent":["import { Filter, GlProgram, GpuProgram } from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './adjustment.frag';\nimport source from './adjustment.wgsl';\n\n/** Options for the AdjustmentFilter constructor */\nexport interface AdjustmentFilterOptions\n{\n    /**\n     * The amount of luminance\n     * @default 1\n     */\n    gamma?: number;\n    /**\n     * The amount of contrast\n     * @default 1\n     */\n    contrast?: number;\n    /**\n     * The amount of color saturation\n     * @default 1\n     */\n    saturation?: number;\n    /**\n     * The overall brightness\n     * @default 1\n     */\n    brightness?: number;\n    /**\n     * The multiplied red channel\n     * @default 1\n     */\n    red?: number;\n    /**\n     * The multiplied green channel\n     * @default 1\n     */\n    green?: number;\n    /**\n     * The multiplied blue channel\n     * @default 1\n     */\n    blue?: number;\n    /**\n     * The overall alpha channel\n     * @default 1\n     */\n    alpha?: number;\n}\n\n/**\n * The ability to adjust gamma, contrast, saturation, brightness, alpha or color-channel shift.\n * This is a faster and much simpler to use than\n * {@link http://pixijs.download/release/docs/ColorMatrixFilter.html ColorMatrixFilter}\n * because it does not use a matrix.<br>\n * ![original](../screenshots/original.png)![filter](../screenshots/adjustment.png)\n *\n * @class\n * @extends Filter\n */\nexport class AdjustmentFilter extends Filter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: AdjustmentFilterOptions = {\n        gamma: 1,\n        contrast: 1,\n        saturation: 1,\n        brightness: 1,\n        red: 1,\n        green: 1,\n        blue: 1,\n        alpha: 1,\n    };\n\n    public uniforms: {\n        uGamma: number;\n        uContrast: number;\n        uSaturation: number;\n        uBrightness: number;\n        uColor: Float32Array;\n    };\n\n    /**\n     * @param options - The options of the adjustment filter.\n     */\n    constructor(options?: AdjustmentFilterOptions)\n    {\n        options = { ...AdjustmentFilter.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: 'adjustment-filter'\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                adjustmentUniforms: {\n                    uGamma: { value: options.gamma, type: 'f32' },\n                    uContrast: { value: options.contrast, type: 'f32' },\n                    uSaturation: { value: options.saturation, type: 'f32' },\n                    uBrightness: { value: options.brightness, type: 'f32' },\n                    uColor: {\n                        value: [\n                            options.red,\n                            options.green,\n                            options.blue,\n                            options.alpha,\n                        ],\n                        type: 'vec4<f32>',\n                    },\n                }\n            },\n        });\n\n        this.uniforms = this.resources.adjustmentUniforms.uniforms;\n    }\n\n    /**\n     * Amount of luminance\n     * @default 1\n     */\n    get gamma(): number { return this.uniforms.uGamma; }\n    set gamma(value: number) { this.uniforms.uGamma = value; }\n\n    /**\n     * Amount of contrast\n     * @default 1\n     */\n    get contrast(): number { return this.uniforms.uContrast; }\n    set contrast(value: number) { this.uniforms.uContrast = value; }\n\n    /**\n     * Amount of color saturation\n     * @default 1\n     */\n    get saturation(): number { return this.uniforms.uSaturation; }\n    set saturation(value: number) { this.uniforms.uSaturation = value; }\n\n    /**\n     * The overall brightness\n     * @default 1\n     */\n    get brightness(): number { return this.uniforms.uBrightness; }\n    set brightness(value: number) { this.uniforms.uBrightness = value; }\n\n    /**\n     * The multiplied red channel\n     * @default 1\n     */\n    get red(): number { return this.uniforms.uColor[0]; }\n    set red(value: number) { this.uniforms.uColor[0] = value; }\n\n    /**\n     * The multiplied blue channel\n     * @default 1\n     */\n    get green(): number { return this.uniforms.uColor[1]; }\n    set green(value: number) { this.uniforms.uColor[1] = value; }\n\n    /**\n     * The multiplied green channel\n     * @default 1\n     */\n    get blue(): number { return this.uniforms.uColor[2]; }\n    set blue(value: number) { this.uniforms.uColor[2] = value; }\n\n    /**\n     * The overall alpha channel\n     * @default 1\n     */\n    get alpha(): number { return this.uniforms.uColor[3]; }\n    set alpha(value: number) { this.uniforms.uColor[3] = value; }\n}\n"],"names":[],"mappings":"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"}