@babylonjs/react-native 1.3.1-preview → 1.3.3
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/EngineHook.js +39 -24
- package/EngineHook.js.map +1 -1
- package/README.md +5 -5
- package/package.json +1 -1
package/EngineHook.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import { Platform } from 'react-native';
|
|
3
3
|
import { PERMISSIONS, check, request } from 'react-native-permissions';
|
|
4
|
-
import { WebXRSessionManager, WebXRExperienceHelper, Color4, Tools } from '@babylonjs/core';
|
|
4
|
+
import { WebXRSessionManager, WebXRExperienceHelper, Color4, Tools, VideoTexture } from '@babylonjs/core';
|
|
5
5
|
import { ReactNativeEngine } from './ReactNativeEngine';
|
|
6
6
|
import * as base64 from 'base-64';
|
|
7
7
|
// These are errors that are normally thrown by WebXR's requestSession, so we should throw the same errors under similar circumstances so app code can be written the same for browser or native.
|
|
@@ -21,6 +21,32 @@ class DOMException {
|
|
|
21
21
|
get code() { return this.error; }
|
|
22
22
|
get name() { return DOMError[this.error]; }
|
|
23
23
|
}
|
|
24
|
+
// Requests the camera permission and throws if the permission could not be granted
|
|
25
|
+
async function requestCameraPermissionAsync() {
|
|
26
|
+
const cameraPermission = Platform.select({
|
|
27
|
+
android: PERMISSIONS.ANDROID.CAMERA,
|
|
28
|
+
ios: PERMISSIONS.IOS.CAMERA,
|
|
29
|
+
});
|
|
30
|
+
// Only Android, iOS and Windows are supported.
|
|
31
|
+
if (cameraPermission === undefined) {
|
|
32
|
+
throw new DOMException(DOMError.NotSupportedError);
|
|
33
|
+
}
|
|
34
|
+
// If the permission has not been granted yet, but also not been blocked, then request permission.
|
|
35
|
+
let permissionStatus = await check(cameraPermission);
|
|
36
|
+
if (permissionStatus == "denied") {
|
|
37
|
+
permissionStatus = await request(cameraPermission);
|
|
38
|
+
}
|
|
39
|
+
// If the permission has still not been granted, then throw an appropriate exception, otherwise continue with the actual XR session initialization.
|
|
40
|
+
switch (permissionStatus) {
|
|
41
|
+
case "unavailable":
|
|
42
|
+
throw new DOMException(DOMError.NotSupportedError);
|
|
43
|
+
case "denied":
|
|
44
|
+
case "blocked":
|
|
45
|
+
throw new DOMException(DOMError.SecurityError);
|
|
46
|
+
case "granted":
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
24
50
|
// Override the WebXRSessionManager.initializeSessionAsync to insert a camera permissions request. It would be cleaner to do this directly in the native XR implementation, but there are a couple problems with that:
|
|
25
51
|
// 1. React Native does not provide a way to hook into the permissions request result (at least on Android).
|
|
26
52
|
// 2. If it is done on the native side, then we need one implementation per platform.
|
|
@@ -32,29 +58,18 @@ class DOMException {
|
|
|
32
58
|
// The Spatial Perception capability should be enabled in the project's Package.appxmanifest.
|
|
33
59
|
return originalInitializeSessionAsync.apply(this, args);
|
|
34
60
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
// If the permission has still not been granted, then throw an appropriate exception, otherwise continue with the actual XR session initialization.
|
|
49
|
-
switch (permissionStatus) {
|
|
50
|
-
case "unavailable":
|
|
51
|
-
throw new DOMException(DOMError.NotSupportedError);
|
|
52
|
-
case "denied":
|
|
53
|
-
case "blocked":
|
|
54
|
-
throw new DOMException(DOMError.SecurityError);
|
|
55
|
-
case "granted":
|
|
56
|
-
return originalInitializeSessionAsync.apply(this, args);
|
|
57
|
-
}
|
|
61
|
+
await requestCameraPermissionAsync();
|
|
62
|
+
return originalInitializeSessionAsync.apply(this, args);
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Override the VideoTexture.CreateFromWebCamAsync to insert a camera permissions request. It would be cleaner to do this directly in the NativeCamera implementation, but there are a couple problems with that:
|
|
66
|
+
// 1. React Native does not provide a way to hook into the permissions request result (at least on Android).
|
|
67
|
+
// 2. If it is done on the native side, then we need one implementation per platform.
|
|
68
|
+
{
|
|
69
|
+
const originalCreateFromWebCamAsync = VideoTexture.CreateFromWebCamAsync;
|
|
70
|
+
VideoTexture.CreateFromWebCamAsync = async function (...args) {
|
|
71
|
+
await requestCameraPermissionAsync();
|
|
72
|
+
return originalCreateFromWebCamAsync.apply(this, args);
|
|
58
73
|
};
|
|
59
74
|
}
|
|
60
75
|
if (Platform.OS === "android" || Platform.OS === "ios") {
|
package/EngineHook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EngineHook.js","sourceRoot":"","sources":["../../Modules/@babylonjs/react-native/EngineHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAU,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"EngineHook.js","sourceRoot":"","sources":["../../Modules/@babylonjs/react-native/EngineHook.ts"],"names":[],"mappings":"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"}
|
package/README.md
CHANGED
|
@@ -22,11 +22,11 @@ The minimum deployment target version is 12. This must be set as `iOS Deployment
|
|
|
22
22
|
|
|
23
23
|
Babylon React Native platform native packages must also be installed for the platforms and React Native versions being targeted. This is only needed for ***apps*** using Babylon React Native, not for ***libraries (React Native packages)*** building on top of Babylon React Native.
|
|
24
24
|
|
|
25
|
-
| | React Native 0.63 - 0.64 | React Native 0.65 - 0.66 |
|
|
26
|
-
| ------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
27
|
-
| Android | [@babylonjs/react-native-iosandroid-0-64](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-64) | [@babylonjs/react-native-iosandroid-0-65](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-65) |
|
|
28
|
-
| iOS | [@babylonjs/react-native-iosandroid-0-64](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-64) | [@babylonjs/react-native-iosandroid-0-65](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-65) |
|
|
29
|
-
| Windows | [@babylonjs/react-native-windows-0-64](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-64) | [@babylonjs/react-native-windows-0-65](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-65) |
|
|
25
|
+
| | React Native 0.63 - 0.64 | React Native 0.65 - 0.66 | React Native 0.69 |
|
|
26
|
+
| ------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
27
|
+
| Android | [@babylonjs/react-native-iosandroid-0-64](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-64) | [@babylonjs/react-native-iosandroid-0-65](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-65) | [@babylonjs/react-native-iosandroid-0-69](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-69) |
|
|
28
|
+
| iOS | [@babylonjs/react-native-iosandroid-0-64](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-64) | [@babylonjs/react-native-iosandroid-0-65](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-65) | [@babylonjs/react-native-iosandroid-0-69](https://www.npmjs.com/package/@babylonjs/react-native-iosandroid-0-69) |
|
|
29
|
+
| Windows | [@babylonjs/react-native-windows-0-64](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-64) | [@babylonjs/react-native-windows-0-65](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-65) | [@babylonjs/react-native-windows-0-69](https://www.npmjs.com/package/@babylonjs/react-native-windows-0-69) |
|
|
30
30
|
|
|
31
31
|
### `useEngine`
|
|
32
32
|
|