소스 검색

Minor refactor to contain native notions more effectively.

Justin Murray 5 년 전
부모
커밋
412defdfdb
2개의 변경된 파일16개의 추가작업 그리고 17개의 파일을 삭제
  1. 2 8
      src/Cameras/XR/webXRDefaultExperience.ts
  2. 14 9
      src/Cameras/XR/webXRSessionManager.ts

+ 2 - 8
src/Cameras/XR/webXRDefaultExperience.ts

@@ -4,7 +4,6 @@ import { WebXRInput } from './webXRInput';
 import { WebXRControllerModelLoader } from './webXRControllerModelLoader';
 import { WebXRControllerPointerSelection } from './webXRControllerPointerSelection';
 import { WebXRControllerTeleportation } from './webXRControllerTeleportation';
-import { WebXRManagedOutputCanvas } from './webXRManagedOutputCanvas';
 import { WebXROutputTarget } from './webXROutputTarget';
 import { WebXREnterExitUI } from './webXREnterExitUI';
 import { AbstractMesh } from '../../Meshes/abstractMesh';
@@ -79,13 +78,8 @@ export class WebXRDefaultExperience {
                 result.teleportation = new WebXRControllerTeleportation(result.input, options.floorMeshes);
             }
 
-            if (result.baseExperience.sessionManager.supportsWebXRNativeOutputTarget()) {
-                // Create the WebXR output for native experiences.
-                result.outputTarget = result.baseExperience.sessionManager.getWebXRNativeOutputTarget();
-            } else {
-                // Create output canvas manager (this controls where the xr frames will be rendered)
-                result.outputTarget = new WebXRManagedOutputCanvas(xrHelper, scene.getEngine().getRenderingCanvas() as HTMLCanvasElement);
-            }
+            // Create the WebXR output target
+            result.outputTarget = result.baseExperience.sessionManager.getWebXROutputTarget(xrHelper);
 
             if (!options.disableDefaultUI) {
                 // Create ui for entering/exiting xr

+ 14 - 9
src/Cameras/XR/webXRSessionManager.ts

@@ -5,6 +5,8 @@ import { IDisposable, Scene } from "../../scene";
 import { InternalTexture } from "../../Materials/Textures/internalTexture";
 import { RenderTargetTexture } from "../../Materials/Textures/renderTargetTexture";
 import { WebXROutputTarget } from './webXROutputTarget';
+import { WebXRExperienceHelper } from '../../Legacy/legacy';
+import { WebXRManagedOutputCanvas } from './webXRManagedOutputCanvas';
 
 interface IRenderTargetProvider {
     getRenderTargetForEye(eye: XREye): RenderTargetTexture;
@@ -185,7 +187,8 @@ export class WebXRSessionManager implements IDisposable {
     public supportsSessionAsync(sessionMode: XRSessionMode) {
         if (!(navigator as any).xr || !(navigator as any).xr.supportsSession) {
             return Promise.resolve(false);
-        } else {
+        }
+        else {
             return (navigator as any).xr.supportsSession(sessionMode).then(() => {
                 return Promise.resolve(true);
             }).catch((e: any) => {
@@ -196,15 +199,17 @@ export class WebXRSessionManager implements IDisposable {
     }
 
     /**
-     * Checks whether the getWebXRNativeOutputTarget() API is supported
-     * @returns true if getWebXRNativeOutputTarget() can be called, false otherwise
+     * Creates a WebXROutputTarget object for the XR session
+     * @param xrHelper optional, helper class for event management, used only for Web scenarios
+     * @returns a WebXR output target to which the session can render
      */
-    public supportsWebXRNativeOutputTarget() : boolean {
-        return this._xrNavigator.xr.native;
-    }
-
-    public getWebXRNativeOutputTarget() : WebXROutputTarget {
-        return this._xrNavigator.xr.getWebXROutputTarget(this.scene.getEngine());
+    public getWebXROutputTarget(xrHelper?: WebXRExperienceHelper) : WebXROutputTarget {
+        if (this._xrNavigator.xr.native) {
+            return this._xrNavigator.xr.getWebXROutputTarget(this.scene.getEngine());
+        }
+        else {
+            return new WebXRManagedOutputCanvas(xrHelper!, this.scene.getEngine().getRenderingCanvas() as HTMLCanvasElement);
+        }
     }
 
     /**