UNPKG

kinetic-slider

Version:

A WebGL-powered kinetic slider component using PIXI.js

79 lines (76 loc) 2.94 kB
import { RadialBlurFilter } from 'pixi-filters'; import { ShaderResourceManager } from '../managers/ShaderResourceManager.js'; function createRadialBlurFilter(config) { const shaderManager = ShaderResourceManager.getInstance(); const options = {}; if (config.angle !== void 0) options.angle = config.angle; if (config.center !== void 0) options.center = config.center; if (config.centerX !== void 0) options.centerX = config.centerX; if (config.centerY !== void 0) options.centerY = config.centerY; if (config.kernelSize !== void 0) options.kernelSize = config.kernelSize; if (config.radius !== void 0) options.radius = config.radius; const kernelSizeStr = (options.kernelSize || 5).toString(); const shaderKey = `radial-blur-filter-${kernelSizeStr}`; const filter = new RadialBlurFilter(options); try { shaderManager.registerFilter(filter, shaderKey); } catch (error) { console.warn("Error registering radial blur filter with shader manager:", error); } const updateIntensity = (intensity) => { const normalizedIntensity = Math.max(0, Math.min(10, intensity)); if (config.primaryProperty) { switch (config.primaryProperty) { case "angle": filter.angle = normalizedIntensity * 36; break; case "radius": filter.radius = normalizedIntensity === 10 ? -1 : normalizedIntensity * 10; break; case "kernelSize": const kernelBase = 3; const kernelStep = Math.floor(normalizedIntensity); filter.kernelSize = kernelBase + kernelStep * 2; break; case "centerX": filter.centerX = (normalizedIntensity - 5) / 10; break; case "centerY": filter.centerY = (normalizedIntensity - 5) / 10; break; default: filter.angle = normalizedIntensity * 36; } } else { filter.angle = normalizedIntensity * 36; if (normalizedIntensity >= 9.5) { filter.radius = -1; } else { filter.radius = normalizedIntensity * 10; } } }; updateIntensity(config.intensity); const reset = () => { filter.angle = config.angle !== void 0 ? config.angle : 0; if (config.center !== void 0) { filter.center = config.center; } else { filter.centerX = config.centerX !== void 0 ? config.centerX : 0; filter.centerY = config.centerY !== void 0 ? config.centerY : 0; } filter.kernelSize = config.kernelSize !== void 0 ? config.kernelSize : 5; filter.radius = config.radius !== void 0 ? config.radius : -1; }; const dispose = () => { try { shaderManager.releaseFilter(filter, shaderKey); } catch (error) { console.warn("Error releasing radial blur filter shader:", error); } filter.destroy(); }; return { filter, updateIntensity, reset, dispose }; } export { createRadialBlurFilter }; //# sourceMappingURL=radialBlurFilter.js.map