kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"file":"crtFilter.cjs","sources":["../../../src/filters/crtFilter.ts"],"sourcesContent":["import { CRTFilter } from 'pixi-filters';\nimport { type CRTFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a CRT filter that applies a CRT (Cathode Ray Tube) effect to an object\n *\n * The CRTFilter simulates an old CRT display with features like scan lines,\n * screen curvature, vignetting, and noise.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the CRT filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createCRTFilter(config: CRTFilterConfig): 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.curvature !== undefined) options.curvature = config.curvature;\n if (config.lineContrast !== undefined) options.lineContrast = config.lineContrast;\n if (config.lineWidth !== undefined) options.lineWidth = config.lineWidth;\n if (config.noise !== undefined) options.noise = config.noise;\n if (config.noiseSize !== undefined) options.noiseSize = config.noiseSize;\n if (config.seed !== undefined) options.seed = config.seed;\n if (config.time !== undefined) options.time = config.time;\n if (config.verticalLine !== undefined) options.verticalLine = config.verticalLine;\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\n const primaryProp = config.primaryProperty || 'noise';\n const shaderKey = `crt-filter-${primaryProp}-${config.verticalLine || false}`;\n\n // Create the filter with options\n const filter = new CRTFilter(options);\n\n // Register filter with shader manager\n try {\n shaderManager.registerFilter(filter, shaderKey);\n } catch (error) {\n console.warn('Error registering CRT 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 'curvature':\n // Map 0-10 to 0-10 for curvature (0 is flat, higher values increase curve)\n filter.curvature = normalizedIntensity;\n break;\n case 'lineContrast':\n // Map 0-10 to 0-1 for line contrast\n filter.lineContrast = normalizedIntensity / 10;\n break;\n case 'lineWidth':\n // Map 0-10 to 0.5-5 for line width\n filter.lineWidth = 0.5 + (normalizedIntensity / 2);\n break;\n case 'vignetting':\n // Map 0-10 to 0-1 for vignetting (0.5 is a good midpoint)\n filter.vignetting = normalizedIntensity / 10;\n break;\n case 'vignettingAlpha':\n // Map 0-10 to 0-1 for vignetting alpha\n filter.vignettingAlpha = normalizedIntensity / 10;\n break;\n default:\n // Default to adjusting noise if primary property is not recognized\n filter.noise = normalizedIntensity / 10;\n }\n } else {\n // Default behavior - adjust noise level\n filter.noise = normalizedIntensity / 10;\n\n // Optionally adjust other parameters based on intensity for a more comprehensive effect\n if (normalizedIntensity > 5) {\n // Increase curvature, line width, and vignetting as intensity increases beyond midpoint\n filter.curvature = (normalizedIntensity - 5) / 2; // 0-2.5 range\n filter.vignetting = 0.3 + ((normalizedIntensity - 5) / 20); // 0.3-0.55 range\n }\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 // Display properties\n filter.curvature = config.curvature !== undefined ? config.curvature : 1;\n filter.verticalLine = config.verticalLine !== undefined ? config.verticalLine : false;\n\n // Line properties\n filter.lineContrast = config.lineContrast !== undefined ? config.lineContrast : 0.25;\n filter.lineWidth = config.lineWidth !== undefined ? config.lineWidth : 1;\n\n // Noise properties\n filter.noise = config.noise !== undefined ? config.noise : 0.3;\n filter.noiseSize = config.noiseSize !== undefined ? config.noiseSize : 0;\n filter.seed = config.seed !== undefined ? config.seed : 0;\n\n // Time property\n filter.time = config.time !== undefined ? config.time : 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 : 0.3;\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 CRT filter shader:', error);\n }\n filter.destroy();\n };\n\n return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","CRTFilter"],"mappings":"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"}