UNPKG

react-native-filament

Version:

A real-time physically based 3D rendering engine for React Native

41 lines (39 loc) 1.24 kB
import { useEffect, useMemo, useState } from 'react'; import { FilamentProxy } from '../native/FilamentProxy'; import { withCleanupScope } from '../utilities/withCleanupScope'; import { Image } from 'react-native'; // In React Native, `require(..)` returns a number. // ReturnType<typeof require> /** * Asynchronously load an asset from the given web URL, local file path, or resource ID. */ export function useBuffer({ source: source, releaseOnUnmount = true }) { const [buffer, setBuffer] = useState(undefined); const uri = useMemo(() => { if (typeof source === 'object') { return source.uri; } const asset = Image.resolveAssetSource(source); return asset.uri; }, [source]); useEffect(() => { let localBuffer; FilamentProxy.loadAsset(uri).then(asset => { localBuffer = asset; setBuffer(asset); }).catch(error => { console.error(`Failed to load asset: ${uri}`, error); }); return withCleanupScope(() => { if (releaseOnUnmount) { var _localBuffer; (_localBuffer = localBuffer) === null || _localBuffer === void 0 || _localBuffer.release(); } }); }, [releaseOnUnmount, uri]); return buffer; } //# sourceMappingURL=useBuffer.js.map