{"version":3,"file":"advancedBloomFilter.cjs","sources":["../../../src/filters/advancedBloomFilter.ts"],"sourcesContent":["import { AdvancedBloomFilter } from 'pixi-filters';\nimport { type AdvancedBloomFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n// Get the shader manager singleton\nconst shaderManager = ShaderResourceManager.getInstance();\n\n/**\n * Creates an AdvancedBloomFilter that applies a bloom effect with advanced controls\n *\n * The AdvancedBloomFilter applies a bloom effect to an object with more control options\n * than the standard BloomFilter, at the cost of performance.\n *\n * Uses shader pooling via ShaderResourceManager for improved performance.\n *\n * @param config - Configuration for the AdvancedBloom filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createAdvancedBloomFilter(config: AdvancedBloomFilterConfig): FilterResult {\n    // Create options object with defaults for required properties\n    const options: any = {\n        bloomScale: config.bloomScale ?? 1,\n        blur: config.blur ?? 2,\n        brightness: config.brightness ?? 1,\n        quality: config.quality ?? 4,\n        threshold: config.threshold ?? 0.5,\n    };\n\n    // Add optional properties if specified\n    if (config.pixelSize !== undefined) {\n        options.pixelSize = config.pixelSize;\n    }\n\n    // Create the filter with options\n    const filter = new AdvancedBloomFilter(options);\n\n    // Generate a unique key for this filter configuration\n    const shaderKey = `advbloom-${config.quality || 4}-${config.threshold || 0.5}`;\n\n    // Register filter with shader manager for reuse\n    try {\n        shaderManager.getShaderProgram(shaderKey, filter);\n    } catch (error) {\n        console.warn('Failed to register advancedBloom filter with shader manager:', error);\n    }\n\n    /**\n     * Update the filter's intensity based on the configuration's primaryProperty\n     * or the default behavior which adjusts bloomScale and brightness.\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            // Map intensity (0-10) to appropriate range for the specified property\n            switch (config.primaryProperty) {\n                case 'bloomScale':\n                    // bloomScale: Higher values = more intense brightness (0-2 is a good range)\n                    filter.bloomScale = normalizedIntensity / 5; // 0-10 -> 0-2\n                    break;\n                case 'brightness':\n                    // brightness: Higher values = more blown-out (0-2 is a good range)\n                    filter.brightness = normalizedIntensity / 5; // 0-10 -> 0-2\n                    break;\n                case 'blur':\n                    // blur: Strength of blur properties (1-10 is a good range)\n                    filter.blur = Math.max(1, normalizedIntensity / 2); // 0-10 -> 0-5 (min 1)\n                    break;\n                case 'threshold':\n                    // threshold: How bright a color needs to be affected (0-1)\n                    filter.threshold = normalizedIntensity / 10; // 0-10 -> 0-1\n                    break;\n                default:\n                    // Default behavior if primaryProperty is not recognized\n                    filter.bloomScale = normalizedIntensity / 5; // 0-10 -> 0-2\n            }\n        } else {\n            // Default behavior if no primaryProperty is specified:\n            // Adjust both bloomScale and brightness proportionally\n            filter.bloomScale = normalizedIntensity / 5; // 0-10 -> 0-2\n            filter.brightness = Math.min(1.5, 0.5 + (normalizedIntensity / 20)); // 0-10 -> 0.5-1.5\n        }\n    };\n\n    // Set initial intensity\n    updateIntensity(config.intensity);\n\n    /**\n     * Reset the filter to default state (minimal bloom effect)\n     */\n    const reset = (): void => {\n        filter.threshold = 0.5;\n        filter.bloomScale = 0.1; // Very subtle bloom\n        filter.brightness = 1;\n        filter.blur = 2;\n        filter.quality = 4;\n\n        // Reset pixel size if it was modified\n        if ('pixelSize' in filter && filter.pixelSize) {\n            filter.pixelSize = { x: 1, y: 1 };\n        }\n    };\n\n    /**\n     * Cleanup function to release shader when filter is no longer used\n     */\n    const dispose = (): void => {\n        try {\n            shaderManager.releaseShader(shaderKey);\n        } catch (error) {\n            console.warn('Failed to release advancedBloom filter shader:', error);\n        }\n\n        if (filter.destroy) {\n            filter.destroy();\n        }\n    };\n\n    // Create a properly typed FilterResult object\n    const result: FilterResult = {\n        filter,\n        updateIntensity,\n        reset,\n        dispose\n    };\n    return result;\n}"],"names":["ShaderResourceManager","AdvancedBloomFilter"],"mappings":"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"}