{"version":3,"file":"DotFilter.mjs","sources":["../../src/dot/DotFilter.ts"],"sourcesContent":["import { deprecation, Filter, GlProgram, GpuProgram } from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './dot.frag';\nimport source from './dot.wgsl';\n\n/** Options for the DotFilter constructor. */\nexport interface DotFilterOptions\n{\n    /**\n     * The scale of the effect\n     * @default 1\n     */\n    scale?: number;\n    /**\n     * The angle of the effect\n     * @default 5\n     */\n    angle?: number;\n    /**\n     * Whether to rendering it in gray scale\n     * @default true\n     */\n    grayscale?: boolean;\n}\n\n/**\n * This filter applies a dotscreen effect making display objects appear to be made out of\n * black and white halftone dots like an old printer.<br>\n * ![original](../screenshots/original.png)![filter](../screenshots/dot.png)\n *\n * {@link https://github.com/evanw/glfx.js/blob/master/src/filters/fun/dotscreen.js Original filter}\n *\n * @class\n * @extends Filter\n */\nexport class DotFilter extends Filter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: DotFilterOptions = {\n        scale: 1,\n        angle: 5,\n        grayscale: true\n    };\n\n    /**\n     * @param options - Options for the DotFilter constructor.\n     */\n    constructor(options?: DotFilterOptions);\n    /**\n     * @deprecated since 6.0.0\n     *\n     * @param {number} [scale=1] - The scale of the effect.\n     * @param {number} [angle=5] - The radius of the effect.\n     * @param {boolean} [grayscale=true] - Render as grayscale.\n     */\n    constructor(scale?: number, angle?: number, grayscale?: boolean);\n    /** @ignore */\n    constructor(...args: [DotFilterOptions?] | [number?, number?, boolean?])\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', 'DotFilter constructor params are now options object. See params: { scale, angle, grayscale }');\n\n            options = { scale: options };\n\n            if (args[1] !== undefined) options.angle = args[1];\n            if (args[2] !== undefined) options.grayscale = args[2];\n        }\n\n        options = { ...DotFilter.DEFAULT_OPTIONS, ...options };\n\n        const dotUniforms = {\n            uScale: { value: options.scale, type: 'f32' },\n            uAngle: { value: options.angle, type: 'f32' },\n            uGrayScale: { value: options.grayscale ? 1 : 0, type: 'f32' },\n        };\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: 'dot-filter',\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                dotUniforms,\n            },\n        });\n    }\n\n    /**\n     * The scale of the effect.\n     * @default 1\n     */\n    get scale(): number { return this.resources.dotUniforms.uniforms.uScale; }\n    set scale(value: number) { this.resources.dotUniforms.uniforms.uScale = value; }\n\n    /**\n    * The radius of the effect.\n    * @default 5\n    */\n    get angle(): number { return this.resources.dotUniforms.uniforms.uAngle; }\n    set angle(value: number) { this.resources.dotUniforms.uniforms.uAngle = value; }\n\n    /**\n    * Whether to rendering it in gray scale.\n    * @default true\n    */\n    get grayscale(): boolean { return this.resources.dotUniforms.uniforms.uGrayScale === 1; }\n    set grayscale(value: boolean) { this.resources.dotUniforms.uniforms.uGrayScale = value ? 1 : 0; }\n}\n"],"names":[],"mappings":"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"}