소스 검색

Fix issue when detaching pipelines

David Catuhe 7 년 전
부모
커밋
c7337c7241

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8844 - 8844
dist/preview release/babylon.d.ts


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 35 - 35
dist/preview release/babylon.js


+ 15 - 33
dist/preview release/babylon.max.js

@@ -15804,31 +15804,12 @@ var BABYLON;
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated            
             return this._postProcesses.indexOf(postProcess);
         };
-        Camera.prototype.detachPostProcess = function (postProcess, atIndices) {
-            if (atIndices === void 0) { atIndices = null; }
-            var result = [];
-            var i;
-            var index;
-            if (!atIndices) {
-                var idx = this._postProcesses.indexOf(postProcess);
-                if (idx !== -1) {
-                    this._postProcesses.splice(idx, 1);
-                }
-            }
-            else {
-                atIndices = (atIndices instanceof Array) ? atIndices : [atIndices];
-                // iterate descending, so can just splice as we go
-                for (i = atIndices.length - 1; i >= 0; i--) {
-                    if (this._postProcesses[atIndices[i]] !== postProcess) {
-                        result.push(i);
-                        continue;
-                    }
-                    index = atIndices[i];
-                    this._postProcesses.splice(index, 1);
-                }
+        Camera.prototype.detachPostProcess = function (postProcess) {
+            var idx = this._postProcesses.indexOf(postProcess);
+            if (idx !== -1) {
+                this._postProcesses.splice(idx, 1);
             }
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated
-            return result;
         };
         Camera.prototype.getWorldMatrix = function () {
             if (!this._worldMatrix) {
@@ -56222,8 +56203,8 @@ var BABYLON;
             this._name = name;
             this._singleInstance = singleInstance || true;
             this._getPostProcess = getPostProcess;
-            this._cameras = [];
-            this._indicesForCamera = [];
+            this._cameras = {};
+            this._indicesForCamera = {};
             this._postProcesses = {};
             this._renderPasses = {};
             this._renderEffectAsPasses = {};
@@ -56287,7 +56268,7 @@ var BABYLON;
                     this._indicesForCamera[cameraName] = [];
                 }
                 this._indicesForCamera[cameraName].push(index);
-                if (this._cameras.indexOf(camera) === -1) {
+                if (!this._cameras[cameraName]) {
                     this._cameras[cameraName] = camera;
                 }
                 for (var passName in this._renderPasses) {
@@ -56301,10 +56282,11 @@ var BABYLON;
             for (var i = 0; i < _cam.length; i++) {
                 var camera = _cam[i];
                 var cameraName = camera.name;
-                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName]);
-                var index = this._cameras.indexOf(cameraName);
-                this._indicesForCamera.splice(index, 1);
-                this._cameras.splice(index, 1);
+                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName]);
+                if (this._cameras[cameraName]) {
+                    //this._indicesForCamera.splice(index, 1);
+                    this._cameras[cameraName] = null;
+                }
                 for (var passName in this._renderPasses) {
                     this._renderPasses[passName]._decRefCount();
                 }
@@ -56330,7 +56312,7 @@ var BABYLON;
             for (var i = 0; i < _cam.length; i++) {
                 var camera = _cam[i];
                 var cameraName = camera.Name;
-                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName]);
+                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName]);
                 for (var passName in this._renderPasses) {
                     this._renderPasses[passName]._decRefCount();
                 }
@@ -56377,7 +56359,7 @@ var BABYLON;
         function PostProcessRenderPipeline(engine, name) {
             this._engine = engine;
             this._name = name;
-            this._renderEffects = new Array();
+            this._renderEffects = {};
             this._renderEffectsForIsolatedPass = new Array();
             this._cameras = [];
         }
@@ -56512,7 +56494,7 @@ var BABYLON;
             }
         };
         PostProcessRenderPipeline.prototype._reset = function () {
-            this._renderEffects = new Array();
+            this._renderEffects = {};
             this._renderEffectsForIsolatedPass = new Array();
         };
         PostProcessRenderPipeline.prototype.dispose = function () {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8844 - 8844
dist/preview release/babylon.module.d.ts


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 35 - 35
dist/preview release/babylon.worker.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 7391 - 7391
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 35 - 35
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js


+ 15 - 33
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js

@@ -15804,31 +15804,12 @@ var BABYLON;
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated            
             return this._postProcesses.indexOf(postProcess);
         };
