{"version":3,"file":"SimplexNoiseFilter.mjs","sources":["../../src/simplex-noise/SimplexNoiseFilter.ts"],"sourcesContent":["import { Filter, GlProgram, GpuProgram } from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './simplex.frag';\nimport source from './simplex.wgsl';\n\n/** Options for the SimplexNoiseFilter constructor. */\nexport interface SimplexNoiseFilterOptions\n{\n    /**\n     * Noise map strength.\n     * @default 0.5\n     */\n    strength?: number;\n    /**\n     * Noise map scale.\n     * @default 10.0\n     */\n    noiseScale?: number;\n    /**\n     * Horizontal offset for the noise map.\n     * @default 0\n     */\n    offsetX?: number;\n    /**\n     * Vertical offset for the noise map.\n     * @default 0\n     */\n    offsetY?: number;\n    /**\n     * Depth offset for the noise map.\n     * @default 0\n     */\n    offsetZ?: number;\n    /**\n     * The threshold used with the step function to create a blocky effect in the noise pattern.\n     * When this is greater than 0, the step function is used to compare the noise value to this threshold.\n     * @default -1\n     */\n    step?: number;\n}\n\n/**\n * The SimplexNoiseFilter multiplies simplex noise with the current texture data. <br>\n * ![original](../screenshots/original.png)![filter](../screenshots/simplex-noise.png)\n * @class\n * @extends Filter\n * @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n */\nexport class SimplexNoiseFilter extends Filter\n{\n    /** Default constructor options. */\n    public static readonly defaults: SimplexNoiseFilterOptions = {\n        strength: 0.5,\n        noiseScale: 10.0,\n        offsetX: 0,\n        offsetY: 0,\n        offsetZ: 0,\n        step: -1,\n    };\n\n    /**\n     * @param options - Options for the SimplexNoise constructor.\n     */\n    constructor(options?: SimplexNoiseFilterOptions)\n    {\n        options = { ...SimplexNoiseFilter.defaults, ...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: 'simplex-filter',\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                simplexUniforms: {\n                    uStrength: { value: options?.strength ?? 0, type: 'f32' },\n                    uNoiseScale: { value: options?.noiseScale ?? 0, type: 'f32' },\n                    uOffsetX: { value: options?.offsetX ?? 0, type: 'f32' },\n                    uOffsetY: { value: options?.offsetY ?? 0, type: 'f32' },\n                    uOffsetZ: { value: options?.offsetZ ?? 0, type: 'f32' },\n                    uStep: { value: options?.step ?? 0, type: 'f32' },\n                }\n            }\n        });\n    }\n\n    /**\n     * Strength of the noise (color = (noiseMap + strength) * texture)\n     * @default 0.5\n     */\n    get strength(): number { return this.resources.simplexUniforms.uniforms.uStrength; }\n    set strength(value: number) { this.resources.simplexUniforms.uniforms.uStrength = value; }\n\n    /**\n     * Noise map scale.\n     * @default 10\n     */\n    get noiseScale(): number { return this.resources.simplexUniforms.uniforms.uNoiseScale; }\n    set noiseScale(value: number) { this.resources.simplexUniforms.uniforms.uNoiseScale = value; }\n\n    /**\n     * Horizontal offset for the noise map.\n     * @default 0\n     */\n    get offsetX(): number { return this.resources.simplexUniforms.uniforms.uOffsetX; }\n    set offsetX(value: number) { this.resources.simplexUniforms.uniforms.uOffsetX = value; }\n\n    /**\n     * Vertical offset for the noise map.\n     * @default 0\n     */\n    get offsetY(): number { return this.resources.simplexUniforms.uniforms.uOffsetY; }\n    set offsetY(value: number) { this.resources.simplexUniforms.uniforms.uOffsetY = value; }\n\n    /**\n     * Depth offset for the noise map.\n     * @default 0\n     */\n    get offsetZ(): number { return this.resources.simplexUniforms.uniforms.uOffsetZ; }\n    set offsetZ(value: number) { this.resources.simplexUniforms.uniforms.uOffsetZ = value; }\n\n    /**\n     * The threshold used with the step function to create a blocky effect in the noise pattern.\n     * When this is greater than 0, the step function is used to compare the noise value to this threshold.\n     * @default -1\n     */\n    get step(): number { return this.resources.simplexUniforms.uniforms.uStep; }\n    set step(value: number) { this.resources.simplexUniforms.uniforms.uStep = value; }\n}\n"],"names":[],"mappings":"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"}