kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
1 lines • 6.91 kB
Source Map (JSON)
{"version":3,"file":"outlineFilter.cjs","sources":["../../../src/filters/outlineFilter.ts"],"sourcesContent":["// src/components/KineticSlider/filters/outlineFilter.ts\nimport { OutlineFilter } from 'pixi-filters';\nimport { type OutlineFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates an Outline filter that adds a colored outline around objects\n *\n * The OutlineFilter draws a customizable outline around the edges of objects,\n * with configurable thickness, color, and quality settings.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the Outline filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createOutlineFilter(config: OutlineFilterConfig): 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.thickness !== undefined) options.thickness = config.thickness;\n if (config.color !== undefined) options.color = config.color;\n if (config.quality !== undefined) options.quality = config.quality;\n if (config.alpha !== undefined) options.alpha = config.alpha;\n if (config.knockout !== undefined) options.knockout = config.knockout;\n\n // Create a unique key for this filter configuration\n // Quality is the most significant parameter for shader compilation\n const qualityStr = (options.quality || 0.1).toString();\n const knockoutStr = options.knockout ? 'ko' : 'noko';\n const colorHex = (options.color || 0x000000).toString(16);\n const shaderKey = `outline-filter-${qualityStr}-${knockoutStr}-${colorHex}`;\n\n // Create the filter with options\n const filter = new OutlineFilter(options);\n\n // Register filter with shader manager\n try {\n shaderManager.registerFilter(filter, shaderKey);\n } catch (error) {\n console.warn('Error registering outline 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 'thickness':\n // Map 0-10 to 0-20 for thickness (0 = no outline, 20 = very thick)\n filter.thickness = normalizedIntensity * 2;\n break;\n case 'alpha':\n // Map 0-10 to 0-1 for alpha\n filter.alpha = normalizedIntensity / 10;\n break;\n case 'quality':\n // Map 0-10 to 0-1 for quality\n filter.quality = normalizedIntensity / 10;\n break;\n default:\n // Default to adjusting thickness\n filter.thickness = normalizedIntensity * 2;\n }\n } else {\n // Default behavior - adjust thickness\n filter.thickness = normalizedIntensity * 2;\n }\n };\n\n // Set initial intensity\n updateIntensity(config.intensity);\n\n /**\n * Reset the filter to default state\n */\n const reset = (): void => {\n // Reset using config values if provided, otherwise use defaults\n filter.thickness = config.thickness !== undefined ? config.thickness : 1;\n filter.color = config.color !== undefined ? config.color : 0x000000;\n filter.quality = config.quality !== undefined ? config.quality : 0.1;\n filter.alpha = config.alpha !== undefined ? config.alpha : 1;\n filter.knockout = config.knockout !== undefined ? config.knockout : false;\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 outline filter shader:', error);\n }\n filter.destroy();\n };\n\n return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","OutlineFilter"],"mappings":"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"}