Bläddra i källkod

Merge pull request #9853 from kainino0x/xr-framebuffer-resize

Handle changes in XRWebGLLayer framebuffer size
Raanan Weber 4 år sedan
förälder
incheckning
fc26753ae9
1 ändrade filer med 15 tillägg och 2 borttagningar
  1. 15 2
      src/XR/webXRSessionManager.ts

+ 15 - 2
src/XR/webXRSessionManager.ts

@@ -238,8 +238,21 @@ export class WebXRSessionManager implements IDisposable {
             this._rttProvider = this._xrNavigator.xr.getNativeRenderTargetProvider(this.session, this._createRenderTargetTexture.bind(this));
         } else {
             // Create render target texture from xr's webgl render target
-            const rtt = this._createRenderTargetTexture(this.baseLayer!.framebufferWidth, this.baseLayer!.framebufferHeight, this.baseLayer!.framebuffer);
-            this._rttProvider = { getRenderTargetForEye: () => rtt };
+            let rtt: RenderTargetTexture, framebufferWidth: number, framebufferHeight: number, framebuffer: WebGLFramebuffer;
+            this._rttProvider = {
+                getRenderTargetForEye: () => {
+                    const baseLayer = this.baseLayer!;
+                    if (baseLayer.framebufferWidth !== framebufferWidth ||
+                        baseLayer.framebufferHeight !== framebufferHeight ||
+                        baseLayer.framebuffer !== framebuffer) {
+                        rtt = this._createRenderTargetTexture(baseLayer.framebufferWidth, baseLayer.framebufferHeight, baseLayer.framebuffer);
+                        framebufferWidth = baseLayer.framebufferWidth;
+                        framebufferHeight = baseLayer.framebufferHeight;
+                        framebuffer = baseLayer.framebuffer;
+                    }
+                    return rtt;
+                },
+            };
             engine.framebufferDimensionsObject = this.baseLayer;
         }