react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
42 lines (40 loc) • 1.44 kB
JavaScript
import { useEffect, useMemo, useRef } from 'react';
import { useFilamentContext } from './useFilamentContext';
export function useConfigureAssetShadow({
renderableManager,
asset,
receiveShadow,
castShadow
}) {
const {
workletContext
} = useFilamentContext();
const renderableEntities = useMemo(() => asset === null || asset === void 0 ? void 0 : asset.getRenderableEntities(), [asset]);
const prevCastShadowRef = useRef();
useEffect(() => {
if (renderableEntities == null || castShadow == null || prevCastShadowRef.current === castShadow) {
return;
}
prevCastShadowRef.current = castShadow;
workletContext.runAsync(() => {
'worklet';
renderableEntities.forEach(entity => {
renderableManager.setCastShadow(entity, castShadow);
});
});
}, [castShadow, renderableManager, renderableEntities, workletContext]);
const prevReceiveShadowRef = useRef();
useEffect(() => {
if (renderableEntities == null || receiveShadow == null || prevReceiveShadowRef.current === receiveShadow) {
return;
}
prevReceiveShadowRef.current = receiveShadow;
workletContext.runAsync(() => {
'worklet';
renderableEntities.forEach(entity => {
renderableManager.setReceiveShadow(entity, receiveShadow);
});
});
}, [receiveShadow, renderableEntities, renderableManager, workletContext]);
}
//# sourceMappingURL=useConfigureAssetShadow.js.map