kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
101 lines (97 loc) • 3.55 kB
JavaScript
;
var pixiFilters = require('pixi-filters');
var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs');
function createGlowFilter(config) {
const shaderManager = ShaderResourceManager.ShaderResourceManager.getInstance();
const options = {
// Directly specify each option from the config
distance: config.distance ?? 10,
outerStrength: config.outerStrength ?? 4,
innerStrength: config.innerStrength ?? 0,
color: config.color ?? 16777215,
quality: config.quality ?? 0.1,
knockout: config.knockout ?? false,
alpha: config.alpha ?? 1
};
const colorHex = options.color.toString(16);
const knockoutStr = options.knockout ? "ko" : "noko";
const shaderKey = `glow-filter-${colorHex}-${options.quality}-${knockoutStr}`;
console.log("Creating GlowFilter with options:", JSON.stringify(options, (key, value) => {
if (key === "color" && typeof value === "number") {
return "0x" + value.toString(16).padStart(6, "0").toUpperCase();
}
return value;
}));
const filter = new pixiFilters.GlowFilter(options);
try {
shaderManager.registerFilter(filter, shaderKey);
} catch (error) {
console.warn("Error registering glow filter with shader manager:", error);
}
const updateIntensity = (intensity) => {
const normalizedIntensity = Math.max(0, Math.min(10, intensity));
if (config.primaryProperty) {
switch (config.primaryProperty) {
case "innerStrength":
filter.innerStrength = normalizedIntensity;
break;
case "outerStrength":
filter.outerStrength = normalizedIntensity;
break;
case "distance":
filter.distance = normalizedIntensity * 3;
break;
case "quality":
filter.quality = normalizedIntensity / 10;
break;
case "alpha":
filter.alpha = normalizedIntensity / 10;
break;
default:
filter.outerStrength = normalizedIntensity;
}
} else {
filter.outerStrength = normalizedIntensity;
}
console.log("GlowFilter after intensity update:", {
intensity: normalizedIntensity,
outerStrength: filter.outerStrength,
innerStrength: filter.innerStrength,
distance: filter.distance,
color: "0x" + filter.color.toString(16).padStart(6, "0").toUpperCase(),
quality: filter.quality,
alpha: filter.alpha,
knockout: filter.knockout
});
};
updateIntensity(config.intensity);
const reset = () => {
filter.distance = config.distance ?? 10;
filter.outerStrength = config.outerStrength ?? 4;
filter.innerStrength = config.innerStrength ?? 0;
filter.color = config.color ?? 16777215;
filter.alpha = config.alpha ?? 1;
filter.knockout = config.knockout ?? false;
filter.quality = config.quality ?? 0.1;
console.log("Reset GlowFilter to:", {
distance: filter.distance,
outerStrength: filter.outerStrength,
innerStrength: filter.innerStrength,
color: "0x" + filter.color.toString(16).padStart(6, "0").toUpperCase(),
alpha: filter.alpha,
knockout: filter.knockout,
quality: filter.quality
});
};
const dispose = () => {
try {
shaderManager.releaseFilter(filter, shaderKey);
} catch (error) {
console.warn("Error releasing glow filter shader:", error);
}
filter.destroy();
};
return { filter, updateIntensity, reset, dispose };
}
exports.createGlowFilter = createGlowFilter;
//# sourceMappingURL=glowFilter.cjs.map