kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
81 lines (77 loc) • 2.44 kB
JavaScript
;
var pixiFilters = require('pixi-filters');
var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs');
const shaderManager = ShaderResourceManager.ShaderResourceManager.getInstance();
function createAdvancedBloomFilter(config) {
const options = {
bloomScale: config.bloomScale ?? 1,
blur: config.blur ?? 2,
brightness: config.brightness ?? 1,
quality: config.quality ?? 4,
threshold: config.threshold ?? 0.5
};
if (config.pixelSize !== void 0) {
options.pixelSize = config.pixelSize;
}
const filter = new pixiFilters.AdvancedBloomFilter(options);
const shaderKey = `advbloom-${config.quality || 4}-${config.threshold || 0.5}`;
try {
shaderManager.getShaderProgram(shaderKey, filter);
} catch (error) {
console.warn("Failed to register advancedBloom filter with shader manager:", error);
}
const updateIntensity = (intensity) => {
const normalizedIntensity = Math.max(0, Math.min(10, intensity));
if (config.primaryProperty) {
switch (config.primaryProperty) {
case "bloomScale":
filter.bloomScale = normalizedIntensity / 5;
break;
case "brightness":
filter.brightness = normalizedIntensity / 5;
break;
case "blur":
filter.blur = Math.max(1, normalizedIntensity / 2);
break;
case "threshold":
filter.threshold = normalizedIntensity / 10;
break;
default:
filter.bloomScale = normalizedIntensity / 5;
}
} else {
filter.bloomScale = normalizedIntensity / 5;
filter.brightness = Math.min(1.5, 0.5 + normalizedIntensity / 20);
}
};
updateIntensity(config.intensity);
const reset = () => {
filter.threshold = 0.5;
filter.bloomScale = 0.1;
filter.brightness = 1;
filter.blur = 2;
filter.quality = 4;
if ("pixelSize" in filter && filter.pixelSize) {
filter.pixelSize = { x: 1, y: 1 };
}
};
const dispose = () => {
try {
shaderManager.releaseShader(shaderKey);
} catch (error) {
console.warn("Failed to release advancedBloom filter shader:", error);
}
if (filter.destroy) {
filter.destroy();
}
};
const result = {
filter,
updateIntensity,
reset,
dispose
};
return result;
}
exports.createAdvancedBloomFilter = createAdvancedBloomFilter;
//# sourceMappingURL=advancedBloomFilter.cjs.map