UNPKG

react-native-filament

Version:

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

46 lines (43 loc) 1.5 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); if (asset == null) { throw new Error(`Failed to load source: ${source}. Are you sure that\n-The asset exists on this path?\n-The metro bundler is configured correctly as explained in the documentation?`); } return asset.uri; }, [source]); // TODO: useDisposableResource 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