浏览代码

address review comments

Chris Barth 4 年之前
父节点
当前提交
f4c990c6af

+ 5 - 1
src/LibDeclarations/webxr.d.ts

@@ -152,6 +152,10 @@ interface XRInputSourceEvent extends Event {
 
 type XRInputSourceArray = XRInputSource[];
 
+interface XRWorldTrackingStateOptions {
+    planeDetectionState?: { enabled: boolean };
+};
+
 interface XRSession {
     addEventListener(type: XREventType, listener: XREventHandler, options?: boolean | AddEventListenerOptions): void;
     removeEventListener(type: XREventType, listener: XREventHandler, options?: boolean | EventListenerOptions): void;
@@ -213,7 +217,7 @@ interface XRSession {
     requestHitTest?(ray: XRRay, referenceSpace: XRReferenceSpace): Promise<XRHitResult[]>;
 
     // legacy plane detection
-    updateWorldTrackingState?(options: { planeDetectionState?: { enabled: boolean } }): void;
+    updateWorldTrackingState?(options: XRWorldTrackingStateOptions): void;
 }
 
 interface XRViewerPose extends XRPose {

+ 5 - 8
src/LibDeclarations/webxr.nativeextensions.d.ts

@@ -2,7 +2,7 @@
 // They are intended for use with either Babylon Native https://github.com/BabylonJS/BabylonNative or
 // Babylon React Native: https://github.com/BabylonJS/BabylonReactNative
 
-type XRGeometryType = "unknown" | "background" | "wall" | "floor" | "ceiling" | "platform";
+type XRSceneObjectType = "unknown" | "background" | "wall" | "floor" | "ceiling" | "platform";
 
 interface XRFieldOfView {
     angleLeft: number;
@@ -19,9 +19,8 @@ interface XRFrustum {
 }
 
 interface XRPlane {
-    // Open question: Should parent geometry id's and types be declared on XRPlanes or queried through other means?
-    parentGeometryId?: number;
-    parentGeometryType?: XRWorldGeometryType;
+    parentSceneObjectId?: number;
+    parentSceneObjectType?: XRSceneObjectType;
 }
 
 interface XRMesh {
@@ -30,10 +29,8 @@ interface XRMesh {
     indices: Uint32Array;
     normals?: Float32Array;
     lastChangedTime: number;
-
-    // Open question: Should parent geometry id's and types be declared on XRMeshes or queried through other means?
-    parentGeometryId?: number;
-    parentGeometryType?: XRGeometryType;
+    parentSceneObjectId?: number;
+    parentSceneObjectType?: XRSceneObjectType;
 }
 
 type XRDetectionBoundaryType = "frustum" | "sphere" | "box";

+ 12 - 7
src/XR/features/WebXRMeshDetector.ts

@@ -107,7 +107,9 @@ export class WebXRMeshDetector extends WebXRAbstractFeature {
             return false;
         }
 
-        if (!!this._xrSessionManager.session.trySetMeshDetectorEnabled) {
+        // Only supported by BabylonNative
+        if (!!this._xrSessionManager.isNativeSession() &&
+            !!this._xrSessionManager.session.trySetMeshDetectorEnabled) {
             this._xrSessionManager.session.trySetMeshDetectorEnabled(false);
         }
 
@@ -173,13 +175,16 @@ export class WebXRMeshDetector extends WebXRAbstractFeature {
     }
 
     private _init() {
-        if (!!this._xrSessionManager.session.trySetMeshDetectorEnabled) {
-            this._xrSessionManager.session.trySetMeshDetectorEnabled(true);
-        }
+        // Only supported by BabylonNative
+        if (!!this._xrSessionManager.isNativeSession()) {
+            if (!!this._xrSessionManager.session.trySetMeshDetectorEnabled) {
+                this._xrSessionManager.session.trySetMeshDetectorEnabled(true);
+            }
 
-        if (!!this._options.preferredDetectorOptions &&
-            !!this._xrSessionManager.session.trySetPreferredMeshDetectorOptions) {
-            this._xrSessionManager.session.trySetPreferredMeshDetectorOptions(this._options.preferredDetectorOptions);
+            if (!!this._options.preferredDetectorOptions &&
+                !!this._xrSessionManager.session.trySetPreferredMeshDetectorOptions) {
+                this._xrSessionManager.session.trySetPreferredMeshDetectorOptions(this._options.preferredDetectorOptions);
+            }
         }
     }
 

+ 4 - 2
src/XR/features/WebXRPlaneDetector.ts

@@ -198,9 +198,11 @@ export class WebXRPlaneDetector extends WebXRAbstractFeature {
             }
         };
 
-        if (!!this._options.preferredDetectorOptions &&
+        // Only supported by BabylonNative
+        if (!!this._xrSessionManager.isNativeSession() &&
+            !!this._options.preferredDetectorOptions &&
             !!this._xrSessionManager.session.trySetPreferredPlaneDetectorOptions) {
-                this._xrSessionManager.session.trySetPreferredPlaneDetectorOptions(this._options.preferredDetectorOptions);
+            this._xrSessionManager.session.trySetPreferredPlaneDetectorOptions(this._options.preferredDetectorOptions);
         }
 
         if (!this._xrSessionManager.session.updateWorldTrackingState) {

+ 7 - 0
src/XR/webXRSessionManager.ts

@@ -332,6 +332,13 @@ export class WebXRSessionManager implements IDisposable {
         }
     }
 
+    /**
+     * Returns true if the session's backend is BabylonNative, otherwise false
+     */
+    public isNativeSession(): boolean {
+        return this._xrNavigator.xr.native ?? false;
+    }
+
     private _createRenderTargetTexture(width: number, height: number, framebuffer: Nullable<WebGLFramebuffer> = null) {
         // Create internal texture
         var internalTexture = new InternalTexture(this.scene.getEngine(), InternalTextureSource.Unknown, true);