-        Camera.prototype.detachPostProcess = function (postProcess, atIndices) {
-            if (atIndices === void 0) { atIndices = null; }
-            var result = [];
-            var i;
-            var index;
-            if (!atIndices) {
-                var idx = this._postProcesses.indexOf(postProcess);
-                if (idx !== -1) {
-                    this._postProcesses.splice(idx, 1);
-                }
-            }
-            else {
-                atIndices = (atIndices instanceof Array) ? atIndices : [atIndices];
-                // iterate descending, so can just splice as we go
-                for (i = atIndices.length - 1; i >= 0; i--) {
-                    if (this._postProcesses[atIndices[i]] !== postProcess) {
-                        result.push(i);
-                        continue;
-                    }
-                    index = atIndices[i];
-                    this._postProcesses.splice(index, 1);
-                }
+        Camera.prototype.detachPostProcess = function (postProcess) {
+            var idx = this._postProcesses.indexOf(postProcess);
+            if (idx !== -1) {
+                this._postProcesses.splice(idx, 1);
             }
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated
-            return result;
         };
         Camera.prototype.getWorldMatrix = function () {
             if (!this._worldMatrix) {
@@ -56222,8 +56203,8 @@ var BABYLON;
             this._name = name;
             this._singleInstance = singleInstance || true;
             this._getPostProcess = getPostProcess;
-            this._cameras = [];
-            this._indicesForCamera = [];
+            this._cameras = {};
+            this._indicesForCamera = {};
             this._postProcesses = {};
             this._renderPasses = {};
             this._renderEffectAsPasses = {};
@@ -56287,7 +56268,7 @@ var BABYLON;
                     this._indicesForCamera[cameraName] = [];
                 }
                 this._indicesForCamera[cameraName].push(index);
-                if (this._cameras.indexOf(camera) === -1) {
+                if (!this._cameras[cameraName]) {
                     this._cameras[cameraName] = camera;
                 }
                 for (var passName in this._renderPasses) {
@@ -56301,10 +56282,11 @@ var BABYLON;
             for (var i = 0; i < _cam.length; i++) {
                 var camera = _cam[i];
                 var cameraName = camera.name;
-                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName]);
-                var index = this._cameras.indexOf(cameraName);
-                this._indicesForCamera.splice(index, 1);
-                this._cameras.splice(index, 1);
+                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName]);
+                if (this._cameras[cameraName]) {
+                    //this._indicesForCamera.splice(index, 1);
+                    this._cameras[cameraName] = null;
+                }
                 for (var passName in this._renderPasses) {
                     this._renderPasses[passName]._decRefCount();
                 }
@@ -56330,7 +56312,7 @@ var BABYLON;
             for (var i = 0; i < _cam.length; i++) {
                 var camera = _cam[i];
                 var cameraName = camera.Name;
-                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName]);
+                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName]);
                 for (var passName in this._renderPasses) {
                     this._renderPasses[passName]._decRefCount();
                 }
@@ -56377,7 +56359,7 @@ var BABYLON;
         function PostProcessRenderPipeline(engine, name) {
             this._engine = engine;
             this._name = name;
-            this._renderEffects = new Array();
+            this._renderEffects = {};
             this._renderEffectsForIsolatedPass = new Array();
             this._cameras = [];
         }
@@ -56512,7 +56494,7 @@ var BABYLON;
             }
         };
         PostProcessRenderPipeline.prototype._reset = function () {
-            this._renderEffects = new Array();
+            this._renderEffects = {};
             this._renderEffectsForIsolatedPass = new Array();
         };
         PostProcessRenderPipeline.prototype.dispose = function () {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 7391 - 7391
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.module.d.ts


+ 4 - 23
src/Cameras/babylon.camera.ts

@@ -364,7 +364,6 @@
 
             if (insertAt == null || insertAt < 0) {
                 this._postProcesses.push(postProcess);
-
             } else {
                 this._postProcesses.splice(insertAt, 0, postProcess);
             }
@@ -372,30 +371,12 @@
             return this._postProcesses.indexOf(postProcess);
         }
 
