react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
51 lines (48 loc) • 1.67 kB
JavaScript
;
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