{"version":3,"file":"simplexNoiseFilter.cjs","sources":["../../../src/filters/simplexNoiseFilter.ts"],"sourcesContent":["import { SimplexNoiseFilter } from 'pixi-filters';\nimport { type SimplexNoiseFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a SimplexNoise filter that applies a noise pattern to the object\n *\n * The SimplexNoiseFilter multiplies simplex noise with the current texture data,\n * creating various noise effects like static, clouds, or organic textures.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the SimplexNoise filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createSimplexNoiseFilter(config: SimplexNoiseFilterConfig): FilterResult {\n    // Get shader manager instance\n    const shaderManager = ShaderResourceManager.getInstance();\n\n    // Create options object for the filter\n    const options: any = {};\n\n    // Apply configuration values if provided, otherwise use defaults\n    if (config.noiseScale !== undefined) options.noiseScale = config.noiseScale;\n    if (config.offsetX !== undefined) options.offsetX = config.offsetX;\n    if (config.offsetY !== undefined) options.offsetY = config.offsetY;\n    if (config.offsetZ !== undefined) options.offsetZ = config.offsetZ;\n    if (config.step !== undefined) options.step = config.step;\n    if (config.strength !== undefined) options.strength = config.strength;\n\n    // Create a unique key for this filter configuration\n    // The step parameter is the most significant for shader compilation\n    const stepStr = (options.step || -1).toString();\n    const shaderKey = `simplex-noise-filter-${stepStr}`;\n\n    // Create the filter with options\n    const filter = new SimplexNoiseFilter(options);\n\n    // Register filter with shader manager\n    try {\n        shaderManager.registerFilter(filter, shaderKey);\n    } catch (error) {\n        console.warn('Error registering simplex noise filter with shader manager:', error);\n    }\n\n    /**\n     * Update the filter's intensity based on the configuration\n     *\n     * @param intensity - New intensity value (0-10 scale)\n     */\n    const updateIntensity = (intensity: number): void => {\n        // Normalize intensity to a 0-10 scale\n        const normalizedIntensity = Math.max(0, Math.min(10, intensity));\n\n        // Determine which property to adjust based on config\n        if (config.primaryProperty) {\n            switch (config.primaryProperty) {\n                case 'noiseScale':\n                    // Map 0-10 to 1-20 for noise scale\n                    // Lower values = larger noise patterns, higher values = finer noise\n                    filter.noiseScale = 1 + (normalizedIntensity * 1.9); // 1-20 range\n                    break;\n                case 'strength':\n                    // Map 0-10 to 0-1 for strength\n                    filter.strength = normalizedIntensity / 10;\n                    break;\n                case 'step':\n                    // Map 0-10 to 0-1 for step threshold\n                    // Only values > 0 will use the step function\n                    filter.step = normalizedIntensity > 0 ? normalizedIntensity / 10 : -1;\n                    break;\n                case 'offset':\n                    // If offset is specified as primary, update all offsets equally\n                    const offsetValue = normalizedIntensity * 10; // 0-100 range\n                    filter.offsetX = offsetValue;\n                    filter.offsetY = offsetValue;\n                    filter.offsetZ = offsetValue;\n                    break;\n                case 'offsetX':\n                    // Map 0-10 to 0-100 for offsetX\n                    filter.offsetX = normalizedIntensity * 10;\n                    break;\n                case 'offsetY':\n                    // Map 0-10 to 0-100 for offsetY\n                    filter.offsetY = normalizedIntensity * 10;\n                    break;\n                case 'offsetZ':\n                    // Map 0-10 to 0-100 for offsetZ\n                    filter.offsetZ = normalizedIntensity * 10;\n                    break;\n                default:\n                    // Default to strength adjustment\n                    filter.strength = normalizedIntensity / 10;\n            }\n        } else {\n            // Default behavior - adjust strength if no primary property is specified\n            filter.strength = normalizedIntensity / 10;\n        }\n    };\n\n    // Set initial intensity\n    updateIntensity(config.intensity);\n\n    /**\n     * Reset the filter to initial configuration values or defaults\n     */\n    const reset = (): void => {\n        // Reset each property to config value if provided, otherwise use default\n\n        // Noise scale\n        filter.noiseScale = config.noiseScale !== undefined ? config.noiseScale : 10;\n\n        // Offset values\n        filter.offsetX = config.offsetX !== undefined ? config.offsetX : 0;\n        filter.offsetY = config.offsetY !== undefined ? config.offsetY : 0;\n        filter.offsetZ = config.offsetZ !== undefined ? config.offsetZ : 0;\n\n        // Step threshold\n        filter.step = config.step !== undefined ? config.step : -1;\n\n        // Strength\n        filter.strength = config.strength !== undefined ? config.strength : 0;\n\n        // If intensity was provided in config, use updateIntensity to reset properly\n        // This will adjust properties based on the primaryProperty setting\n        if (config.intensity !== undefined) {\n            updateIntensity(config.intensity);\n        }\n    };\n\n    /**\n     * Release any WebGL resources used by this filter\n     */\n    const dispose = (): void => {\n        try {\n            shaderManager.releaseFilter(filter, shaderKey);\n        } catch (error) {\n            console.warn('Error releasing simplex noise filter shader:', error);\n        }\n        filter.destroy();\n    };\n\n    return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","SimplexNoiseFilter"],"mappings":"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"}