kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
80 lines (76 loc) • 2.36 kB
JavaScript
;
var pixiFilters = require('pixi-filters');
var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs');
function createAdjustmentFilter(config) {
const shaderManager = ShaderResourceManager.ShaderResourceManager.getInstance();
const options = {
gamma: config.gamma ?? 1,
contrast: config.contrast ?? 1,
saturation: config.saturation ?? 1,
brightness: config.brightness ?? 1,
red: config.red ?? 1,
green: config.green ?? 1,
blue: config.blue ?? 1,
alpha: config.alpha ?? 1
};
const shaderKey = `adjustment-filter-${config.primaryProperty || "default"}`;
const filter = new pixiFilters.AdjustmentFilter(options);
try {
shaderManager.registerFilter(filter, shaderKey);
} catch (error) {
console.warn("Error registering adjustment filter with shader manager:", error);
}
const updateIntensity = (intensity) => {
const normalizedIntensity = Math.max(0, Math.min(10, intensity));
if (config.primaryProperty) {
let value;
switch (config.primaryProperty) {
case "contrast":
case "saturation":
value = normalizedIntensity / 5;
break;
case "brightness":
value = normalizedIntensity / 5;
break;
case "gamma":
value = normalizedIntensity / 5;
break;
case "red":
case "green":
case "blue":
value = normalizedIntensity / 5;
break;
case "alpha":
value = normalizedIntensity / 10;
break;
default:
value = normalizedIntensity / 5;
}
filter[config.primaryProperty] = value;
} else {
filter.contrast = normalizedIntensity / 5;
}
};
updateIntensity(config.intensity);
const reset = () => {
filter.gamma = 1;
filter.contrast = 1;
filter.saturation = 1;
filter.brightness = 1;
filter.red = 1;
filter.green = 1;
filter.blue = 1;
filter.alpha = 1;
};
const dispose = () => {
try {
shaderManager.releaseFilter(filter, shaderKey);
} catch (error) {
console.warn("Error releasing adjustment filter shader:", error);
}
filter.destroy();
};
return { filter, updateIntensity, reset, dispose };
}
exports.createAdjustmentFilter = createAdjustmentFilter;
//# sourceMappingURL=adjustmentFilter.cjs.map