kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
65 lines (61 loc) • 2.48 kB
JavaScript
;
var pixiFilters = require('pixi-filters');
var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs');
function createOutlineFilter(config) {
const shaderManager = ShaderResourceManager.ShaderResourceManager.getInstance();
const options = {};
if (config.thickness !== void 0) options.thickness = config.thickness;
if (config.color !== void 0) options.color = config.color;
if (config.quality !== void 0) options.quality = config.quality;
if (config.alpha !== void 0) options.alpha = config.alpha;
if (config.knockout !== void 0) options.knockout = config.knockout;
const qualityStr = (options.quality || 0.1).toString();
const knockoutStr = options.knockout ? "ko" : "noko";
const colorHex = (options.color || 0).toString(16);
const shaderKey = `outline-filter-${qualityStr}-${knockoutStr}-${colorHex}`;
const filter = new pixiFilters.OutlineFilter(options);
try {
shaderManager.registerFilter(filter, shaderKey);
} catch (error) {
console.warn("Error registering outline filter with shader manager:", error);
}
const updateIntensity = (intensity) => {
const normalizedIntensity = Math.max(0, Math.min(10, intensity));
if (config.primaryProperty) {
switch (config.primaryProperty) {
case "thickness":
filter.thickness = normalizedIntensity * 2;
break;
case "alpha":
filter.alpha = normalizedIntensity / 10;
break;
case "quality":
filter.quality = normalizedIntensity / 10;
break;
default:
filter.thickness = normalizedIntensity * 2;
}
} else {
filter.thickness = normalizedIntensity * 2;
}
};
updateIntensity(config.intensity);
const reset = () => {
filter.thickness = config.thickness !== void 0 ? config.thickness : 1;
filter.color = config.color !== void 0 ? config.color : 0;
filter.quality = config.quality !== void 0 ? config.quality : 0.1;
filter.alpha = config.alpha !== void 0 ? config.alpha : 1;
filter.knockout = config.knockout !== void 0 ? config.knockout : false;
};
const dispose = () => {
try {
shaderManager.releaseFilter(filter, shaderKey);
} catch (error) {
console.warn("Error releasing outline filter shader:", error);
}
filter.destroy();
};
return { filter, updateIntensity, reset, dispose };
}
exports.createOutlineFilter = createOutlineFilter;
//# sourceMappingURL=outlineFilter.cjs.map