kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
67 lines (63 loc) • 2.39 kB
JavaScript
;
var pixiFilters = require('pixi-filters');
var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs');
function createDotFilter(config) {
const shaderManager = ShaderResourceManager.ShaderResourceManager.getInstance();
const options = {};
if (config.angle !== void 0) options.angle = config.angle;
if (config.scale !== void 0) options.scale = config.scale;
if (config.grayscale !== void 0) options.grayscale = config.grayscale;
const grayscaleKey = config.grayscale !== void 0 ? config.grayscale.toString() : "true";
const shaderKey = `dot-filter-a${options.angle || 5}-s${options.scale || 1}-g${grayscaleKey}`;
console.log("Creating DotFilter with options:", options);
const filter = new pixiFilters.DotFilter(options);
try {
shaderManager.registerFilter(filter, shaderKey);
} catch (error) {
console.warn("Error registering dot filter with shader manager:", error);
}
if (config.grayscale !== void 0) {
filter.grayscale = config.grayscale;
console.log("DotFilter grayscale set to:", filter.grayscale);
}
const updateIntensity = (intensity) => {
const normalizedIntensity = Math.max(0, Math.min(10, intensity));
if (config.primaryProperty) {
switch (config.primaryProperty) {
case "angle":
filter.angle = 1 + normalizedIntensity;
break;
case "scale":
filter.scale = 0.5 + normalizedIntensity / 2;
break;
default:
filter.angle = 1 + normalizedIntensity;
}
} else {
filter.angle = 1 + normalizedIntensity;
}
if (config.grayscale !== void 0) {
filter.grayscale = config.grayscale;
}
};
updateIntensity(config.intensity);
const reset = () => {
filter.angle = config.angle !== void 0 ? config.angle : 5;
filter.scale = config.scale !== void 0 ? config.scale : 1;
filter.grayscale = config.grayscale !== void 0 ? config.grayscale : true;
if (config.intensity !== void 0) {
updateIntensity(config.intensity);
}
};
const dispose = () => {
try {
shaderManager.releaseFilter(filter, shaderKey);
} catch (error) {
console.warn("Error releasing dot filter shader:", error);
}
filter.destroy();
};
return { filter, updateIntensity, reset, dispose };
}
exports.createDotFilter = createDotFilter;
//# sourceMappingURL=dotFilter.cjs.map