{"version":3,"file":"NoiseFilter.mjs","sources":["../../../../src/filters/defaults/noise/NoiseFilter.ts"],"sourcesContent":["import { GlProgram } from '../../../rendering/renderers/gl/shader/GlProgram';\nimport { GpuProgram } from '../../../rendering/renderers/gpu/shader/GpuProgram';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup';\nimport { Filter } from '../../Filter';\nimport vertex from '../defaultFilter.vert';\nimport fragment from './noise.frag';\nimport source from './noise.wgsl';\n\nimport type { FilterOptions } from '../../Filter';\n\n/**\n * Options for NoiseFilter\n * @memberof filters\n */\nexport interface NoiseFilterOptions extends FilterOptions\n{\n    /** The amount of noise to apply, this value should be in the range (0, 1]. */\n    noise?: number;\n    /** A seed value to apply to the random noise generation. `Math.random()` is a good value to use. */\n    seed?: number;\n}\n\n/**\n * A Noise effect filter.\n *\n * original filter: https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/noise.js\n * @memberof filters\n * @author Vico @vicocotea\n */\nexport class NoiseFilter extends Filter\n{\n    public static readonly defaultOptions: NoiseFilterOptions = {\n        noise: 0.5,\n    };\n\n    /**\n     * @param options - The options of the noise filter.\n     */\n    constructor(options: NoiseFilterOptions = {})\n    {\n        options = { ...NoiseFilter.defaultOptions, ...options };\n\n        const gpuProgram = GpuProgram.from({\n            vertex: {\n                source,\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: 'noise-filter'\n        });\n\n        const { noise, seed, ...rest } = options;\n\n        super({\n            ...rest,\n            gpuProgram,\n            glProgram,\n            resources: {\n                noiseUniforms: new UniformGroup({\n                    uNoise: { value: 1, type: 'f32' },\n                    uSeed: { value: 1, type: 'f32' },\n                })\n            },\n        });\n\n        this.noise = noise;\n        this.seed = seed ?? Math.random();\n    }\n\n    /**\n     * The amount of noise to apply, this value should be in the range (0, 1].\n     * @default 0.5\n     */\n    get noise(): number\n    {\n        return this.resources.noiseUniforms.uniforms.uNoise;\n    }\n\n    set noise(value: number)\n    {\n        this.resources.noiseUniforms.uniforms.uNoise = value;\n    }\n\n    /** A seed value to apply to the random noise generation. `Math.random()` is a good value to use. */\n    get seed(): number\n    {\n        return this.resources.noiseUniforms.uniforms.uSeed;\n    }\n\n    set seed(value: number)\n    {\n        this.resources.noiseUniforms.uniforms.uSeed = value;\n    }\n}\n"],"names":[],"mappings":";;;;;;;;;AA6BO,MAAM,YAAA,GAAN,MAAM,YAAA,SAAoB,MACjC,CAAA;AAAA;AAAA;AAAA;AAAA,EAQI,WAAA,CAAY,OAA8B,GAAA,EAC1C,EAAA;AACI,IAAA,OAAA,GAAU,EAAE,GAAG,YAAY,CAAA,cAAA,EAAgB,GAAG,OAAQ,EAAA,CAAA;AAEtD,IAAM,MAAA,UAAA,GAAa,WAAW,IAAK,CAAA;AAAA,MAC/B,MAAQ,EAAA;AAAA,QACJ,MAAA;AAAA,QACA,UAAY,EAAA,YAAA;AAAA,OAChB;AAAA,MACA,QAAU,EAAA;AAAA,QACN,MAAA;AAAA,QACA,UAAY,EAAA,cAAA;AAAA,OAChB;AAAA,KACH,CAAA,CAAA;AAED,IAAM,MAAA,SAAA,GAAY,UAAU,IAAK,CAAA;AAAA,MAC7B,MAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAM,EAAA,cAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,EAAE,KAAA,EAAO,IAAM,EAAA,GAAG,MAAS,GAAA,OAAA,CAAA;AAEjC,IAAM,KAAA,CAAA;AAAA,MACF,GAAG,IAAA;AAAA,MACH,UAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAW,EAAA;AAAA,QACP,aAAA,EAAe,IAAI,YAAa,CAAA;AAAA,UAC5B,MAAQ,EAAA,EAAE,KAAO,EAAA,CAAA,EAAG,MAAM,KAAM,EAAA;AAAA,UAChC,KAAO,EAAA,EAAE,KAAO,EAAA,CAAA,EAAG,MAAM,KAAM,EAAA;AAAA,SAClC,CAAA;AAAA,OACL;AAAA,KACH,CAAA,CAAA;AAED,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AACb,IAAK,IAAA,CAAA,IAAA,GAAO,IAAQ,IAAA,IAAA,CAAK,MAAO,EAAA,CAAA;AAAA,GACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,KACJ,GAAA;AACI,IAAO,OAAA,IAAA,CAAK,SAAU,CAAA,aAAA,CAAc,QAAS,CAAA,MAAA,CAAA;AAAA,GACjD;AAAA,EAEA,IAAI,MAAM,KACV,EAAA;AACI,IAAK,IAAA,CAAA,SAAA,CAAU,aAAc,CAAA,QAAA,CAAS,MAAS,GAAA,KAAA,CAAA;AAAA,GACnD;AAAA;AAAA,EAGA,IAAI,IACJ,GAAA;AACI,IAAO,OAAA,IAAA,CAAK,SAAU,CAAA,aAAA,CAAc,QAAS,CAAA,KAAA,CAAA;AAAA,GACjD;AAAA,EAEA,IAAI,KAAK,KACT,EAAA;AACI,IAAK,IAAA,CAAA,SAAA,CAAU,aAAc,CAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAA;AAAA,GAClD;AACJ,CAAA,CAAA;AAxEa,YAAA,CAEc,cAAqC,GAAA;AAAA,EACxD,KAAO,EAAA,GAAA;AACX,CAAA,CAAA;AAJG,IAAM,WAAN,GAAA;;;;"}