kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
92 lines (88 loc) • 4.11 kB
JavaScript
;
var pixiFilters = require('pixi-filters');
var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs');
function createOldFilmFilter(config) {
const shaderManager = ShaderResourceManager.ShaderResourceManager.getInstance();
const options = {};
if (config.noise !== void 0) options.noise = config.noise;
if (config.noiseSize !== void 0) options.noiseSize = config.noiseSize;
if (config.scratch !== void 0) options.scratch = config.scratch;
if (config.scratchDensity !== void 0) options.scratchDensity = config.scratchDensity;
if (config.scratchWidth !== void 0) options.scratchWidth = config.scratchWidth;
if (config.seed !== void 0) options.seed = config.seed;
if (config.sepia !== void 0) options.sepia = config.sepia;
if (config.vignetting !== void 0) options.vignetting = config.vignetting;
if (config.vignettingAlpha !== void 0) options.vignettingAlpha = config.vignettingAlpha;
if (config.vignettingBlur !== void 0) options.vignettingBlur = config.vignettingBlur;
const noiseSizeStr = (options.noiseSize || 1).toString();
const vignettingBlurStr = (options.vignettingBlur || 1).toString();
const shaderKey = `old-film-filter-${noiseSizeStr}-${vignettingBlurStr}`;
const filter = new pixiFilters.OldFilmFilter(options);
try {
shaderManager.registerFilter(filter, shaderKey);
} catch (error) {
console.warn("Error registering old film filter with shader manager:", error);
}
const updateIntensity = (intensity) => {
const normalizedIntensity = Math.max(0, Math.min(10, intensity));
if (config.primaryProperty) {
switch (config.primaryProperty) {
case "noise":
filter.noise = normalizedIntensity / 10;
break;
case "scratch":
filter.scratch = normalizedIntensity / 10;
break;
case "sepia":
filter.sepia = normalizedIntensity / 10;
break;
case "vignetting":
filter.vignetting = normalizedIntensity / 10;
break;
case "scratchDensity":
filter.scratchDensity = normalizedIntensity / 10;
break;
default:
filter.noise = Math.min(1, 0.2 + normalizedIntensity / 20);
filter.scratch = Math.min(1, 0.3 + normalizedIntensity / 15);
filter.sepia = Math.min(1, 0.2 + normalizedIntensity / 20);
filter.vignetting = Math.min(1, 0.3 + normalizedIntensity / 30);
}
} else {
filter.noise = Math.min(1, 0.2 + normalizedIntensity / 20);
filter.scratch = Math.min(1, 0.3 + normalizedIntensity / 15);
filter.sepia = Math.min(1, 0.2 + normalizedIntensity / 20);
filter.vignetting = Math.min(1, 0.3 + normalizedIntensity / 30);
}
if (normalizedIntensity > 3) {
filter.seed = Math.random() * 1e3;
}
};
updateIntensity(config.intensity);
const reset = () => {
filter.noise = config.noise !== void 0 ? config.noise : 0.3;
filter.noiseSize = config.noiseSize !== void 0 ? config.noiseSize : 1;
filter.scratch = config.scratch !== void 0 ? config.scratch : 0.5;
filter.scratchDensity = config.scratchDensity !== void 0 ? config.scratchDensity : 0.3;
filter.scratchWidth = config.scratchWidth !== void 0 ? config.scratchWidth : 1;
filter.seed = config.seed !== void 0 ? config.seed : 0;
filter.sepia = config.sepia !== void 0 ? config.sepia : 0.3;
filter.vignetting = config.vignetting !== void 0 ? config.vignetting : 0.3;
filter.vignettingAlpha = config.vignettingAlpha !== void 0 ? config.vignettingAlpha : 1;
filter.vignettingBlur = config.vignettingBlur !== void 0 ? config.vignettingBlur : 1;
if (config.intensity !== void 0) {
updateIntensity(config.intensity);
}
};
const dispose = () => {
try {
shaderManager.releaseFilter(filter, shaderKey);
} catch (error) {
console.warn("Error releasing old film filter shader:", error);
}
filter.destroy();
};
return { filter, updateIntensity, reset, dispose };
}
exports.createOldFilmFilter = createOldFilmFilter;
//# sourceMappingURL=oldFilmFilter.cjs.map