Sfoglia il codice sorgente

Render loop for XR is looping, though not yet rendering.

Justin Murray 5 anni fa
parent
commit
513040dd69
2 ha cambiato i file con 11 aggiunte e 4 eliminazioni
  1. 4 2
      src/Cameras/XR/webXRSessionManager.ts
  2. 7 2
      src/Engines/nativeEngine.ts

+ 4 - 2
src/Cameras/XR/webXRSessionManager.ts

@@ -146,11 +146,13 @@ export class WebXRSessionManager implements IDisposable {
             // Create render target texture from xr's webgl render target
             this._rttProvider = new RenderTargetProvider(WebXRSessionManager._CreateRenderTargetTextureFromSession(this.session, this.scene, this.baseLayer!));
         } else {
-            this._rttProvider = this._xrNavigator.xr.getNativeRenderTargetProvider(this.session);
+            this._rttProvider = this._xrNavigator.xr.getNativeRenderTargetProvider(this.session, (width: number, height: number) => {
+                this.scene.getEngine().createRenderTargetTexture({ width: width, height: height }, false);
+            });
         }
 
         // Stop window's animation frame and trigger sessions animation frame
-        window.cancelAnimationFrame(this.scene.getEngine()._frameHandler);
+        if (window.cancelAnimationFrame) { window.cancelAnimationFrame(this.scene.getEngine()._frameHandler); }
         this.scene.getEngine()._renderLoop();
         return Promise.resolve();
     }

+ 7 - 2
src/Engines/nativeEngine.ts

@@ -82,6 +82,7 @@ interface INativeEngine {
     deleteTexture(texture: Nullable<WebGLTexture>): void;
 
     createFrameBuffer(texture: WebGLTexture, width: number, height: number, format: number, samplingMode: number, generateStencilBuffer: boolean, generateDepthBuffer: boolean, generateMipMaps: boolean): WebGLFramebuffer;
+    deleteFrameBuffer(frameBuffer: WebGLFramebuffer): void;
     bindFrameBuffer(frameBuffer: WebGLFramebuffer): void;
     unbindFrameBuffer(frameBuffer: WebGLFramebuffer): void;
 
@@ -240,8 +241,12 @@ export class NativeEngine extends Engine {
      * Can be used to override the current requestAnimationFrame requester.
      * @hidden
      */
-    protected _queueNewFrame(bindedRenderFunction: any, requester: any): number {
-        this._native.requestAnimationFrame(bindedRenderFunction);
+    protected _queueNewFrame(bindedRenderFunction: any, requester?: any): number {
+        if (requester.requestAnimationFrame) {
+            requester.requestAnimationFrame(bindedRenderFunction);
+        } else {
+            this._native.requestAnimationFrame(bindedRenderFunction);
+        }
         return 0;
     }