kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
59 lines (56 loc) • 1.89 kB
JavaScript
import { PixelateFilter } from 'pixi-filters';
import { ShaderResourceManager } from '../managers/ShaderResourceManager.js';
function createPixelateFilter(config) {
const shaderManager = ShaderResourceManager.getInstance();
let size = config.size || 10;
if (config.sizeX !== void 0 || config.sizeY !== void 0) {
const x = config.sizeX ?? 10;
const y = config.sizeY ?? 10;
size = [x, y];
}
const shaderKey = "pixelate-filter";
const filter = new PixelateFilter(size);
try {
shaderManager.registerFilter(filter, shaderKey);
} catch (error) {
console.warn("Error registering pixelate filter with shader manager:", error);
}
const updateIntensity = (intensity) => {
const normalizedIntensity = Math.max(0, Math.min(10, intensity));
const pixelSize = 1 + normalizedIntensity * 2.9;
if (config.primaryProperty === "sizeX") {
filter.sizeX = pixelSize;
} else if (config.primaryProperty === "sizeY") {
filter.sizeY = pixelSize;
} else {
filter.size = pixelSize;
}
};
updateIntensity(config.intensity);
const reset = () => {
if (config.sizeX !== void 0 || config.sizeY !== void 0) {
const x = config.sizeX !== void 0 ? config.sizeX : 10;
const y = config.sizeY !== void 0 ? config.sizeY : 10;
filter.sizeX = x;
filter.sizeY = y;
} else if (config.size !== void 0) {
filter.size = config.size;
} else {
filter.size = 1;
}
if (config.intensity !== void 0) {
updateIntensity(config.intensity);
}
};
const dispose = () => {
try {
shaderManager.releaseFilter(filter, shaderKey);
} catch (error) {
console.warn("Error releasing pixelate filter shader:", error);
}
filter.destroy();
};
return { filter, updateIntensity, reset, dispose };
}
export { createPixelateFilter };
//# sourceMappingURL=pixelateFilter.js.map