UNPKG

kinetic-slider

Version:

A WebGL-powered kinetic slider component using PIXI.js

1 lines 5.7 kB
{"version":3,"file":"noiseFilter.cjs","sources":["../../../src/filters/noiseFilter.ts"],"sourcesContent":["import { NoiseFilter } from 'pixi.js';\nimport { type NoiseFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a Noise filter that applies random noise to an image\n *\n * The noise effect can be used to create film grain, static, or other textured effects.\n * Based on: https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/noise.js\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the Noise filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createNoiseFilter(config: NoiseFilterConfig): FilterResult {\n // Get shader manager instance\n const shaderManager = ShaderResourceManager.getInstance();\n\n // Create options object for the filter\n const options: any = {\n noise: config.noiseLevel || 0.5, // Default noise level is 0.5\n seed: config.seed || Math.random() // Default seed is a random value\n };\n\n // Create a unique key for this filter configuration\n // For noise, we use a single shader key as only the uniforms change when noise/seed values change\n const shaderKey = 'noise-filter';\n\n // Create the filter with options\n const filter = new NoiseFilter(options);\n\n // Register filter with shader manager\n try {\n shaderManager.registerFilter(filter, shaderKey);\n } catch (error) {\n console.warn('Error registering 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 // Map the 0-10 intensity scale to 0-1 for the noise property\n filter.noise = Math.max(0, Math.min(10, intensity)) / 10;\n\n\n // Generate a new seed value for the noise if requested\n if (config.generateNewSeedOnUpdate) {\n filter.seed = Math.random();\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 noise level to config value if provided, otherwise use default\n if (config.noiseLevel !== undefined) {\n filter.noise = config.noiseLevel;\n } else if (config.intensity !== undefined) {\n // If intensity is provided but not noiseLevel, don't explicitly set noise\n // as updateIntensity will handle it\n } else {\n // If neither is provided, default to 0 (no noise)\n filter.noise = 0;\n }\n\n // Handle seed resetting with proper config respect\n if (config.seed !== undefined) {\n // If a specific seed was provided in config, use that value\n filter.seed = config.seed;\n } else if (config.generateNewSeedOnUpdate === true) {\n // Only generate a new seed if explicitly requested\n filter.seed = Math.random();\n } else {\n // Otherwise keep the current seed or use a consistent default\n // This avoids changing the visual effect unexpectedly on reset\n filter.seed = filter.seed || 0;\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 noise filter shader:', error);\n }\n filter.destroy();\n };\n\n return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","NoiseFilter"],"mappings":";;;;;AAcO,SAAS,kBAAkB,MAAyC,EAAA;AAEvE,EAAM,MAAA,aAAA,GAAgBA,4CAAsB,WAAY,EAAA;AAGxD,EAAA,MAAM,OAAe,GAAA;AAAA,IACjB,KAAA,EAAO,OAAO,UAAc,IAAA,GAAA;AAAA;AAAA,IAC5B,IAAM,EAAA,MAAA,CAAO,IAAQ,IAAA,IAAA,CAAK,MAAO;AAAA;AAAA,GACrC;AAIA,EAAA,MAAM,SAAY,GAAA,cAAA;AAGlB,EAAM,MAAA,MAAA,GAAS,IAAIC,mBAAA,CAAY,OAAO,CAAA;AAGtC,EAAI,IAAA;AACA,IAAc,aAAA,CAAA,cAAA,CAAe,QAAQ,SAAS,CAAA;AAAA,WACzC,KAAO,EAAA;AACZ,IAAQ,OAAA,CAAA,IAAA,CAAK,uDAAuD,KAAK,CAAA;AAAA;AAQ7E,EAAM,MAAA,eAAA,GAAkB,CAAC,SAA4B,KAAA;AAEjD,IAAO,MAAA,CAAA,KAAA,GAAQ,KAAK,GAAI,CAAA,CAAA,EAAG,KAAK,GAAI,CAAA,EAAA,EAAI,SAAS,CAAC,CAAI,GAAA,EAAA;AAItD,IAAA,IAAI,OAAO,uBAAyB,EAAA;AAChC,MAAO,MAAA,CAAA,IAAA,GAAO,KAAK,MAAO,EAAA;AAAA;AAC9B,GACJ;AAGA,EAAA,eAAA,CAAgB,OAAO,SAAS,CAAA;AAKhC,EAAA,MAAM,QAAQ,MAAY;AAEtB,IAAI,IAAA,MAAA,CAAO,eAAe,MAAW,EAAA;AACjC,MAAA,MAAA,CAAO,QAAQ,MAAO,CAAA,UAAA;AAAA,KAC1B,MAAA,IAAW,MAAO,CAAA,SAAA,KAAc,MAAW,EAAA,CAGpC,MAAA;AAEH,MAAA,MAAA,CAAO,KAAQ,GAAA,CAAA;AAAA;AAInB,IAAI,IAAA,MAAA,CAAO,SAAS,MAAW,EAAA;AAE3B,MAAA,MAAA,CAAO,OAAO,MAAO,CAAA,IAAA;AAAA,KACzB,MAAA,IAAW,MAAO,CAAA,uBAAA,KAA4B,IAAM,EAAA;AAEhD,MAAO,MAAA,CAAA,IAAA,GAAO,KAAK,MAAO,EAAA;AAAA,KACvB,MAAA;AAGH,MAAO,MAAA,CAAA,IAAA,GAAO,OAAO,IAAQ,IAAA,CAAA;AAAA;AAIjC,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,wCAAwC,KAAK,CAAA;AAAA;AAE9D,IAAA,MAAA,CAAO,OAAQ,EAAA;AAAA,GACnB;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,eAAiB,EAAA,KAAA,EAAO,OAAQ,EAAA;AACrD;;;;"}