UNPKG

react-native-filament

Version:

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

51 lines (48 loc) 1.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useBuffer = useBuffer; var _react = require("react"); var _FilamentProxy = require("../native/FilamentProxy"); var _withCleanupScope = require("../utilities/withCleanupScope"); var _reactNative = require("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. */ function useBuffer({ source: source, releaseOnUnmount = true }) { const [buffer, setBuffer] = (0, _react.useState)(undefined); const uri = (0, _react.useMemo)(() => { if (typeof source === 'object') { return source.uri; } const asset = _reactNative.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 (0, _react.useEffect)(() => { let localBuffer; _FilamentProxy.FilamentProxy.loadAsset(uri).then(asset => { localBuffer = asset; setBuffer(asset); }).catch(error => { console.error(`Failed to load asset: ${uri}`, error); }); return (0, _withCleanupScope.withCleanupScope)(() => { if (releaseOnUnmount) { var _localBuffer; (_localBuffer = localBuffer) === null || _localBuffer === void 0 || _localBuffer.release(); } }); }, [releaseOnUnmount, uri]); return buffer; } //# sourceMappingURL=useBuffer.js.map