react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
48 lines (45 loc) • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useConfigureAssetShadow = useConfigureAssetShadow;
var _react = require("react");
var _useFilamentContext = require("./useFilamentContext");
function useConfigureAssetShadow({
renderableManager,
asset,
receiveShadow,
castShadow
}) {
const {
workletContext
} = (0, _useFilamentContext.useFilamentContext)();
const renderableEntities = (0, _react.useMemo)(() => asset === null || asset === void 0 ? void 0 : asset.getRenderableEntities(), [asset]);
const prevCastShadowRef = (0, _react.useRef)();
(0, _react.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 = (0, _react.useRef)();
(0, _react.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