@react-three/fiber 7.0.22 → 7.0.26
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 +24 -0
- package/dist/declarations/src/core/store.d.ts +2 -0
- package/dist/declarations/src/three-types.d.ts +7 -16
- package/dist/react-three-fiber.cjs.dev.js +40 -25
- package/dist/react-three-fiber.cjs.prod.js +40 -25
- package/dist/react-three-fiber.esm.js +40 -25
- package/native/dist/react-three-fiber-native.cjs.dev.js +160 -392
- package/native/dist/react-three-fiber-native.cjs.prod.js +160 -392
- package/native/dist/react-three-fiber-native.esm.js +135 -367
- package/package.json +2 -2
|
@@ -2,22 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var hooks = require('../../dist/hooks-1558bdce.cjs.dev.js');
|
|
6
5
|
var THREE = require('three');
|
|
7
|
-
var React = require('react');
|
|
8
|
-
var constants = require('react-reconciler/constants');
|
|
9
|
-
var Pressability = require('react-native/Libraries/Pressability/Pressability');
|
|
10
|
-
var reactNative = require('react-native');
|
|
11
6
|
var expoAsset = require('expo-asset');
|
|
12
|
-
var
|
|
13
|
-
var base64Arraybuffer = require('base64-arraybuffer');
|
|
14
|
-
var suspendReact = require('suspend-react');
|
|
7
|
+
var index = require('../../dist/index-95c17855.cjs.dev.js');
|
|
15
8
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
9
|
+
var React = require('react');
|
|
10
|
+
var reactNative = require('react-native');
|
|
16
11
|
var expoGl = require('expo-gl');
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
require('react-reconciler');
|
|
12
|
+
var Pressability = require('react-native/Libraries/Pressability/Pressability');
|
|
13
|
+
require('suspend-react');
|
|
14
|
+
require('react-reconciler/constants');
|
|
20
15
|
require('zustand');
|
|
16
|
+
require('react-reconciler');
|
|
17
|
+
require('scheduler');
|
|
21
18
|
|
|
22
19
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
23
20
|
|
|
@@ -30,22 +27,21 @@ function _interopNamespace(e) {
|
|
|
30
27
|
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
31
28
|
Object.defineProperty(n, k, d.get ? d : {
|
|
32
29
|
enumerable: true,
|
|
33
|
-
get: function () {
|
|
30
|
+
get: function () {
|
|
31
|
+
return e[k];
|
|
32
|
+
}
|
|
34
33
|
});
|
|
35
34
|
}
|
|
36
35
|
});
|
|
37
36
|
}
|
|
38
|
-
n[
|
|
37
|
+
n['default'] = e;
|
|
39
38
|
return Object.freeze(n);
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
43
42
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
44
43
|
var Pressability__default = /*#__PURE__*/_interopDefault(Pressability);
|
|
45
|
-
var pick__default = /*#__PURE__*/_interopDefault(pick);
|
|
46
|
-
var omit__default = /*#__PURE__*/_interopDefault(omit);
|
|
47
44
|
|
|
48
|
-
// @ts-ignore
|
|
49
45
|
const EVENTS = {
|
|
50
46
|
PRESS: 'onPress',
|
|
51
47
|
PRESSIN: 'onPressIn',
|
|
@@ -63,40 +59,17 @@ const DOM_EVENTS = {
|
|
|
63
59
|
[EVENTS.HOVERIN]: 'onPointerOver',
|
|
64
60
|
[EVENTS.HOVEROUT]: 'onPointerOut',
|
|
65
61
|
[EVENTS.PRESSMOVE]: 'onPointerMove'
|
|
66
|
-
};
|
|
67
|
-
// Gives React a clue as to how import the current interaction is
|
|
68
|
-
|
|
69
|
-
function getEventPriority() {
|
|
70
|
-
var _window, _window$event;
|
|
71
|
-
|
|
72
|
-
let name = (_window = window) == null ? void 0 : (_window$event = _window.event) == null ? void 0 : _window$event.type;
|
|
73
|
-
|
|
74
|
-
switch (name) {
|
|
75
|
-
case EVENTS.PRESS:
|
|
76
|
-
case EVENTS.PRESSIN:
|
|
77
|
-
case EVENTS.PRESSOUT:
|
|
78
|
-
case EVENTS.LONGPRESS:
|
|
79
|
-
return constants.DiscreteEventPriority;
|
|
80
|
-
|
|
81
|
-
case EVENTS.HOVERIN:
|
|
82
|
-
case EVENTS.HOVEROUT:
|
|
83
|
-
case EVENTS.PRESSMOVE:
|
|
84
|
-
return constants.ContinuousEventPriority;
|
|
85
|
-
|
|
86
|
-
default:
|
|
87
|
-
return constants.DefaultEventPriority;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
62
|
+
};
|
|
90
63
|
function createTouchEvents(store) {
|
|
91
64
|
const {
|
|
92
65
|
handlePointer
|
|
93
|
-
} =
|
|
66
|
+
} = index.createEvents(store);
|
|
94
67
|
|
|
95
68
|
const handleTouch = (event, name) => {
|
|
96
69
|
event.persist() // Apply offset
|
|
97
70
|
;
|
|
98
|
-
event.nativeEvent.offsetX = event.nativeEvent.
|
|
99
|
-
event.nativeEvent.offsetY = event.nativeEvent.
|
|
71
|
+
event.nativeEvent.offsetX = event.nativeEvent.locationX;
|
|
72
|
+
event.nativeEvent.offsetY = event.nativeEvent.locationY; // Emulate DOM event
|
|
100
73
|
|
|
101
74
|
const callback = handlePointer(DOM_EVENTS[name]);
|
|
102
75
|
return callback(event.nativeEvent);
|
|
@@ -113,12 +86,14 @@ function createTouchEvents(store) {
|
|
|
113
86
|
events
|
|
114
87
|
} = store.getState();
|
|
115
88
|
events.disconnect == null ? void 0 : events.disconnect();
|
|
116
|
-
const
|
|
89
|
+
const connected = new Pressability__default['default'](events == null ? void 0 : events.handlers);
|
|
117
90
|
set(state => ({
|
|
118
91
|
events: { ...state.events,
|
|
119
|
-
connected
|
|
92
|
+
connected
|
|
120
93
|
}
|
|
121
94
|
}));
|
|
95
|
+
const handlers = connected.getEventHandlers();
|
|
96
|
+
return handlers;
|
|
122
97
|
},
|
|
123
98
|
disconnect: () => {
|
|
124
99
|
const {
|
|
@@ -138,20 +113,15 @@ function createTouchEvents(store) {
|
|
|
138
113
|
};
|
|
139
114
|
}
|
|
140
115
|
|
|
141
|
-
const CANVAS_PROPS = ['gl', 'events', '
|
|
142
|
-
'performance', 'clock', 'raycaster', 'camera', 'onPointerMissed', 'onCreated']; // React currently throws a warning when using useLayoutEffect on the server.
|
|
143
|
-
// To get around it, we can conditionally useEffect on the server (no-op) and
|
|
144
|
-
// useLayoutEffect in the browser.
|
|
145
|
-
|
|
146
|
-
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React__namespace.useLayoutEffect : React__namespace.useEffect;
|
|
116
|
+
const CANVAS_PROPS = ['gl', 'events', 'shadows', 'linear', 'flat', 'orthographic', 'frameloop', 'performance', 'clock', 'raycaster', 'camera', 'onPointerMissed', 'onCreated'];
|
|
147
117
|
|
|
148
118
|
function Block({
|
|
149
119
|
set
|
|
150
120
|
}) {
|
|
151
|
-
|
|
121
|
+
React__namespace.useLayoutEffect(() => {
|
|
152
122
|
set(new Promise(() => null));
|
|
153
123
|
return () => set(false);
|
|
154
|
-
}, []);
|
|
124
|
+
}, [set]);
|
|
155
125
|
return null;
|
|
156
126
|
}
|
|
157
127
|
|
|
@@ -182,13 +152,12 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
182
152
|
fallback,
|
|
183
153
|
style,
|
|
184
154
|
events,
|
|
185
|
-
nativeRef_EXPERIMENTAL,
|
|
186
|
-
onContextCreate,
|
|
187
155
|
...props
|
|
188
156
|
}, forwardedRef) => {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
157
|
+
// Create a known catalogue of Threejs-native elements
|
|
158
|
+
// This will include the entire THREE namespace by default, users can extend
|
|
159
|
+
// their own elements by using the createRoot API instead
|
|
160
|
+
React__namespace.useMemo(() => index.extend(THREE__namespace), []);
|
|
192
161
|
const [{
|
|
193
162
|
width,
|
|
194
163
|
height
|
|
@@ -196,7 +165,10 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
196
165
|
width: 0,
|
|
197
166
|
height: 0
|
|
198
167
|
});
|
|
168
|
+
const [canvas, setCanvas] = React__namespace.useState(null);
|
|
199
169
|
const [bind, setBind] = React__namespace.useState();
|
|
170
|
+
const canvasProps = index.pick(props, CANVAS_PROPS);
|
|
171
|
+
const viewProps = index.omit(props, CANVAS_PROPS);
|
|
200
172
|
const [block, setBlock] = React__namespace.useState(false);
|
|
201
173
|
const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
|
|
202
174
|
|
|
@@ -212,32 +184,60 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
212
184
|
width,
|
|
213
185
|
height
|
|
214
186
|
});
|
|
215
|
-
}, []);
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}, children)), context, { ...canvasProps,
|
|
226
|
-
size: {
|
|
227
|
-
width,
|
|
228
|
-
height
|
|
229
|
-
},
|
|
230
|
-
events: events || createTouchEvents
|
|
231
|
-
});
|
|
232
|
-
const state = store.getState();
|
|
233
|
-
setBind(state.events.connected.getEventHandlers());
|
|
234
|
-
}
|
|
235
|
-
}, [width, height, children, context, canvasProps]);
|
|
236
|
-
useIsomorphicLayoutEffect(() => {
|
|
237
|
-
return () => {
|
|
238
|
-
if (context) unmountComponentAtNode(context);
|
|
187
|
+
}, []);
|
|
188
|
+
const onContextCreate = React__namespace.useCallback(context => {
|
|
189
|
+
const canvasShim = {
|
|
190
|
+
width: context.drawingBufferWidth,
|
|
191
|
+
height: context.drawingBufferHeight,
|
|
192
|
+
style: {},
|
|
193
|
+
addEventListener: () => {},
|
|
194
|
+
removeEventListener: () => {},
|
|
195
|
+
clientHeight: context.drawingBufferHeight,
|
|
196
|
+
getContext: () => context
|
|
239
197
|
};
|
|
198
|
+
setCanvas(canvasShim);
|
|
240
199
|
}, []);
|
|
200
|
+
|
|
201
|
+
if (width > 0 && height > 0 && canvas) {
|
|
202
|
+
// Overwrite onCreated to apply RN bindings
|
|
203
|
+
const onCreated = state => {
|
|
204
|
+
// Bind events after creation
|
|
205
|
+
const handlers = state.events.connect == null ? void 0 : state.events.connect(canvas);
|
|
206
|
+
setBind(handlers); // Bind render to RN bridge
|
|
207
|
+
|
|
208
|
+
const context = state.gl.getContext();
|
|
209
|
+
const renderFrame = state.gl.render.bind(state.gl);
|
|
210
|
+
|
|
211
|
+
state.gl.render = (scene, camera) => {
|
|
212
|
+
renderFrame(scene, camera);
|
|
213
|
+
context.endFrameEXP();
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
return canvasProps == null ? void 0 : canvasProps.onCreated == null ? void 0 : canvasProps.onCreated(state);
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
index.createRoot(canvas, { ...canvasProps,
|
|
220
|
+
// expo-gl can only render at native dpr/resolution
|
|
221
|
+
// https://github.com/expo/expo-three/issues/39
|
|
222
|
+
dpr: reactNative.PixelRatio.get(),
|
|
223
|
+
size: {
|
|
224
|
+
width,
|
|
225
|
+
height
|
|
226
|
+
},
|
|
227
|
+
events: events || createTouchEvents,
|
|
228
|
+
onCreated
|
|
229
|
+
}).render( /*#__PURE__*/React__namespace.createElement(ErrorBoundary, {
|
|
230
|
+
set: setError
|
|
231
|
+
}, /*#__PURE__*/React__namespace.createElement(React__namespace.Suspense, {
|
|
232
|
+
fallback: /*#__PURE__*/React__namespace.createElement(Block, {
|
|
233
|
+
set: setBlock
|
|
234
|
+
})
|
|
235
|
+
}, children)));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
React__namespace.useEffect(() => {
|
|
239
|
+
return () => index.unmountComponentAtNode(canvas);
|
|
240
|
+
}, [canvas]);
|
|
241
241
|
return /*#__PURE__*/React__namespace.createElement(reactNative.View, _extends({}, viewProps, {
|
|
242
242
|
ref: forwardedRef,
|
|
243
243
|
onLayout: onLayout,
|
|
@@ -246,15 +246,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
246
246
|
...style
|
|
247
247
|
}
|
|
248
248
|
}, bind), width > 0 && /*#__PURE__*/React__namespace.createElement(expoGl.GLView, {
|
|
249
|
-
|
|
250
|
-
if (nativeRef_EXPERIMENTAL && !nativeRef_EXPERIMENTAL.current) {
|
|
251
|
-
nativeRef_EXPERIMENTAL.current = ref;
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
onContextCreate: async gl => {
|
|
255
|
-
await (onContextCreate == null ? void 0 : onContextCreate(gl));
|
|
256
|
-
setContext(gl);
|
|
257
|
-
},
|
|
249
|
+
onContextCreate: onContextCreate,
|
|
258
250
|
style: reactNative.StyleSheet.absoluteFill
|
|
259
251
|
}));
|
|
260
252
|
});
|
|
@@ -276,315 +268,91 @@ const getAsset = input => {
|
|
|
276
268
|
default:
|
|
277
269
|
throw 'Invalid asset! Must be a URI or module.';
|
|
278
270
|
}
|
|
279
|
-
};
|
|
280
|
-
/**
|
|
281
|
-
* Downloads from a local URI and decodes into an ArrayBuffer.
|
|
282
|
-
*/
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const toBuffer = async localUri => expoFileSystem.readAsStringAsync(localUri, {
|
|
286
|
-
encoding: 'base64'
|
|
287
|
-
}).then(base64Arraybuffer.decode);
|
|
288
|
-
|
|
289
|
-
function loadingFn(extensions, onProgress) {
|
|
290
|
-
return function (Proto, ...input) {
|
|
291
|
-
// Construct new loader and run extensions
|
|
292
|
-
const loader = new Proto();
|
|
293
|
-
if (extensions) extensions(loader); // Go through the urls and load them
|
|
294
|
-
|
|
295
|
-
return Promise.all(input.map(entry => new Promise(async (res, reject) => {
|
|
296
|
-
var _parse, _ref;
|
|
297
|
-
|
|
298
|
-
// Construct URL
|
|
299
|
-
const url = typeof entry === 'string' ? loader.path + entry : entry; // There's no Image in native, so we create & pass a data texture instead
|
|
300
|
-
|
|
301
|
-
if (loader instanceof THREE__namespace.TextureLoader) {
|
|
302
|
-
const asset = await getAsset(url).downloadAsync();
|
|
303
|
-
const texture = new THREE__namespace.Texture();
|
|
304
|
-
texture.isDataTexture = true;
|
|
305
|
-
texture.image = {
|
|
306
|
-
data: asset,
|
|
307
|
-
width: asset.width,
|
|
308
|
-
height: asset.height
|
|
309
|
-
};
|
|
310
|
-
texture.needsUpdate = true;
|
|
311
|
-
return res(texture);
|
|
312
|
-
} // Do similar for CubeTextures
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
if (loader instanceof THREE__namespace.CubeTextureLoader) {
|
|
316
|
-
const texture = new THREE__namespace.CubeTexture();
|
|
317
|
-
texture.isDataTexture = true;
|
|
318
|
-
texture.images = await Promise.all(url.map(async src => {
|
|
319
|
-
const asset = await getAsset(src).downloadAsync();
|
|
320
|
-
return {
|
|
321
|
-
data: asset,
|
|
322
|
-
width: asset.width,
|
|
323
|
-
height: asset.height
|
|
324
|
-
};
|
|
325
|
-
}));
|
|
326
|
-
texture.needsUpdate = true;
|
|
327
|
-
return res(texture);
|
|
328
|
-
} // If asset is external and not an Image, load it
|
|
271
|
+
}; // Don't pre-process urls, let expo-asset generate an absolute URL
|
|
329
272
|
|
|
330
273
|
|
|
331
|
-
|
|
332
|
-
return loader.load(entry, data => {
|
|
333
|
-
if (data.scene) Object.assign(data, hooks.buildGraph(data.scene));
|
|
334
|
-
res(data);
|
|
335
|
-
}, onProgress, error => reject(`Could not load ${url}: ${error.message}`));
|
|
336
|
-
} // Otherwise, create a localUri and a file buffer
|
|
274
|
+
THREE__namespace.LoaderUtils.extractUrlBase = () => './'; // There's no Image in native, so create a data texture instead
|
|
337
275
|
|
|
338
276
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
} = await getAsset(url).downloadAsync();
|
|
342
|
-
const arrayBuffer = await toBuffer(localUri); // Parse it
|
|
343
|
-
|
|
344
|
-
const parsed = (_parse = (_ref = loader).parse) == null ? void 0 : _parse.call(_ref, arrayBuffer, undefined, data => {
|
|
345
|
-
if (data.scene) Object.assign(data, hooks.buildGraph(data.scene));
|
|
346
|
-
res(data);
|
|
347
|
-
}, error => reject(`Could not load ${url}: ${error.message}`)); // Respect synchronous parsers which don't have callbacks
|
|
348
|
-
|
|
349
|
-
if (parsed) return res(parsed);
|
|
350
|
-
})));
|
|
351
|
-
};
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
function useLoader(Proto, input, extensions, onProgress) {
|
|
355
|
-
// Use suspense to load async assets
|
|
356
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
357
|
-
const results = suspendReact.suspend(loadingFn(extensions, onProgress), [Proto, ...keys], {
|
|
358
|
-
equal: hooks.is.equ
|
|
359
|
-
}); // Return the object/s
|
|
360
|
-
|
|
361
|
-
return Array.isArray(input) ? results : results[0];
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
useLoader.preload = function (Proto, input, extensions) {
|
|
365
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
366
|
-
return suspendReact.preload(loadingFn(extensions), [Proto, ...keys]);
|
|
367
|
-
};
|
|
368
|
-
|
|
369
|
-
useLoader.clear = function (Proto, input) {
|
|
370
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
371
|
-
return suspendReact.clear([Proto, ...keys]);
|
|
372
|
-
};
|
|
277
|
+
THREE__namespace.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
|
|
278
|
+
const texture = new THREE__namespace.Texture(); // @ts-expect-error
|
|
373
279
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
reconciler,
|
|
381
|
-
applyProps
|
|
382
|
-
} = hooks.createRenderer(roots, getEventPriority);
|
|
383
|
-
|
|
384
|
-
const createRendererInstance = (gl, context) => {
|
|
385
|
-
// Create canvas shim
|
|
386
|
-
const canvas = {
|
|
387
|
-
width: context.drawingBufferWidth,
|
|
388
|
-
height: context.drawingBufferHeight,
|
|
389
|
-
style: {},
|
|
390
|
-
addEventListener: () => {},
|
|
391
|
-
removeEventListener: () => {},
|
|
392
|
-
clientHeight: context.drawingBufferHeight
|
|
393
|
-
}; // If a renderer is specified, return it
|
|
394
|
-
|
|
395
|
-
const customRenderer = typeof gl === 'function' ? gl(canvas, context) : gl;
|
|
396
|
-
if (hooks.isRenderer(customRenderer)) return customRenderer; // Create renderer and pass our canvas and its context
|
|
397
|
-
|
|
398
|
-
const renderer = new THREE__namespace.WebGLRenderer({
|
|
399
|
-
powerPreference: 'high-performance',
|
|
400
|
-
antialias: true,
|
|
401
|
-
alpha: true,
|
|
402
|
-
...gl,
|
|
403
|
-
canvas,
|
|
404
|
-
context
|
|
405
|
-
}); // Set color management
|
|
406
|
-
|
|
407
|
-
renderer.outputEncoding = THREE__namespace.sRGBEncoding;
|
|
408
|
-
renderer.toneMapping = THREE__namespace.ACESFilmicToneMapping; // Set GL props
|
|
409
|
-
|
|
410
|
-
if (gl) applyProps(renderer, gl); // Bind render to RN bridge
|
|
411
|
-
|
|
412
|
-
if (context.endFrameEXP) {
|
|
413
|
-
const renderFrame = renderer.render.bind(renderer);
|
|
414
|
-
|
|
415
|
-
renderer.render = (scene, camera) => {
|
|
416
|
-
renderFrame(scene, camera);
|
|
417
|
-
context.endFrameEXP();
|
|
280
|
+
texture.isDataTexture = true;
|
|
281
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
282
|
+
texture.image = {
|
|
283
|
+
data: asset,
|
|
284
|
+
width: asset.width,
|
|
285
|
+
height: asset.height
|
|
418
286
|
};
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
...props
|
|
440
|
-
} = {}) {
|
|
441
|
-
var _store;
|
|
442
|
-
|
|
443
|
-
let root = roots.get(context);
|
|
444
|
-
let fiber = root == null ? void 0 : root.fiber;
|
|
445
|
-
let store = root == null ? void 0 : root.store;
|
|
446
|
-
let state = (_store = store) == null ? void 0 : _store.getState();
|
|
447
|
-
|
|
448
|
-
if (fiber && state) {
|
|
449
|
-
// When a root was found, see if any fundamental props must be changed or exchanged
|
|
450
|
-
// Check size
|
|
451
|
-
if (state.size.width !== size.width || state.size.height !== size.height) state.setSize(size.width, size.height); // For some props we want to reset the entire root
|
|
452
|
-
// Changes to the color-space
|
|
453
|
-
|
|
454
|
-
const linearChanged = props.linear !== state.internal.lastProps.linear;
|
|
455
|
-
|
|
456
|
-
if (linearChanged) {
|
|
457
|
-
unmountComponentAtNode(context);
|
|
458
|
-
fiber = undefined;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
if (!fiber) {
|
|
463
|
-
// If no root has been found, make one
|
|
464
|
-
// Create gl
|
|
465
|
-
const glRenderer = createRendererInstance(gl, context); // Create store
|
|
466
|
-
|
|
467
|
-
store = hooks.createStore(applyProps, invalidate, advance, {
|
|
468
|
-
gl: glRenderer,
|
|
469
|
-
size,
|
|
470
|
-
...props,
|
|
471
|
-
// expo-gl can only render at native dpr/resolution
|
|
472
|
-
// https://github.com/expo/expo-three/issues/39
|
|
473
|
-
dpr: reactNative.PixelRatio.get()
|
|
474
|
-
});
|
|
475
|
-
const state = store.getState(); // Create renderer
|
|
476
|
-
|
|
477
|
-
fiber = reconciler.createContainer(store, constants.ConcurrentRoot, false, null); // Map it
|
|
478
|
-
|
|
479
|
-
roots.set(context, {
|
|
480
|
-
fiber,
|
|
481
|
-
store
|
|
482
|
-
}); // Store event manager internally and connect it
|
|
483
|
-
|
|
484
|
-
if (events) {
|
|
485
|
-
var _state$get$events$con, _state$get$events;
|
|
486
|
-
|
|
487
|
-
state.set({
|
|
488
|
-
events: events(store)
|
|
489
|
-
});
|
|
490
|
-
(_state$get$events$con = (_state$get$events = state.get().events).connect) == null ? void 0 : _state$get$events$con.call(_state$get$events, context);
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
if (store && fiber) {
|
|
495
|
-
reconciler.updateContainer( /*#__PURE__*/React__namespace.createElement(Provider, {
|
|
496
|
-
store: store,
|
|
497
|
-
element: element,
|
|
498
|
-
onCreated: onCreated
|
|
499
|
-
}), fiber, null, () => undefined);
|
|
500
|
-
return store;
|
|
501
|
-
} else {
|
|
502
|
-
throw 'Error creating root!';
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
function Provider({
|
|
507
|
-
store,
|
|
508
|
-
element,
|
|
509
|
-
onCreated
|
|
510
|
-
}) {
|
|
511
|
-
React__namespace.useEffect(() => {
|
|
512
|
-
const state = store.getState(); // Flag the canvas active, rendering will now begin
|
|
513
|
-
|
|
514
|
-
state.set(state => ({
|
|
515
|
-
internal: { ...state.internal,
|
|
516
|
-
active: true
|
|
517
|
-
}
|
|
518
|
-
})); // Notifiy that init is completed, the scene graph exists, but nothing has yet rendered
|
|
519
|
-
|
|
520
|
-
if (onCreated) onCreated(state); // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
521
|
-
}, []);
|
|
522
|
-
return /*#__PURE__*/React__namespace.createElement(hooks.context.Provider, {
|
|
523
|
-
value: store
|
|
524
|
-
}, element);
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
function unmountComponentAtNode(context, callback) {
|
|
528
|
-
const root = roots.get(context);
|
|
529
|
-
const fiber = root == null ? void 0 : root.fiber;
|
|
530
|
-
|
|
531
|
-
if (fiber) {
|
|
532
|
-
const state = root == null ? void 0 : root.store.getState();
|
|
533
|
-
if (state) state.internal.active = false;
|
|
534
|
-
reconciler.updateContainer(null, fiber, null, () => {
|
|
535
|
-
if (state) {
|
|
536
|
-
setTimeout(() => {
|
|
537
|
-
try {
|
|
538
|
-
var _state$gl, _state$gl$renderLists, _state$gl2;
|
|
539
|
-
|
|
540
|
-
state.events.disconnect == null ? void 0 : state.events.disconnect();
|
|
541
|
-
(_state$gl = state.gl) == null ? void 0 : (_state$gl$renderLists = _state$gl.renderLists) == null ? void 0 : _state$gl$renderLists.dispose == null ? void 0 : _state$gl$renderLists.dispose();
|
|
542
|
-
(_state$gl2 = state.gl) == null ? void 0 : _state$gl2.forceContextLoss == null ? void 0 : _state$gl2.forceContextLoss();
|
|
543
|
-
hooks.dispose(state);
|
|
544
|
-
roots.delete(context);
|
|
545
|
-
if (callback) callback(context);
|
|
546
|
-
} catch (e) {
|
|
547
|
-
/* ... */
|
|
548
|
-
}
|
|
549
|
-
}, 500);
|
|
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);
|
|
550
307
|
}
|
|
551
|
-
});
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
}
|
|
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
|
+
}
|
|
560
328
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
}
|
|
329
|
+
request.send(null);
|
|
330
|
+
this.manager.itemStart(url);
|
|
331
|
+
});
|
|
332
|
+
return request;
|
|
333
|
+
};
|
|
566
334
|
|
|
567
|
-
exports.ReactThreeFiber =
|
|
568
|
-
exports.
|
|
569
|
-
exports.
|
|
570
|
-
exports.
|
|
571
|
-
exports.
|
|
572
|
-
exports.
|
|
573
|
-
exports.
|
|
574
|
-
exports.
|
|
575
|
-
exports.
|
|
576
|
-
exports.
|
|
577
|
-
exports.
|
|
335
|
+
exports.ReactThreeFiber = index.threeTypes;
|
|
336
|
+
exports._roots = index.roots;
|
|
337
|
+
exports.act = index.act;
|
|
338
|
+
exports.addAfterEffect = index.addAfterEffect;
|
|
339
|
+
exports.addEffect = index.addEffect;
|
|
340
|
+
exports.addTail = index.addTail;
|
|
341
|
+
exports.advance = index.advance;
|
|
342
|
+
exports.applyProps = index.applyProps;
|
|
343
|
+
exports.context = index.context;
|
|
344
|
+
exports.createPortal = index.createPortal;
|
|
345
|
+
exports.createRoot = index.createRoot;
|
|
346
|
+
exports.dispose = index.dispose;
|
|
347
|
+
exports.extend = index.extend;
|
|
348
|
+
exports.invalidate = index.invalidate;
|
|
349
|
+
exports.reconciler = index.reconciler;
|
|
350
|
+
exports.render = index.render;
|
|
351
|
+
exports.unmountComponentAtNode = index.unmountComponentAtNode;
|
|
352
|
+
exports.useFrame = index.useFrame;
|
|
353
|
+
exports.useGraph = index.useGraph;
|
|
354
|
+
exports.useLoader = index.useLoader;
|
|
355
|
+
exports.useStore = index.useStore;
|
|
356
|
+
exports.useThree = index.useThree;
|
|
578
357
|
exports.Canvas = Canvas;
|
|
579
|
-
exports._roots = roots;
|
|
580
|
-
exports.act = act;
|
|
581
|
-
exports.advance = advance;
|
|
582
|
-
exports.applyProps = applyProps;
|
|
583
|
-
exports.createPortal = createPortal;
|
|
584
|
-
exports.createRoot = createRoot;
|
|
585
358
|
exports.events = createTouchEvents;
|
|
586
|
-
exports.invalidate = invalidate;
|
|
587
|
-
exports.reconciler = reconciler;
|
|
588
|
-
exports.render = render;
|
|
589
|
-
exports.unmountComponentAtNode = unmountComponentAtNode;
|
|
590
|
-
exports.useLoader = useLoader;
|