-        public detachPostProcess(postProcess: PostProcess, atIndices: any = null): number[] {
-            var result = [];
-            var i: number;
-            var index: number;
-
-            if (!atIndices) {
-                var idx = this._postProcesses.indexOf(postProcess);
-                if (idx !== -1) {
-                    this._postProcesses.splice(idx, 1);
-                }
-            } else {
-                atIndices = (atIndices instanceof Array) ? atIndices : [atIndices];
-                // iterate descending, so can just splice as we go
-                for (i = atIndices.length - 1; i >= 0; i--) {
-                    if (this._postProcesses[atIndices[i]] !== postProcess) {
-                        result.push(i);
-                        continue;
-                    }
-                    index = atIndices[i];
-                    this._postProcesses.splice(index, 1);
-                }
+        public detachPostProcess(postProcess: PostProcess): void {
+            var idx = this._postProcesses.indexOf(postProcess);
+            if (idx !== -1) {
+                this._postProcesses.splice(idx, 1);
             }
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated
-            return result;
         }
 
         public getWorldMatrix(): Matrix {

+ 13 - 13
src/PostProcess/RenderPipeline/babylon.postProcessRenderEffect.ts

@@ -7,8 +7,8 @@ module BABYLON {
 
         private _singleInstance: boolean;
 
-        private _cameras: Camera[];
-        private _indicesForCamera: number[][];
+        private _cameras: { [key:string]: Camera};
+        private _indicesForCamera: { [key:string]: number[]};
 
         private _renderPasses: any;
         private _renderEffectAsPasses: any;
@@ -25,8 +25,8 @@ module BABYLON {
 
             this._getPostProcess = getPostProcess;
 
-            this._cameras = [];
-            this._indicesForCamera = [];
+            this._cameras = {};
+            this._indicesForCamera = {};
 
             this._postProcesses = {};
 
@@ -112,7 +112,7 @@ module BABYLON {
 
                 this._indicesForCamera[cameraName].push(index);
 
-                if (this._cameras.indexOf(camera) === -1) {
+                if (!this._cameras[cameraName]) {
                     this._cameras[cameraName] = camera;
                 }
 
@@ -131,15 +131,15 @@ module BABYLON {
             var _cam = Tools.MakeArray(cameras || this._cameras);
 
             for (var i = 0; i < _cam.length; i++) {
-                var camera = _cam[i];
-                var cameraName = camera.name;
+                var camera: Camera = _cam[i];
+                var cameraName: string = camera.name;
 
-                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName]);
+                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName]);
 
-                var index = this._cameras.indexOf(cameraName);
-
-                this._indicesForCamera.splice(index, 1);
-                this._cameras.splice(index, 1);
+                if (this._cameras[cameraName]) {
+                    //this._indicesForCamera.splice(index, 1);
+                    this._cameras[cameraName] = null;
+                }
 
                 for (var passName in this._renderPasses) {
                     this._renderPasses[passName]._decRefCount();
@@ -179,7 +179,7 @@ module BABYLON {
                 var camera = _cam[i];
                 var cameraName = camera.Name;
 
-                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName]);
+                camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName]);
 
                 for (var passName in this._renderPasses) {
                     this._renderPasses[passName]._decRefCount();

+ 3 - 3
src/PostProcess/RenderPipeline/babylon.postProcessRenderPipeline.ts

@@ -2,7 +2,7 @@ module BABYLON {
     export class PostProcessRenderPipeline {
         private _engine: Engine;
 
-        private _renderEffects: PostProcessRenderEffect[];
+        private _renderEffects: {[key: string]: PostProcessRenderEffect};
         private _renderEffectsForIsolatedPass: PostProcessRenderEffect[];
 
         protected _cameras: Camera[];
@@ -18,7 +18,7 @@ module BABYLON {
             this._engine = engine;
             this._name = name;
 
-            this._renderEffects = new Array<PostProcessRenderEffect>();
+            this._renderEffects = {};
             this._renderEffectsForIsolatedPass = new Array<PostProcessRenderEffect>();
 
             this._cameras = [];
@@ -198,7 +198,7 @@ module BABYLON {
         }
 
         public _reset(): void {
-            this._renderEffects = new Array<PostProcessRenderEffect>();
+            this._renderEffects = {};
             this._renderEffectsForIsolatedPass = new Array<PostProcessRenderEffect>();
         }