{"version":3,"file":"oldFilmFilter.cjs","sources":["../../../src/filters/oldFilmFilter.ts"],"sourcesContent":["import { OldFilmFilter } from 'pixi-filters';\nimport { type OldFilmFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates an OldFilm filter that applies a vintage film effect\n *\n * The OldFilmFilter adds noise, scratches, sepia tone, and vignetting effects\n * to simulate the look of old film footage.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the OldFilm filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createOldFilmFilter(config: OldFilmFilterConfig): 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.noise !== undefined) options.noise = config.noise;\n    if (config.noiseSize !== undefined) options.noiseSize = config.noiseSize;\n    if (config.scratch !== undefined) options.scratch = config.scratch;\n    if (config.scratchDensity !== undefined) options.scratchDensity = config.scratchDensity;\n    if (config.scratchWidth !== undefined) options.scratchWidth = config.scratchWidth;\n    if (config.seed !== undefined) options.seed = config.seed;\n    if (config.sepia !== undefined) options.sepia = config.sepia;\n    if (config.vignetting !== undefined) options.vignetting = config.vignetting;\n    if (config.vignettingAlpha !== undefined) options.vignettingAlpha = config.vignettingAlpha;\n    if (config.vignettingBlur !== undefined) options.vignettingBlur = config.vignettingBlur;\n\n    // Create a unique key for this filter configuration based on key parameters\n    // Noise size and vignetting blur are the most significant for shader compilation\n    const noiseSizeStr = (options.noiseSize || 1).toString();\n    const vignettingBlurStr = (options.vignettingBlur || 1).toString();\n    const shaderKey = `old-film-filter-${noiseSizeStr}-${vignettingBlurStr}`;\n\n    // Create the filter with options\n    const filter = new OldFilmFilter(options);\n\n    // Register filter with shader manager\n    try {\n        shaderManager.registerFilter(filter, shaderKey);\n    } catch (error) {\n        console.warn('Error registering old film 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 'noise':\n                    // Map 0-10 to 0-1 for noise\n                    filter.noise = normalizedIntensity / 10;\n                    break;\n                case 'scratch':\n                    // Map 0-10 to 0-1 for scratch\n                    filter.scratch = normalizedIntensity / 10;\n                    break;\n                case 'sepia':\n                    // Map 0-10 to 0-1 for sepia\n                    filter.sepia = normalizedIntensity / 10;\n                    break;\n                case 'vignetting':\n                    // Map 0-10 to 0-1 for vignetting\n                    filter.vignetting = normalizedIntensity / 10;\n                    break;\n                case 'scratchDensity':\n                    // Map 0-10 to 0-1 for scratchDensity\n                    filter.scratchDensity = normalizedIntensity / 10;\n                    break;\n                default:\n                    // Default to a comprehensive effect adjustment\n                    // Adjust multiple properties for a balanced increase in the vintage effect\n                    filter.noise = Math.min(1, 0.2 + (normalizedIntensity / 20)); // 0.2-0.7 range\n                    filter.scratch = Math.min(1, 0.3 + (normalizedIntensity / 15)); // 0.3-0.97 range\n                    filter.sepia = Math.min(1, 0.2 + (normalizedIntensity / 20)); // 0.2-0.7 range\n                    filter.vignetting = Math.min(1, 0.3 + (normalizedIntensity / 30)); // 0.3-0.63 range\n            }\n        } else {\n            // Default behavior - adjust multiple properties for a balanced effect\n            filter.noise = Math.min(1, 0.2 + (normalizedIntensity / 20)); // 0.2-0.7 range\n            filter.scratch = Math.min(1, 0.3 + (normalizedIntensity / 15)); // 0.3-0.97 range\n            filter.sepia = Math.min(1, 0.2 + (normalizedIntensity / 20)); // 0.2-0.7 range\n            filter.vignetting = Math.min(1, 0.3 + (normalizedIntensity / 30)); // 0.3-0.63 range\n        }\n\n        // Randomize seed slightly for dynamic scratches if above minimum intensity\n        if (normalizedIntensity > 3) {\n            filter.seed = Math.random() * 1000;\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 properties\n        filter.noise = config.noise !== undefined ? config.noise : 0.3;\n        filter.noiseSize = config.noiseSize !== undefined ? config.noiseSize : 1;\n\n        // Scratch properties\n        filter.scratch = config.scratch !== undefined ? config.scratch : 0.5;\n        filter.scratchDensity = config.scratchDensity !== undefined ? config.scratchDensity : 0.3;\n        filter.scratchWidth = config.scratchWidth !== undefined ? config.scratchWidth : 1;\n\n        // Seed property\n        filter.seed = config.seed !== undefined ? config.seed : 0;\n\n        // Sepia property\n        filter.sepia = config.sepia !== undefined ? config.sepia : 0.3;\n\n        // Vignetting properties\n        filter.vignetting = config.vignetting !== undefined ? config.vignetting : 0.3;\n        filter.vignettingAlpha = config.vignettingAlpha !== undefined ? config.vignettingAlpha : 1;\n        filter.vignettingBlur = config.vignettingBlur !== undefined ? config.vignettingBlur : 1;\n\n        // If intensity was provided in config, use updateIntensity to reset properly\n        // This will adjust multiple 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 old film filter shader:', error);\n        }\n        filter.destroy();\n    };\n\n    return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","OldFilmFilter"],"mappings":"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"}