lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
43 lines • 1.99 kB
JavaScript
import store, { createEffect } from "@lincode/reactivity";
import { BlendFunction, SelectiveBloomEffect } from "postprocessing";
import { getBloomIntensity } from "../../../states/useBloomIntensity";
import { getBloomRadius } from "../../../states/useBloomRadius";
import { getBloomThreshold } from "../../../states/useBloomThreshold";
import { getCameraRendered } from "../../../states/useCameraRendered";
import { getSelectiveBloom, setSelectiveBloom } from "../../../states/useSelectiveBloom";
import unsafeGetValue from "../../../utils/unsafeGetValue";
import scene from "../../scene";
import { cameraRenderedPtr } from "../../../pointers/cameraRenderedPtr";
let objectSet = new Set();
export const addSelectiveBloom = (target) => {
objectSet.add(target);
objectSet.size === 1 && setSelectiveBloom(true);
};
export const deleteSelectiveBloom = (target) => objectSet.delete(target);
const [setSelectiveBloomEffect, getSelectiveBloomEffect] = store(undefined);
export { getSelectiveBloomEffect };
createEffect(() => {
if (!getSelectiveBloom())
return;
const effect = new SelectiveBloomEffect(scene, cameraRenderedPtr[0], {
blendFunction: BlendFunction.ADD,
mipmapBlur: true,
luminanceSmoothing: 0.3
});
effect.ignoreBackground = true;
setSelectiveBloomEffect(effect);
for (const object of objectSet)
effect.selection.add(object);
objectSet = effect.selection;
const handle0 = getBloomIntensity((val) => (effect.intensity = val));
const handle1 = getBloomThreshold((val) => (effect.luminanceMaterial.threshold = val));
const handle2 = getBloomRadius((val) => (unsafeGetValue(effect, "mipmapBlurPass").radius = Math.min(val, 0.9)));
return () => {
setSelectiveBloomEffect(undefined);
effect.dispose();
handle0.cancel();
handle1.cancel();
handle2.cancel();
};
}, [getSelectiveBloom, getCameraRendered]);
//# sourceMappingURL=selectiveBloomEffect.js.map