@react-three/fiber 8.0.0-beta-04 → 8.0.0-beta-05
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/declarations/src/core/index.d.ts +2 -1
- package/dist/declarations/src/core/loop.d.ts +2 -1
- package/dist/declarations/src/core/store.d.ts +4 -2
- package/dist/declarations/src/index.d.ts +0 -1
- package/dist/declarations/src/native.d.ts +0 -1
- package/dist/declarations/src/three-types.d.ts +7 -8
- package/dist/{index-fccd77b0.esm.js → index-3f4e5f46.esm.js} +79 -78
- package/dist/{index-ff3eb68b.cjs.dev.js → index-95c17855.cjs.dev.js} +78 -79
- package/dist/{index-eb414398.cjs.prod.js → index-ff8b5912.cjs.prod.js} +78 -79
- package/dist/react-three-fiber.cjs.dev.js +1 -1
- package/dist/react-three-fiber.cjs.prod.js +1 -1
- package/dist/react-three-fiber.esm.js +2 -2
- package/native/dist/react-three-fiber-native.cjs.dev.js +91 -121
- package/native/dist/react-three-fiber-native.cjs.prod.js +91 -121
- package/native/dist/react-three-fiber-native.esm.js +92 -122
- package/package.json +14 -7
- package/dist/declarations/src/native/hooks.d.ts +0 -9
|
@@ -420,7 +420,7 @@ function createEvents(store) {
|
|
|
420
420
|
/** Sets up defaultRaycaster */
|
|
421
421
|
|
|
422
422
|
function prepareRay(event) {
|
|
423
|
-
var
|
|
423
|
+
var _customOffsets$offset, _customOffsets$offset2, _customOffsets$width, _customOffsets$height;
|
|
424
424
|
|
|
425
425
|
const state = store.getState();
|
|
426
426
|
const {
|
|
@@ -431,14 +431,11 @@ function createEvents(store) {
|
|
|
431
431
|
} = state; // https://github.com/pmndrs/react-three-fiber/pull/782
|
|
432
432
|
// Events trigger outside of canvas when moved
|
|
433
433
|
|
|
434
|
-
const
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
const
|
|
439
|
-
width,
|
|
440
|
-
height
|
|
441
|
-
} = size;
|
|
434
|
+
const customOffsets = raycaster.computeOffsets == null ? void 0 : raycaster.computeOffsets(event, state);
|
|
435
|
+
const offsetX = (_customOffsets$offset = customOffsets == null ? void 0 : customOffsets.offsetX) != null ? _customOffsets$offset : event.offsetX;
|
|
436
|
+
const offsetY = (_customOffsets$offset2 = customOffsets == null ? void 0 : customOffsets.offsetY) != null ? _customOffsets$offset2 : event.offsetY;
|
|
437
|
+
const width = (_customOffsets$width = customOffsets == null ? void 0 : customOffsets.width) != null ? _customOffsets$width : size.width;
|
|
438
|
+
const height = (_customOffsets$height = customOffsets == null ? void 0 : customOffsets.height) != null ? _customOffsets$height : size.height;
|
|
442
439
|
mouse.set(offsetX / width * 2 - 1, -(offsetY / height) * 2 + 1);
|
|
443
440
|
raycaster.setFromCamera(mouse, camera);
|
|
444
441
|
}
|
|
@@ -997,10 +994,13 @@ function createRenderer(roots, getEventPriority) {
|
|
|
997
994
|
|
|
998
995
|
instance.__r3f.objects = [];
|
|
999
996
|
removeChild(parent, instance);
|
|
1000
|
-
appendChild(parent, newInstance) //
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
997
|
+
appendChild(parent, newInstance); // Re-bind event handlers
|
|
998
|
+
|
|
999
|
+
if (newInstance.raycast && newInstance.__r3f.eventCount) {
|
|
1000
|
+
const rootState = newInstance.__r3f.root.getState();
|
|
1001
|
+
|
|
1002
|
+
rootState.internal.interaction.push(newInstance);
|
|
1003
|
+
} // This evil hack switches the react-internal fiber node
|
|
1004
1004
|
[fiber, fiber.alternate].forEach(fiber => {
|
|
1005
1005
|
if (fiber !== null) {
|
|
1006
1006
|
fiber.stateNode = newInstance;
|
|
@@ -1094,7 +1094,7 @@ function createRenderer(roots, getEventPriority) {
|
|
|
1094
1094
|
isPrimaryRenderer: false,
|
|
1095
1095
|
getCurrentEventPriority: () => getEventPriority ? getEventPriority() : constants.DefaultEventPriority,
|
|
1096
1096
|
// @ts-ignore
|
|
1097
|
-
now: is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : undefined,
|
|
1097
|
+
now: typeof performance !== 'undefined' && is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : undefined,
|
|
1098
1098
|
// @ts-ignore
|
|
1099
1099
|
scheduleTimeout: is.fun(setTimeout) ? setTimeout : undefined,
|
|
1100
1100
|
// @ts-ignore
|
|
@@ -1255,18 +1255,19 @@ const createStore = (applyProps, invalidate, advance, props) => {
|
|
|
1255
1255
|
})); // Handle frame behavior in WebXR
|
|
1256
1256
|
|
|
1257
1257
|
|
|
1258
|
-
const handleXRFrame = timestamp => {
|
|
1258
|
+
const handleXRFrame = (timestamp, frame) => {
|
|
1259
1259
|
const state = get();
|
|
1260
1260
|
if (state.frameloop === 'never') return;
|
|
1261
|
-
advance(timestamp, true);
|
|
1261
|
+
advance(timestamp, true, state, frame);
|
|
1262
1262
|
}; // Toggle render switching on session
|
|
1263
1263
|
|
|
1264
1264
|
|
|
1265
1265
|
const handleSessionChange = () => {
|
|
1266
|
-
gl.xr.enabled = gl.xr.isPresenting;
|
|
1267
|
-
|
|
1266
|
+
gl.xr.enabled = gl.xr.isPresenting; // @ts-expect-error
|
|
1267
|
+
// WebXRManager's signature is incorrect.
|
|
1268
|
+
// See: https://github.com/pmndrs/react-three-fiber/pull/2017#discussion_r790134505
|
|
1268
1269
|
|
|
1269
|
-
|
|
1270
|
+
gl.xr.setAnimationLoop(gl.xr.isPresenting ? handleXRFrame : null);
|
|
1270
1271
|
}; // WebXR session manager
|
|
1271
1272
|
|
|
1272
1273
|
|
|
@@ -1446,60 +1447,6 @@ const createStore = (applyProps, invalidate, advance, props) => {
|
|
|
1446
1447
|
return rootState;
|
|
1447
1448
|
};
|
|
1448
1449
|
|
|
1449
|
-
function useStore() {
|
|
1450
|
-
const store = React__namespace.useContext(context);
|
|
1451
|
-
if (!store) throw `R3F hooks can only be used within the Canvas component!`;
|
|
1452
|
-
return store;
|
|
1453
|
-
}
|
|
1454
|
-
function useThree(selector = state => state, equalityFn) {
|
|
1455
|
-
return useStore()(selector, equalityFn);
|
|
1456
|
-
}
|
|
1457
|
-
function useFrame(callback, renderPriority = 0) {
|
|
1458
|
-
const subscribe = useStore().getState().internal.subscribe; // Update ref
|
|
1459
|
-
|
|
1460
|
-
const ref = React__namespace.useRef(callback);
|
|
1461
|
-
React__namespace.useLayoutEffect(() => void (ref.current = callback), [callback]); // Subscribe on mount, unsubscribe on unmount
|
|
1462
|
-
|
|
1463
|
-
React__namespace.useLayoutEffect(() => subscribe(ref, renderPriority), [renderPriority, subscribe]);
|
|
1464
|
-
return null;
|
|
1465
|
-
}
|
|
1466
|
-
function useGraph(object) {
|
|
1467
|
-
return React__namespace.useMemo(() => buildGraph(object), [object]);
|
|
1468
|
-
}
|
|
1469
|
-
|
|
1470
|
-
function loadingFn(extensions, onProgress) {
|
|
1471
|
-
return function (Proto, ...input) {
|
|
1472
|
-
// Construct new loader and run extensions
|
|
1473
|
-
const loader = new Proto();
|
|
1474
|
-
if (extensions) extensions(loader); // Go through the urls and load them
|
|
1475
|
-
|
|
1476
|
-
return Promise.all(input.map(input => new Promise((res, reject) => loader.load(input, data => {
|
|
1477
|
-
if (data.scene) Object.assign(data, buildGraph(data.scene));
|
|
1478
|
-
res(data);
|
|
1479
|
-
}, onProgress, error => reject(`Could not load ${input}: ${error.message}`)))));
|
|
1480
|
-
};
|
|
1481
|
-
}
|
|
1482
|
-
|
|
1483
|
-
function useLoader(Proto, input, extensions, onProgress) {
|
|
1484
|
-
// Use suspense to load async assets
|
|
1485
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
1486
|
-
const results = suspendReact.suspend(loadingFn(extensions, onProgress), [Proto, ...keys], {
|
|
1487
|
-
equal: is.equ
|
|
1488
|
-
}); // Return the object/s
|
|
1489
|
-
|
|
1490
|
-
return Array.isArray(input) ? results : results[0];
|
|
1491
|
-
}
|
|
1492
|
-
|
|
1493
|
-
useLoader.preload = function (Proto, input, extensions) {
|
|
1494
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
1495
|
-
return suspendReact.preload(loadingFn(extensions), [Proto, ...keys]);
|
|
1496
|
-
};
|
|
1497
|
-
|
|
1498
|
-
useLoader.clear = function (Proto, input) {
|
|
1499
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
1500
|
-
return suspendReact.clear([Proto, ...keys]);
|
|
1501
|
-
};
|
|
1502
|
-
|
|
1503
1450
|
function createSubs(callback, subs) {
|
|
1504
1451
|
const index = subs.length;
|
|
1505
1452
|
subs.push(callback);
|
|
@@ -1518,7 +1465,7 @@ function run(effects, timestamp) {
|
|
|
1518
1465
|
for (i = 0; i < effects.length; i++) effects[i](timestamp);
|
|
1519
1466
|
}
|
|
1520
1467
|
|
|
1521
|
-
function render$1(timestamp, state) {
|
|
1468
|
+
function render$1(timestamp, state, frame) {
|
|
1522
1469
|
// Run local effects
|
|
1523
1470
|
let delta = state.clock.getDelta(); // In frameloop='never' mode, clock times are updated using the provided timestamp
|
|
1524
1471
|
|
|
@@ -1529,7 +1476,7 @@ function render$1(timestamp, state) {
|
|
|
1529
1476
|
} // Call subscribers (useFrame)
|
|
1530
1477
|
|
|
1531
1478
|
|
|
1532
|
-
for (i = 0; i < state.internal.subscribers.length; i++) state.internal.subscribers[i].ref.current(state, delta); // Render content
|
|
1479
|
+
for (i = 0; i < state.internal.subscribers.length; i++) state.internal.subscribers[i].ref.current(state, delta, frame); // Render content
|
|
1533
1480
|
|
|
1534
1481
|
|
|
1535
1482
|
if (!state.internal.priority && state.gl.render) state.gl.render(state.scene, state.camera); // Decrease frame count
|
|
@@ -1580,9 +1527,9 @@ function createLoop(roots) {
|
|
|
1580
1527
|
}
|
|
1581
1528
|
}
|
|
1582
1529
|
|
|
1583
|
-
function advance(timestamp, runGlobalEffects = true, state) {
|
|
1530
|
+
function advance(timestamp, runGlobalEffects = true, state, frame) {
|
|
1584
1531
|
if (runGlobalEffects) run(globalEffects, timestamp);
|
|
1585
|
-
if (!state) roots.forEach(root => render$1(timestamp, root.store.getState()));else render$1(timestamp, state);
|
|
1532
|
+
if (!state) roots.forEach(root => render$1(timestamp, root.store.getState()));else render$1(timestamp, state, frame);
|
|
1586
1533
|
if (runGlobalEffects) run(globalAfterEffects, timestamp);
|
|
1587
1534
|
}
|
|
1588
1535
|
|
|
@@ -1593,6 +1540,60 @@ function createLoop(roots) {
|
|
|
1593
1540
|
};
|
|
1594
1541
|
}
|
|
1595
1542
|
|
|
1543
|
+
function useStore() {
|
|
1544
|
+
const store = React__namespace.useContext(context);
|
|
1545
|
+
if (!store) throw `R3F hooks can only be used within the Canvas component!`;
|
|
1546
|
+
return store;
|
|
1547
|
+
}
|
|
1548
|
+
function useThree(selector = state => state, equalityFn) {
|
|
1549
|
+
return useStore()(selector, equalityFn);
|
|
1550
|
+
}
|
|
1551
|
+
function useFrame(callback, renderPriority = 0) {
|
|
1552
|
+
const subscribe = useStore().getState().internal.subscribe; // Update ref
|
|
1553
|
+
|
|
1554
|
+
const ref = React__namespace.useRef(callback);
|
|
1555
|
+
React__namespace.useLayoutEffect(() => void (ref.current = callback), [callback]); // Subscribe on mount, unsubscribe on unmount
|
|
1556
|
+
|
|
1557
|
+
React__namespace.useLayoutEffect(() => subscribe(ref, renderPriority), [renderPriority, subscribe]);
|
|
1558
|
+
return null;
|
|
1559
|
+
}
|
|
1560
|
+
function useGraph(object) {
|
|
1561
|
+
return React__namespace.useMemo(() => buildGraph(object), [object]);
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
function loadingFn(extensions, onProgress) {
|
|
1565
|
+
return function (Proto, ...input) {
|
|
1566
|
+
// Construct new loader and run extensions
|
|
1567
|
+
const loader = new Proto();
|
|
1568
|
+
if (extensions) extensions(loader); // Go through the urls and load them
|
|
1569
|
+
|
|
1570
|
+
return Promise.all(input.map(input => new Promise((res, reject) => loader.load(input, data => {
|
|
1571
|
+
if (data.scene) Object.assign(data, buildGraph(data.scene));
|
|
1572
|
+
res(data);
|
|
1573
|
+
}, onProgress, error => reject(`Could not load ${input}: ${error.message}`)))));
|
|
1574
|
+
};
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
function useLoader(Proto, input, extensions, onProgress) {
|
|
1578
|
+
// Use suspense to load async assets
|
|
1579
|
+
const keys = Array.isArray(input) ? input : [input];
|
|
1580
|
+
const results = suspendReact.suspend(loadingFn(extensions, onProgress), [Proto, ...keys], {
|
|
1581
|
+
equal: is.equ
|
|
1582
|
+
}); // Return the object/s
|
|
1583
|
+
|
|
1584
|
+
return Array.isArray(input) ? results : results[0];
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1587
|
+
useLoader.preload = function (Proto, input, extensions) {
|
|
1588
|
+
const keys = Array.isArray(input) ? input : [input];
|
|
1589
|
+
return suspendReact.preload(loadingFn(extensions), [Proto, ...keys]);
|
|
1590
|
+
};
|
|
1591
|
+
|
|
1592
|
+
useLoader.clear = function (Proto, input) {
|
|
1593
|
+
const keys = Array.isArray(input) ? input : [input];
|
|
1594
|
+
return suspendReact.clear([Proto, ...keys]);
|
|
1595
|
+
};
|
|
1596
|
+
|
|
1596
1597
|
const roots = new Map();
|
|
1597
1598
|
const {
|
|
1598
1599
|
invalidate,
|
|
@@ -1782,7 +1783,6 @@ exports.addEffect = addEffect;
|
|
|
1782
1783
|
exports.addTail = addTail;
|
|
1783
1784
|
exports.advance = advance;
|
|
1784
1785
|
exports.applyProps = applyProps;
|
|
1785
|
-
exports.buildGraph = buildGraph;
|
|
1786
1786
|
exports.context = context;
|
|
1787
1787
|
exports.createEvents = createEvents;
|
|
1788
1788
|
exports.createPortal = createPortal;
|
|
@@ -1790,7 +1790,6 @@ exports.createRoot = createRoot;
|
|
|
1790
1790
|
exports.dispose = dispose;
|
|
1791
1791
|
exports.extend = extend;
|
|
1792
1792
|
exports.invalidate = invalidate;
|
|
1793
|
-
exports.is = is;
|
|
1794
1793
|
exports.omit = omit;
|
|
1795
1794
|
exports.pick = pick;
|
|
1796
1795
|
exports.reconciler = reconciler;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var index = require('./index-
|
|
5
|
+
var index = require('./index-95c17855.cjs.dev.js');
|
|
6
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var THREE = require('three');
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var index = require('./index-
|
|
5
|
+
var index = require('./index-ff8b5912.cjs.prod.js');
|
|
6
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var THREE = require('three');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as createEvents, e as extend, p as pick, o as omit, a as createRoot, u as unmountComponentAtNode } from './index-
|
|
2
|
-
export { t as ReactThreeFiber,
|
|
1
|
+
import { c as createEvents, e as extend, p as pick, o as omit, a as createRoot, u as unmountComponentAtNode } from './index-3f4e5f46.esm.js';
|
|
2
|
+
export { t as ReactThreeFiber, q as _roots, n as act, l as addAfterEffect, k as addEffect, m as addTail, j as advance, g as applyProps, b as context, d as createPortal, a as createRoot, h as dispose, e as extend, i as invalidate, f as reconciler, r as render, u as unmountComponentAtNode, w as useFrame, x as useGraph, y as useLoader, s as useStore, v as useThree } from './index-3f4e5f46.esm.js';
|
|
3
3
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import * as THREE from 'three';
|
|
@@ -2,17 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var index = require('../../dist/index-ff3eb68b.cjs.dev.js');
|
|
6
5
|
var THREE = require('three');
|
|
7
6
|
var expoAsset = require('expo-asset');
|
|
8
|
-
var
|
|
9
|
-
var base64Arraybuffer = require('base64-arraybuffer');
|
|
10
|
-
var suspendReact = require('suspend-react');
|
|
7
|
+
var index = require('../../dist/index-95c17855.cjs.dev.js');
|
|
11
8
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
12
9
|
var React = require('react');
|
|
13
10
|
var reactNative = require('react-native');
|
|
14
11
|
var expoGl = require('expo-gl');
|
|
15
12
|
var Pressability = require('react-native/Libraries/Pressability/Pressability');
|
|
13
|
+
require('suspend-react');
|
|
16
14
|
require('react-reconciler/constants');
|
|
17
15
|
require('zustand');
|
|
18
16
|
require('react-reconciler');
|
|
@@ -44,116 +42,6 @@ var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
|
44
42
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
45
43
|
var Pressability__default = /*#__PURE__*/_interopDefault(Pressability);
|
|
46
44
|
|
|
47
|
-
/**
|
|
48
|
-
* Generates an asset based on input type.
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
const getAsset = input => {
|
|
52
|
-
if (input instanceof expoAsset.Asset) return input;
|
|
53
|
-
|
|
54
|
-
switch (typeof input) {
|
|
55
|
-
case 'string':
|
|
56
|
-
return expoAsset.Asset.fromURI(input);
|
|
57
|
-
|
|
58
|
-
case 'number':
|
|
59
|
-
return expoAsset.Asset.fromModule(input);
|
|
60
|
-
|
|
61
|
-
default:
|
|
62
|
-
throw 'Invalid asset! Must be a URI or module.';
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Downloads from a local URI and decodes into an ArrayBuffer.
|
|
67
|
-
*/
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const toBuffer = async localUri => expoFileSystem.readAsStringAsync(localUri, {
|
|
71
|
-
encoding: 'base64'
|
|
72
|
-
}).then(base64Arraybuffer.decode);
|
|
73
|
-
|
|
74
|
-
function loadingFn(extensions, onProgress) {
|
|
75
|
-
return function (Proto, ...input) {
|
|
76
|
-
// Construct new loader and run extensions
|
|
77
|
-
const loader = new Proto();
|
|
78
|
-
if (extensions) extensions(loader); // Go through the urls and load them
|
|
79
|
-
|
|
80
|
-
return Promise.all(input.map(entry => new Promise(async (res, reject) => {
|
|
81
|
-
// Construct URL
|
|
82
|
-
const url = typeof entry === 'string' ? loader.path + entry : entry; // There's no Image in native, so we create & pass a data texture instead
|
|
83
|
-
|
|
84
|
-
if (loader instanceof THREE__namespace.TextureLoader) {
|
|
85
|
-
const asset = await getAsset(url).downloadAsync();
|
|
86
|
-
const texture = new THREE__namespace.Texture();
|
|
87
|
-
texture.isDataTexture = true;
|
|
88
|
-
texture.image = {
|
|
89
|
-
data: asset,
|
|
90
|
-
width: asset.width,
|
|
91
|
-
height: asset.height
|
|
92
|
-
};
|
|
93
|
-
texture.needsUpdate = true;
|
|
94
|
-
return res(texture);
|
|
95
|
-
} // Do similar for CubeTextures
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (loader instanceof THREE__namespace.CubeTextureLoader) {
|
|
99
|
-
const texture = new THREE__namespace.CubeTexture();
|
|
100
|
-
texture.isDataTexture = true;
|
|
101
|
-
texture.images = await Promise.all(url.map(async src => {
|
|
102
|
-
const asset = await getAsset(src).downloadAsync();
|
|
103
|
-
return {
|
|
104
|
-
data: asset,
|
|
105
|
-
width: asset.width,
|
|
106
|
-
height: asset.height
|
|
107
|
-
};
|
|
108
|
-
}));
|
|
109
|
-
texture.needsUpdate = true;
|
|
110
|
-
return res(texture);
|
|
111
|
-
} // If asset is external and not an Image, load it
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (url.startsWith != null && url.startsWith('http') && Proto.prototype.hasOwnProperty('load')) {
|
|
115
|
-
return loader.load(entry, data => {
|
|
116
|
-
if (data.scene) Object.assign(data, index.buildGraph(data.scene));
|
|
117
|
-
res(data);
|
|
118
|
-
}, onProgress, error => reject(`Could not load ${url}: ${error.message}`));
|
|
119
|
-
} // Otherwise, create a localUri and a file buffer
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const {
|
|
123
|
-
localUri
|
|
124
|
-
} = await getAsset(url).downloadAsync();
|
|
125
|
-
const arrayBuffer = await toBuffer(localUri); // Parse it
|
|
126
|
-
|
|
127
|
-
const parsed = loader.parse == null ? void 0 : loader.parse(arrayBuffer, undefined, data => {
|
|
128
|
-
if (data.scene) Object.assign(data, index.buildGraph(data.scene));
|
|
129
|
-
res(data);
|
|
130
|
-
}, error => reject(`Could not load ${url}: ${error.message}`)); // Respect synchronous parsers which don't have callbacks
|
|
131
|
-
|
|
132
|
-
if (parsed) return res(parsed);
|
|
133
|
-
})));
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function useLoader(Proto, input, extensions, onProgress) {
|
|
138
|
-
// Use suspense to load async assets
|
|
139
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
140
|
-
const results = suspendReact.suspend(loadingFn(extensions, onProgress), [Proto, ...keys], {
|
|
141
|
-
equal: index.is.equ
|
|
142
|
-
}); // Return the object/s
|
|
143
|
-
|
|
144
|
-
return Array.isArray(input) ? results : results[0];
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
useLoader.preload = function (Proto, input, extensions) {
|
|
148
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
149
|
-
return suspendReact.preload(loadingFn(extensions), [Proto, ...keys]);
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
useLoader.clear = function (Proto, input) {
|
|
153
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
154
|
-
return suspendReact.clear([Proto, ...keys]);
|
|
155
|
-
};
|
|
156
|
-
|
|
157
45
|
const EVENTS = {
|
|
158
46
|
PRESS: 'onPress',
|
|
159
47
|
PRESSIN: 'onPressIn',
|
|
@@ -180,8 +68,8 @@ function createTouchEvents(store) {
|
|
|
180
68
|
const handleTouch = (event, name) => {
|
|
181
69
|
event.persist() // Apply offset
|
|
182
70
|
;
|
|
183
|
-
event.nativeEvent.offsetX = event.nativeEvent.
|
|
184
|
-
event.nativeEvent.offsetY = event.nativeEvent.
|
|
71
|
+
event.nativeEvent.offsetX = event.nativeEvent.locationX;
|
|
72
|
+
event.nativeEvent.offsetY = event.nativeEvent.locationY; // Emulate DOM event
|
|
185
73
|
|
|
186
74
|
const callback = handlePointer(DOM_EVENTS[name]);
|
|
187
75
|
return callback(event.nativeEvent);
|
|
@@ -199,13 +87,13 @@ function createTouchEvents(store) {
|
|
|
199
87
|
} = store.getState();
|
|
200
88
|
events.disconnect == null ? void 0 : events.disconnect();
|
|
201
89
|
const connected = new Pressability__default['default'](events == null ? void 0 : events.handlers);
|
|
202
|
-
const handlers = connected.getEventHandlers();
|
|
203
90
|
set(state => ({
|
|
204
91
|
events: { ...state.events,
|
|
205
|
-
connected
|
|
206
|
-
handlers
|
|
92
|
+
connected
|
|
207
93
|
}
|
|
208
94
|
}));
|
|
95
|
+
const handlers = connected.getEventHandlers();
|
|
96
|
+
return handlers;
|
|
209
97
|
},
|
|
210
98
|
disconnect: () => {
|
|
211
99
|
const {
|
|
@@ -314,7 +202,8 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
314
202
|
// Overwrite onCreated to apply RN bindings
|
|
315
203
|
const onCreated = state => {
|
|
316
204
|
// Bind events after creation
|
|
317
|
-
|
|
205
|
+
const handlers = state.events.connect == null ? void 0 : state.events.connect(canvas);
|
|
206
|
+
setBind(handlers); // Bind render to RN bridge
|
|
318
207
|
|
|
319
208
|
const context = state.gl.getContext();
|
|
320
209
|
const renderFrame = state.gl.render.bind(state.gl);
|
|
@@ -362,6 +251,87 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
362
251
|
}));
|
|
363
252
|
});
|
|
364
253
|
|
|
254
|
+
/**
|
|
255
|
+
* Generates an asset based on input type.
|
|
256
|
+
*/
|
|
257
|
+
|
|
258
|
+
const getAsset = input => {
|
|
259
|
+
if (input instanceof expoAsset.Asset) return input;
|
|
260
|
+
|
|
261
|
+
switch (typeof input) {
|
|
262
|
+
case 'string':
|
|
263
|
+
return expoAsset.Asset.fromURI(input);
|
|
264
|
+
|
|
265
|
+
case 'number':
|
|
266
|
+
return expoAsset.Asset.fromModule(input);
|
|
267
|
+
|
|
268
|
+
default:
|
|
269
|
+
throw 'Invalid asset! Must be a URI or module.';
|
|
270
|
+
}
|
|
271
|
+
}; // Don't pre-process urls, let expo-asset generate an absolute URL
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
THREE__namespace.LoaderUtils.extractUrlBase = () => './'; // There's no Image in native, so create a data texture instead
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
THREE__namespace.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
|
|
278
|
+
const texture = new THREE__namespace.Texture(); // @ts-expect-error
|
|
279
|
+
|
|
280
|
+
texture.isDataTexture = true;
|
|
281
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
282
|
+
texture.image = {
|
|
283
|
+
data: asset,
|
|
284
|
+
width: asset.width,
|
|
285
|
+
height: asset.height
|
|
286
|
+
};
|
|
287
|
+
texture.needsUpdate = true;
|
|
288
|
+
onLoad == null ? void 0 : onLoad(texture);
|
|
289
|
+
}).catch(onError);
|
|
290
|
+
return texture;
|
|
291
|
+
}; // Fetches assets via XMLHttpRequest
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
THREE__namespace.FileLoader.prototype.load = function (url, onLoad, onProgress, onError) {
|
|
295
|
+
if (this.path) url = this.path + url;
|
|
296
|
+
const request = new XMLHttpRequest();
|
|
297
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
298
|
+
request.open('GET', asset.uri, true);
|
|
299
|
+
request.addEventListener('load', event => {
|
|
300
|
+
if (request.status === 200) {
|
|
301
|
+
onLoad == null ? void 0 : onLoad(request.response);
|
|
302
|
+
this.manager.itemEnd(url);
|
|
303
|
+
} else {
|
|
304
|
+
onError == null ? void 0 : onError(event);
|
|
305
|
+
this.manager.itemError(url);
|
|
306
|
+
this.manager.itemEnd(url);
|
|
307
|
+
}
|
|
308
|
+
}, false);
|
|
309
|
+
request.addEventListener('progress', event => {
|
|
310
|
+
onProgress == null ? void 0 : onProgress(event);
|
|
311
|
+
}, false);
|
|
312
|
+
request.addEventListener('error', event => {
|
|
313
|
+
onError == null ? void 0 : onError(event);
|
|
314
|
+
this.manager.itemError(url);
|
|
315
|
+
this.manager.itemEnd(url);
|
|
316
|
+
}, false);
|
|
317
|
+
request.addEventListener('abort', event => {
|
|
318
|
+
onError == null ? void 0 : onError(event);
|
|
319
|
+
this.manager.itemError(url);
|
|
320
|
+
this.manager.itemEnd(url);
|
|
321
|
+
}, false);
|
|
322
|
+
if (this.responseType) request.responseType = this.responseType;
|
|
323
|
+
if (this.withCredentials) request.withCredentials = this.withCredentials;
|
|
324
|
+
|
|
325
|
+
for (const header in this.requestHeader) {
|
|
326
|
+
request.setRequestHeader(header, this.requestHeader[header]);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
request.send(null);
|
|
330
|
+
this.manager.itemStart(url);
|
|
331
|
+
});
|
|
332
|
+
return request;
|
|
333
|
+
};
|
|
334
|
+
|
|
365
335
|
exports.ReactThreeFiber = index.threeTypes;
|
|
366
336
|
exports._roots = index.roots;
|
|
367
337
|
exports.act = index.act;
|
|
@@ -381,8 +351,8 @@ exports.render = index.render;
|
|
|
381
351
|
exports.unmountComponentAtNode = index.unmountComponentAtNode;
|
|
382
352
|
exports.useFrame = index.useFrame;
|
|
383
353
|
exports.useGraph = index.useGraph;
|
|
354
|
+
exports.useLoader = index.useLoader;
|
|
384
355
|
exports.useStore = index.useStore;
|
|
385
356
|
exports.useThree = index.useThree;
|
|
386
357
|
exports.Canvas = Canvas;
|
|
387
358
|
exports.events = createTouchEvents;
|
|
388
|
-
exports.useLoader = useLoader;
|