{"version":3,"file":"SimpleLightmapFilter.mjs","sources":["../../src/simple-lightmap/SimpleLightmapFilter.ts"],"sourcesContent":["import {\n    Color,\n    ColorSource,\n    deprecation,\n    Filter,\n    FilterSystem,\n    GlProgram,\n    GpuProgram,\n    RenderSurface,\n    Texture,\n} from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './simple-lightmap.frag';\nimport source from './simple-lightmap.wgsl';\n\ntype DeprecatedColor = number | number[];\n\n/** Options for the SimpleLightmapFilter constructor. */\nexport interface SimpleLightmapFilterOptions\n{\n    /** A texture where your lightmap is rendered */\n    lightMap: Texture;\n    /**\n     * The color value of the ambient color\n     * @example [1.0, 1.0, 1.0] = 0xffffff\n     * @default 0x000000\n     */\n    color?: ColorSource;\n    /**\n     * Coefficient for alpha multiplication\n     * @default 1\n     */\n    alpha?: number;\n}\n\n/**\n* SimpleLightmap, originally by Oza94\n* {@link http://www.html5gamedevs.com/topic/20027-pixijs-simple-lightmapping/}\n* {@link http://codepen.io/Oza94/pen/EPoRxj}\n*\n* You have to specify filterArea, or suffer consequences.\n* You may have to use it with `filter.dontFit = true`,\n*  until we rewrite this using same approach as for DisplacementFilter.\n*\n* ![original](../screenshots/original.png)![filter](../screenshots/simple-lightmap.png)\n* @class\n* @extends Filter\n* @see {@link https://www.npmjs.com/package/pixi-filters|pixi-filters}\n*\n* @example\n*  displayObject.filters = [new SimpleLightmapFilter(texture, 0x666666)];\n*/\nexport class SimpleLightmapFilter extends Filter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: SimpleLightmapFilterOptions = {\n        lightMap: Texture.WHITE,\n        color: 0x000000,\n        alpha: 1\n    };\n\n    public uniforms: {\n        uColor: Float32Array;\n        uAlpha: number;\n        uDimensions: Float32Array;\n    };\n\n    private _color!: Color;\n    private _lightMap!: Texture;\n\n    /**\n     * @param options - Options for the SimpleLightmapFilter constructor.\n     */\n    constructor(options: SimpleLightmapFilterOptions);\n    /**\n     * @deprecated since 6.0.0\n     *\n     * @param {PIXI.Texture} texture - a texture where your lightmap is rendered\n     * @param {Array<number>|number} [color=0x000000] - An RGBA array of the ambient color\n     * @param {number} [alpha=1] - Default alpha set independent of color (if it's a number, not array).\n     */\n    constructor(texture: Texture, color?: DeprecatedColor, alpha?: number);\n    /** @ignore */\n    constructor(...args: [SimpleLightmapFilterOptions] | [Texture, DeprecatedColor?, number?])\n    {\n        let options = args[0] ?? {};\n\n        if (options instanceof Texture)\n        {\n            // eslint-disable-next-line max-len\n            deprecation('6.0.0', 'SimpleLightmapFilter constructor params are now options object. See params: { lightMap, color, alpha }');\n\n            options = { lightMap: options };\n\n            if (args[1] !== undefined) options.color = args[1];\n            if (args[2] !== undefined) options.alpha = args[2];\n        }\n\n        options = { ...SimpleLightmapFilter.DEFAULT_OPTIONS, ...options };\n\n        if (!options.lightMap) throw Error('No light map texture source was provided to SimpleLightmapFilter');\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        const glProgram = GlProgram.from({\n            vertex,\n            fragment,\n            name: 'simple-lightmap-filter',\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                simpleLightmapUniforms: {\n                    uColor: { value: new Float32Array(3), type: 'vec3<f32>' },\n                    uAlpha: { value: options.alpha, type: 'f32' },\n                    uDimensions: { value: new Float32Array(2), type: 'vec2<f32>' },\n                },\n                uMapTexture: options.lightMap.source,\n                uMapSampler: options.lightMap.source.style,\n            },\n        });\n\n        this.uniforms = this.resources.simpleLightmapUniforms.uniforms;\n        this._color = new Color();\n        this.color = options.color ?? 0x000000;\n\n        Object.assign(this, options);\n    }\n\n    /**\n     * Override existing apply method in `Filter`\n     * @override\n     * @ignore\n     */\n    public override apply(\n        filterManager: FilterSystem,\n        input: Texture,\n        output: RenderSurface,\n        clearMode: boolean,\n    ): void\n    {\n        this.uniforms.uDimensions[0] = input.frame.width;\n        this.uniforms.uDimensions[1] = input.frame.height;\n\n        // draw the filter...\n        filterManager.applyFilter(this, input, output, clearMode);\n    }\n\n    /** A sprite where your lightmap is rendered */\n    get lightMap(): Texture { return this._lightMap; }\n    set lightMap(value: Texture)\n    {\n        this._lightMap = value;\n        this.resources.uMapTexture = value.source;\n        this.resources.uMapSampler = value.source.style;\n    }\n\n    /**\n     * The color value of the ambient color\n     * @example [1.0, 1.0, 1.0] = 0xffffff\n     * @default 0x000000\n     */\n    get color(): ColorSource { return this._color.value as ColorSource; }\n    set color(value: ColorSource)\n    {\n        this._color.setValue(value);\n        const [r, g, b] = this._color.toArray();\n\n        this.uniforms.uColor[0] = r;\n        this.uniforms.uColor[1] = g;\n        this.uniforms.uColor[2] = b;\n    }\n\n    /**\n     * Coefficient for alpha multiplication\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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"}