kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
81 lines (77 loc) • 3.01 kB
JavaScript
;
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