瀏覽代碼

Fix camera dispose when using rigProcesses
Add type to onVRDisplayChangedObservable
Prevent onVRDisplayChangedObservable to be called twice

David Catuhe 8 年之前
父節點
當前提交
93150f55c0

文件差異過大導致無法顯示
+ 974 - 971
dist/preview release/babylon.d.ts


文件差異過大導致無法顯示
+ 35 - 35
dist/preview release/babylon.js


+ 20 - 3
dist/preview release/babylon.max.js

@@ -15568,9 +15568,20 @@ var BABYLON;
                 this._rigCameras.pop().dispose();
             }
             // Postprocesses
-            var i = this._postProcesses.length;
-            while (--i >= 0) {
-                this._postProcesses[i].dispose(this);
+            if (this._rigPostProcess) {
+                this._rigPostProcess.dispose(this);
+                this._rigPostProcess = null;
+                this._postProcesses = [];
+            }
+            else if (this.cameraRigMode !== Camera.RIG_MODE_NONE) {
+                this._rigPostProcess = null;
+                this._postProcesses = [];
+            }
+            else {
+                var i = this._postProcesses.length;
+                while (--i >= 0) {
+                    this._postProcesses[i].dispose(this);
+                }
             }
             // Render targets
             var i = this.customRenderTargets.length;
@@ -15616,6 +15627,9 @@ var BABYLON;
             return this._rigCameras[1].getTarget();
         };
         Camera.prototype.setCameraRigMode = function (mode, rigParams) {
+            if (this.cameraRigMode === mode) {
+                return;
+            }
             while (this._rigCameras.length > 0) {
                 this._rigCameras.pop().dispose();
             }
@@ -67178,6 +67192,9 @@ var BABYLON;
             } };
             engine.onVRRequestPresentComplete.add(_this._onVREnabled);
             engine.initWebVR().add(function (event) {
+                if (_this._vrDevice === event.vrDisplay) {
+                    return;
+                }
                 _this._vrDevice = event.vrDisplay;
                 //reset the rig parameters.
                 _this.setCameraRigMode(BABYLON.Camera.RIG_MODE_WEBVR, { parentCamera: _this, vrDisplay: _this._vrDevice, frameData: _this._frameData, specs: _this._specsVersion });

文件差異過大導致無法顯示
+ 974 - 971
dist/preview release/babylon.module.d.ts


文件差異過大導致無法顯示
+ 35 - 35
dist/preview release/babylon.worker.js


文件差異過大導致無法顯示
+ 5278 - 5275
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts


文件差異過大導致無法顯示
+ 35 - 35
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js


+ 20 - 3
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js

@@ -15568,9 +15568,20 @@ var BABYLON;
                 this._rigCameras.pop().dispose();
             }
             // Postprocesses
-            var i = this._postProcesses.length;
-            while (--i >= 0) {
-                this._postProcesses[i].dispose(this);
+            if (this._rigPostProcess) {
+                this._rigPostProcess.dispose(this);
+                this._rigPostProcess = null;
+                this._postProcesses = [];
+            }
+            else if (this.cameraRigMode !== Camera.RIG_MODE_NONE) {
+                this._rigPostProcess = null;
+                this._postProcesses = [];
+            }
+            else {
+                var i = this._postProcesses.length;
+                while (--i >= 0) {
+                    this._postProcesses[i].dispose(this);
+                }
             }
             // Render targets
             var i = this.customRenderTargets.length;
@@ -15616,6 +15627,9 @@ var BABYLON;
             return this._rigCameras[1].getTarget();
         };
         Camera.prototype.setCameraRigMode = function (mode, rigParams) {
+            if (this.cameraRigMode === mode) {
+                return;
+            }
             while (this._rigCameras.length > 0) {
                 this._rigCameras.pop().dispose();
             }
@@ -67178,6 +67192,9 @@ var BABYLON;
             } };
             engine.onVRRequestPresentComplete.add(_this._onVREnabled);
             engine.initWebVR().add(function (event) {
+                if (_this._vrDevice === event.vrDisplay) {
+                    return;
+                }
                 _this._vrDevice = event.vrDisplay;
                 //reset the rig parameters.
                 _this.setCameraRigMode(BABYLON.Camera.RIG_MODE_WEBVR, { parentCamera: _this, vrDisplay: _this._vrDevice, frameData: _this._frameData, specs: _this._specsVersion });

文件差異過大導致無法顯示
+ 5278 - 5275
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.module.d.ts


+ 3 - 0
src/Cameras/VR/babylon.webVRCamera.ts

@@ -99,6 +99,9 @@ module BABYLON {
             this._onVREnabled = (success: boolean) => { if (success) { this.initControllers(); } };
             engine.onVRRequestPresentComplete.add(this._onVREnabled);
             engine.initWebVR().add((event: IDisplayChangedEventArgs) => {
+                if (this._vrDevice === event.vrDisplay) {
+                    return;
+                }
 
                 this._vrDevice = event.vrDisplay;
 

+ 17 - 3
src/Cameras/babylon.camera.ts

@@ -609,9 +609,19 @@
             }
 
             // Postprocesses
-            var i = this._postProcesses.length;
-            while (--i >= 0) {
-                this._postProcesses[i].dispose(this);
+            if (this._rigPostProcess) {
+                this._rigPostProcess.dispose(this);
+                this._rigPostProcess = null;
+                this._postProcesses = [];
+            }
+            else if (this.cameraRigMode !== Camera.RIG_MODE_NONE) {
+                this._rigPostProcess = null;
+                this._postProcesses = [];
+            } else {
+                var i = this._postProcesses.length;
+                while (--i >= 0) {
+                    this._postProcesses[i].dispose(this);
+                }
             }
 
             // Render targets
@@ -657,6 +667,10 @@
         }
 
         public setCameraRigMode(mode: number, rigParams: any): void {
+            if (this.cameraRigMode === mode) {
+                return;
+            }
+
             while (this._rigCameras.length > 0) {
                 this._rigCameras.pop().dispose();
             }

+ 1 - 1
src/babylon.engine.ts

@@ -1598,7 +1598,7 @@
             return this._vrDisplay;
         }
 
-        public initWebVR(): Observable<any> {
+        public initWebVR(): Observable<{vrDisplay: any, vrSupported: any}> {
             var notifyObservers = () => {
                 var eventArgs = {
                     vrDisplay: this._vrDisplay,