kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
78 lines (75 loc) • 2.65 kB
JavaScript
import { BloomFilter } from 'pixi-filters';
import { ShaderResourceManager } from '../managers/ShaderResourceManager.js';
function createBloomFilter(config) {
const shaderManager = ShaderResourceManager.getInstance();
const options = {};
if (config.strength !== void 0) {
options.strength = config.strength;
}
if (config.strengthX !== void 0) {
options.strengthX = config.strengthX;
}
if (config.strengthY !== void 0) {
options.strengthY = config.strengthY;
}
const strengthXKey = config.strengthX !== void 0 ? config.strengthX.toString() : "default";
const strengthYKey = config.strengthY !== void 0 ? config.strengthY.toString() : "default";
const shaderKey = `bloom-filter-${config.strength || 2}-${strengthXKey}-${strengthYKey}`;
const filter = new BloomFilter(options);
try {
shaderManager.registerFilter(filter, shaderKey);
} catch (error) {
console.warn("Error registering bloom filter with shader manager:", error);
}
const updateIntensity = (intensity) => {
const normalizedIntensity = Math.max(0, Math.min(10, intensity));
if (config.primaryProperty) {
switch (config.primaryProperty) {
case "strength":
filter.strength = { x: normalizedIntensity * 2, y: normalizedIntensity * 2 };
break;
case "strengthX":
filter.strengthX = normalizedIntensity * 2;
break;
case "strengthY":
filter.strengthY = normalizedIntensity * 2;
break;
default:
filter.strength = normalizedIntensity * 2;
}
} else {
filter.strength = normalizedIntensity * 2;
}
};
updateIntensity(config.intensity);
const reset = () => {
if (config.strength !== void 0) {
filter.strength = config.strength;
} else if (config.strengthX !== void 0 && config.strengthY !== void 0) {
filter.strengthX = config.strengthX;
filter.strengthY = config.strengthY;
} else if (config.strengthX !== void 0) {
filter.strengthX = config.strengthX;
filter.strengthY = 2;
} else if (config.strengthY !== void 0) {
filter.strengthX = 2;
filter.strengthY = config.strengthY;
} else {
filter.strength = 2;
}
if (config.intensity !== void 0) {
updateIntensity(config.intensity);
}
};
const dispose = () => {
try {
shaderManager.releaseFilter(filter, shaderKey);
} catch (error) {
console.warn("Error releasing bloom filter shader:", error);
}
filter.destroy();
};
return { filter, updateIntensity, reset, dispose };
}
export { createBloomFilter };
//# sourceMappingURL=bloomFilter.js.map