{"version":3,"file":"pixelateFilter.cjs","sources":["../../../src/filters/pixelateFilter.ts"],"sourcesContent":["import { PixelateFilter } from 'pixi-filters';\nimport { type PixelateFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a Pixelate filter that applies a pixelate effect making display objects appear 'blocky'\n *\n * The PixelateFilter reduces the image resolution, making it appear pixelated or \"8-bit\" style.\n * The size parameter controls the size of the pixels, with larger values creating a more pixelated effect.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the Pixelate filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createPixelateFilter(config: PixelateFilterConfig): FilterResult {\n    // Get shader manager instance\n    const shaderManager = ShaderResourceManager.getInstance();\n\n    // Create options object for the filter\n    let size: number | [number, number] = config.size || 10;\n\n    // If sizeX and sizeY are specified, use them instead\n    if (config.sizeX !== undefined || config.sizeY !== undefined) {\n        const x = config.sizeX ?? 10;\n        const y = config.sizeY ?? 10;\n        size = [x, y];\n    }\n\n    // Create a unique key for this filter configuration\n    // Pixelate filter shader compilation doesn't change based on size parameters,\n    // so we can use a static key\n    const shaderKey = 'pixelate-filter';\n\n    // Create the filter with the size option\n    const filter = new PixelateFilter(size);\n\n    // Register filter with shader manager\n    try {\n        shaderManager.registerFilter(filter, shaderKey);\n    } catch (error) {\n        console.warn('Error registering pixelate 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        // Map intensity (0-10) to pixel size (1-30)\n        // At intensity 0, we want minimal pixelation (pixel size of 1)\n        // At intensity 10, we want maximum pixelation (pixel size of 30)\n        const pixelSize = 1 + (normalizedIntensity * 2.9); // Maps 0-10 to 1-30\n\n        // Determine which property to adjust based on config\n        if (config.primaryProperty === 'sizeX') {\n            // Only adjust X dimension, keep Y at its configured value\n            filter.sizeX = pixelSize;\n        }\n        else if (config.primaryProperty === 'sizeY') {\n            // Only adjust Y dimension, keep X at its configured value\n            filter.sizeY = pixelSize;\n        }\n        else {\n            // Default: adjust both dimensions equally\n            filter.size = pixelSize;\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        // If the original filter was configured with separate X and Y values\n        if (config.sizeX !== undefined || config.sizeY !== undefined) {\n            // Reset to the configured values or default of 10\n            const x = config.sizeX !== undefined ? config.sizeX : 10;\n            const y = config.sizeY !== undefined ? config.sizeY : 10;\n\n            // Apply the values to the filter\n            filter.sizeX = x;\n            filter.sizeY = y;\n        }\n        // If size was provided as a single value\n        else if (config.size !== undefined) {\n            filter.size = config.size;\n        }\n        // No size configuration was provided\n        else {\n            // Reset to minimal pixelation (pixel size of 1)\n            filter.size = 1;\n        }\n\n        // If intensity was provided in config, use updateIntensity to reset properly\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 pixelate filter shader:', error);\n        }\n        filter.destroy();\n    };\n\n    return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","PixelateFilter"],"mappings":";;;;;AAcO,SAAS,qBAAqB,MAA4C,EAAA;AAE7E,EAAM,MAAA,aAAA,GAAgBA,4CAAsB,WAAY,EAAA;AAGxD,EAAI,IAAA,IAAA,GAAkC,OAAO,IAAQ,IAAA,EAAA;AAGrD,EAAA,IAAI,MAAO,CAAA,KAAA,KAAU,MAAa,IAAA,MAAA,CAAO,UAAU,MAAW,EAAA;AAC1D,IAAM,MAAA,CAAA,GAAI,OAAO,KAAS,IAAA,EAAA;AAC1B,IAAM,MAAA,CAAA,GAAI,OAAO,KAAS,IAAA,EAAA;AAC1B,IAAO,IAAA,GAAA,CAAC,GAAG,CAAC,CAAA;AAAA;AAMhB,EAAA,MAAM,SAAY,GAAA,iBAAA;AAGlB,EAAM,MAAA,MAAA,GAAS,IAAIC,0BAAA,CAAe,IAAI,CAAA;AAGtC,EAAI,IAAA;AACA,IAAc,aAAA,CAAA,cAAA,CAAe,QAAQ,SAAS,CAAA;AAAA,WACzC,KAAO,EAAA;AACZ,IAAQ,OAAA,CAAA,IAAA,CAAK,0DAA0D,KAAK,CAAA;AAAA;AAQhF,EAAM,MAAA,eAAA,GAAkB,CAAC,SAA4B,KAAA;AAEjD,IAAM,MAAA,mBAAA,GAAsB,KAAK,GAAI,CAAA,CAAA,EAAG,KAAK,GAAI,CAAA,EAAA,EAAI,SAAS,CAAC,CAAA;AAK/D,IAAM,MAAA,SAAA,GAAY,IAAK,mBAAsB,GAAA,GAAA;AAG7C,IAAI,IAAA,MAAA,CAAO,oBAAoB,OAAS,EAAA;AAEpC,MAAA,MAAA,CAAO,KAAQ,GAAA,SAAA;AAAA,KACnB,MAAA,IACS,MAAO,CAAA,eAAA,KAAoB,OAAS,EAAA;AAEzC,MAAA,MAAA,CAAO,KAAQ,GAAA,SAAA;AAAA,KAEd,MAAA;AAED,MAAA,MAAA,CAAO,IAAO,GAAA,SAAA;AAAA;AAClB,GACJ;AAGA,EAAA,eAAA,CAAgB,OAAO,SAAS,CAAA;AAKhC,EAAA,MAAM,QAAQ,MAAY;AAEtB,IAAA,IAAI,MAAO,CAAA,KAAA,KAAU,MAAa,IAAA,MAAA,CAAO,UAAU,MAAW,EAAA;AAE1D,MAAA,MAAM,CAAI,GAAA,MAAA,CAAO,KAAU,KAAA,MAAA,GAAY,OAAO,KAAQ,GAAA,EAAA;AACtD,MAAA,MAAM,CAAI,GAAA,MAAA,CAAO,KAAU,KAAA,MAAA,GAAY,OAAO,KAAQ,GAAA,EAAA;AAGtD,MAAA,MAAA,CAAO,KAAQ,GAAA,CAAA;AACf,MAAA,MAAA,CAAO,KAAQ,GAAA,CAAA;AAAA,KACnB,MAAA,IAES,MAAO,CAAA,IAAA,KAAS,MAAW,EAAA;AAChC,MAAA,MAAA,CAAO,OAAO,MAAO,CAAA,IAAA;AAAA,KAGpB,MAAA;AAED,MAAA,MAAA,CAAO,IAAO,GAAA,CAAA;AAAA;AAIlB,IAAI,IAAA,MAAA,CAAO,cAAc,MAAW,EAAA;AAChC,MAAA,eAAA,CAAgB,OAAO,SAAS,CAAA;AAAA;AACpC,GACJ;AAKA,EAAA,MAAM,UAAU,MAAY;AACxB,IAAI,IAAA;AACA,MAAc,aAAA,CAAA,aAAA,CAAc,QAAQ,SAAS,CAAA;AAAA,aACxC,KAAO,EAAA;AACZ,MAAQ,OAAA,CAAA,IAAA,CAAK,2CAA2C,KAAK,CAAA;AAAA;AAEjE,IAAA,MAAA,CAAO,OAAQ,EAAA;AAAA,GACnB;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,eAAiB,EAAA,KAAA,EAAO,OAAQ,EAAA;AACrD;;;;"}