Browse Source

Check length of XR input sources

If length is not checked, then if the `XRSession` returns a valid empty array for `inputSources`, a new event listener will be added to the session manager every XR frame. According to [the spec](https://immersive-web.github.io/webxr/#list-of-active-xr-input-sources), it appears that this valid-but-empty scenario can (and perhaps must) occur.
Justin Murray 5 years ago
parent
commit
8e439f5b38
1 changed files with 2 additions and 2 deletions
  1. 2 2
      src/Cameras/XR/webXRInput.ts

+ 2 - 2
src/Cameras/XR/webXRInput.ts

@@ -47,7 +47,7 @@ export class WebXRInput implements IDisposable {
             }
             }
 
 
             // Start listing to input add/remove event
             // Start listing to input add/remove event
-            if (this.controllers.length == 0 && baseExperience.sessionManager.session.inputSources) {
+            if (this.controllers.length == 0 && baseExperience.sessionManager.session.inputSources && baseExperience.sessionManager.session.inputSources.length > 0) {
                 this._addAndRemoveControllers(baseExperience.sessionManager.session.inputSources, []);
                 this._addAndRemoveControllers(baseExperience.sessionManager.session.inputSources, []);
                 baseExperience.sessionManager.session.addEventListener("inputsourceschange", this._onInputSourcesChange);
                 baseExperience.sessionManager.session.addEventListener("inputsourceschange", this._onInputSourcesChange);
             }
             }
@@ -103,4 +103,4 @@ export class WebXRInput implements IDisposable {
         this.baseExperience.sessionManager.onXRFrameObservable.remove(this._frameObserver);
         this.baseExperience.sessionManager.onXRFrameObservable.remove(this._frameObserver);
         this.baseExperience.onStateChangedObservable.remove(this._stateObserver);
         this.baseExperience.onStateChangedObservable.remove(this._stateObserver);
     }
     }
-}
+}