UNPKG

kinetic-slider

Version:

A WebGL-powered kinetic slider component using PIXI.js

81 lines (77 loc) 3.01 kB
'use strict'; var pixiFilters = require('pixi-filters'); var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs'); function createRadialBlurFilter(config) { const shaderManager = ShaderResourceManager.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 pixiFilters.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 }; } exports.createRadialBlurFilter = createRadialBlurFilter; //# sourceMappingURL=radialBlurFilter.cjs.map