David Catuhe vor 7 Jahren
Ursprung
Commit
fd8fcfb0d1
30 geänderte Dateien mit 30934 neuen und 30781 gelöschten Zeilen
  1. 9757 9754
      Playground/babylon.d.txt
  2. 14872 14867
      dist/preview release/babylon.d.ts
  3. 51 51
      dist/preview release/babylon.js
  4. 37 8
      dist/preview release/babylon.max.js
  5. 52 52
      dist/preview release/babylon.worker.js
  6. 5873 5868
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts
  7. 54 54
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js
  8. 34 8
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js
  9. 34 8
      dist/preview release/customConfigurations/minimalGLTFViewer/es6.js
  10. 37 8
      dist/preview release/es6.js
  11. 3 3
      dist/preview release/gui/babylon.gui.min.js
  12. 4 4
      dist/preview release/inspector/babylon.inspector.bundle.js
  13. 3 3
      dist/preview release/inspector/babylon.inspector.min.js
  14. 2 2
      dist/preview release/loaders/babylon.glTF1FileLoader.min.js
  15. 2 2
      dist/preview release/loaders/babylon.glTF2FileLoader.min.js
  16. 3 3
      dist/preview release/loaders/babylon.glTFFileLoader.min.js
  17. 1 1
      dist/preview release/loaders/babylon.objFileLoader.min.js
  18. 3 3
      dist/preview release/loaders/babylonjs.loaders.min.js
  19. 1 1
      dist/preview release/materialsLibrary/babylon.customMaterial.min.js
  20. 1 1
      dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.min.js
  21. 1 1
      dist/preview release/materialsLibrary/babylon.waterMaterial.min.js
  22. 3 3
      dist/preview release/materialsLibrary/babylonjs.materials.min.js
  23. 1 1
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.min.js
  24. 1 1
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.min.js
  25. 1 1
      dist/preview release/postProcessesLibrary/babylonjs.postProcess.min.js
  26. 1 1
      dist/preview release/serializers/babylon.glTF2Serializer.min.js
  27. 1 1
      dist/preview release/serializers/babylonjs.serializers.min.js
  28. 63 63
      dist/preview release/viewer/babylon.viewer.js
  29. 34 8
      dist/preview release/viewer/babylon.viewer.max.js
  30. 4 0
      src/Mesh/babylon.instancedMesh.ts

Datei-Diff unterdrückt, da er zu groß ist
+ 9757 - 9754
Playground/babylon.d.txt


Datei-Diff unterdrückt, da er zu groß ist
+ 14872 - 14867
dist/preview release/babylon.d.ts


Datei-Diff unterdrückt, da er zu groß ist
+ 51 - 51
dist/preview release/babylon.js


+ 37 - 8
dist/preview release/babylon.max.js

@@ -20123,10 +20123,23 @@ var BABYLON;
             enumerable: true,
             configurable: true
         });
+        /**
+         * Internal, gets the first post proces.
+         * @returns the first post process to be run on this camera.
+         */
+        Camera.prototype._getFirstPostProcess = function () {
+            for (var pp in this._postProcesses) {
+                if (this._postProcesses[pp] !== null) {
+                    return this._postProcesses[pp];
+                }
+            }
+            return null;
+        };
         Camera.prototype._cascadePostProcessesToRigCams = function () {
             // invalidate framebuffer
-            if (this._postProcesses.length > 0) {
-                this._postProcesses[0].markTextureDirty();
+            var firstPostProcess = this._getFirstPostProcess();
+            if (firstPostProcess) {
+                firstPostProcess.markTextureDirty();
             }
             // glue the rigPostProcess to the end of the user postprocesses & assign to each sub-camera
             for (var i = 0, len = this._rigCameras.length; i < len; i++) {
@@ -20156,6 +20169,9 @@ var BABYLON;
             if (insertAt == null || insertAt < 0) {
                 this._postProcesses.push(postProcess);
             }
+            else if (this._postProcesses[insertAt] === null) {
+                this._postProcesses[insertAt] = postProcess;
+            }
             else {
                 this._postProcesses.splice(insertAt, 0, postProcess);
             }
@@ -20165,7 +20181,7 @@ var BABYLON;
         Camera.prototype.detachPostProcess = function (postProcess) {
             var idx = this._postProcesses.indexOf(postProcess);
             if (idx !== -1) {
-                this._postProcesses.splice(idx, 1);
+                this._postProcesses[idx] = null;
             }
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated
         };
@@ -20340,7 +20356,10 @@ var BABYLON;
             else {
                 var i = this._postProcesses.length;
                 while (--i >= 0) {
-                    this._postProcesses[i].dispose(this);
+                    var postProcess = this._postProcesses[i];
+                    if (postProcess) {
+                        postProcess.dispose(this);
+                    }
                 }
             }
             // Render targets
@@ -36770,7 +36789,7 @@ var BABYLON;
             if (!camera) {
                 return false;
             }
-            var postProcesses = postProcesses || camera._postProcesses;
+            var postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (!postProcesses || postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return false;
             }
@@ -36829,7 +36848,7 @@ var BABYLON;
             if (!camera) {
                 return;
             }
-            postProcesses = postProcesses || camera._postProcesses;
+            postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return;
             }
@@ -55542,6 +55561,13 @@ var BABYLON;
             get: function () {
                 return this._sourceMesh.renderingGroupId;
             },
+            set: function (value) {
+                if (!this._sourceMesh || value === this._sourceMesh.renderingGroupId) {
+                    return;
+                }
+                //no-op with warning
+                BABYLON.Tools.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene");
+            },
             enumerable: true,
             configurable: true
         });
@@ -60437,7 +60463,10 @@ var BABYLON;
             camera.detachPostProcess(this);
             var index = camera._postProcesses.indexOf(this);
             if (index === 0 && camera._postProcesses.length > 0) {
-                this._camera._postProcesses[0].markTextureDirty();
+                var firstPostProcess = this._camera._getFirstPostProcess();
+                if (firstPostProcess) {
+                    firstPostProcess.markTextureDirty();
+                }
             }
             this.onActivateObservable.clear();
             this.onAfterRenderObservable.clear();
@@ -67143,7 +67172,7 @@ var BABYLON;
                 var camera = cams[i];
                 var cameraName = camera.name;
                 for (var j = 0; j < this._indicesForCamera[cameraName].length; j++) {
-                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined) {
+                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined || camera._postProcesses[this._indicesForCamera[cameraName][j]] === null) {
                         this._postProcesses[this._singleInstance ? 0 : cameraName].forEach(function (postProcess) {
                             cams[i].attachPostProcess(postProcess, _this._indicesForCamera[cameraName][j]);
                         });

Datei-Diff unterdrückt, da er zu groß ist
+ 52 - 52
dist/preview release/babylon.worker.js


Datei-Diff unterdrückt, da er zu groß ist
+ 5873 - 5868
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts


Datei-Diff unterdrückt, da er zu groß ist
+ 54 - 54
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js


+ 34 - 8
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js

@@ -20123,10 +20123,23 @@ var BABYLON;
             enumerable: true,
             configurable: true
         });
+        /**
+         * Internal, gets the first post proces.
+         * @returns the first post process to be run on this camera.
+         */
+        Camera.prototype._getFirstPostProcess = function () {
+            for (var pp in this._postProcesses) {
+                if (this._postProcesses[pp] !== null) {
+                    return this._postProcesses[pp];
+                }
+            }
+            return null;
+        };
         Camera.prototype._cascadePostProcessesToRigCams = function () {
             // invalidate framebuffer
-            if (this._postProcesses.length > 0) {
-                this._postProcesses[0].markTextureDirty();
+            var firstPostProcess = this._getFirstPostProcess();
+            if (firstPostProcess) {
+                firstPostProcess.markTextureDirty();
             }
             // glue the rigPostProcess to the end of the user postprocesses & assign to each sub-camera
             for (var i = 0, len = this._rigCameras.length; i < len; i++) {
@@ -20156,6 +20169,9 @@ var BABYLON;
             if (insertAt == null || insertAt < 0) {
                 this._postProcesses.push(postProcess);
             }
+            else if (this._postProcesses[insertAt] === null) {
+                this._postProcesses[insertAt] = postProcess;
+            }
             else {
                 this._postProcesses.splice(insertAt, 0, postProcess);
             }
@@ -20165,7 +20181,7 @@ var BABYLON;
         Camera.prototype.detachPostProcess = function (postProcess) {
             var idx = this._postProcesses.indexOf(postProcess);
             if (idx !== -1) {
-                this._postProcesses.splice(idx, 1);
+                this._postProcesses[idx] = null;
             }
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated
         };
@@ -20340,7 +20356,10 @@ var BABYLON;
             else {
                 var i = this._postProcesses.length;
                 while (--i >= 0) {
-                    this._postProcesses[i].dispose(this);
+                    var postProcess = this._postProcesses[i];
+                    if (postProcess) {
+                        postProcess.dispose(this);
+                    }
                 }
             }
             // Render targets
@@ -36770,7 +36789,7 @@ var BABYLON;
             if (!camera) {
                 return false;
             }
-            var postProcesses = postProcesses || camera._postProcesses;
+            var postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (!postProcesses || postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return false;
             }
@@ -36829,7 +36848,7 @@ var BABYLON;
             if (!camera) {
                 return;
             }
-            postProcesses = postProcesses || camera._postProcesses;
+            postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return;
             }
@@ -54844,6 +54863,10 @@ var BABYLON;
             get: function () {
                 return this._sourceMesh.renderingGroupId;
             },
+            set: function (value) {
+                //no-op with warning
+                BABYLON.Tools.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene");
+            },
             enumerable: true,
             configurable: true
         });
@@ -59739,7 +59762,10 @@ var BABYLON;
             camera.detachPostProcess(this);
             var index = camera._postProcesses.indexOf(this);
             if (index === 0 && camera._postProcesses.length > 0) {
-                this._camera._postProcesses[0].markTextureDirty();
+                var firstPostProcess = this._camera._getFirstPostProcess();
+                if (firstPostProcess) {
+                    firstPostProcess.markTextureDirty();
+                }
             }
             this.onActivateObservable.clear();
             this.onAfterRenderObservable.clear();
@@ -66445,7 +66471,7 @@ var BABYLON;
                 var camera = cams[i];
                 var cameraName = camera.name;
                 for (var j = 0; j < this._indicesForCamera[cameraName].length; j++) {
-                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined) {
+                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined || camera._postProcesses[this._indicesForCamera[cameraName][j]] === null) {
                         this._postProcesses[this._singleInstance ? 0 : cameraName].forEach(function (postProcess) {
                             cams[i].attachPostProcess(postProcess, _this._indicesForCamera[cameraName][j]);
                         });

+ 34 - 8
dist/preview release/customConfigurations/minimalGLTFViewer/es6.js

@@ -20096,10 +20096,23 @@ var BABYLON;
             enumerable: true,
             configurable: true
         });
+        /**
+         * Internal, gets the first post proces.
+         * @returns the first post process to be run on this camera.
+         */
+        Camera.prototype._getFirstPostProcess = function () {
+            for (var pp in this._postProcesses) {
+                if (this._postProcesses[pp] !== null) {
+                    return this._postProcesses[pp];
+                }
+            }
+            return null;
+        };
         Camera.prototype._cascadePostProcessesToRigCams = function () {
             // invalidate framebuffer
-            if (this._postProcesses.length > 0) {
-                this._postProcesses[0].markTextureDirty();
+            var firstPostProcess = this._getFirstPostProcess();
+            if (firstPostProcess) {
+                firstPostProcess.markTextureDirty();
             }
             // glue the rigPostProcess to the end of the user postprocesses & assign to each sub-camera
             for (var i = 0, len = this._rigCameras.length; i < len; i++) {
@@ -20129,6 +20142,9 @@ var BABYLON;
             if (insertAt == null || insertAt < 0) {
                 this._postProcesses.push(postProcess);
             }
+            else if (this._postProcesses[insertAt] === null) {
+                this._postProcesses[insertAt] = postProcess;
+            }
             else {
                 this._postProcesses.splice(insertAt, 0, postProcess);
             }
@@ -20138,7 +20154,7 @@ var BABYLON;
         Camera.prototype.detachPostProcess = function (postProcess) {
             var idx = this._postProcesses.indexOf(postProcess);
             if (idx !== -1) {
-                this._postProcesses.splice(idx, 1);
+                this._postProcesses[idx] = null;
             }
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated
         };
@@ -20313,7 +20329,10 @@ var BABYLON;
             else {
                 var i = this._postProcesses.length;
                 while (--i >= 0) {
-                    this._postProcesses[i].dispose(this);
+                    var postProcess = this._postProcesses[i];
+                    if (postProcess) {
+                        postProcess.dispose(this);
+                    }
                 }
             }
             // Render targets
@@ -36743,7 +36762,7 @@ var BABYLON;
             if (!camera) {
                 return false;
             }
-            var postProcesses = postProcesses || camera._postProcesses;
+            var postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (!postProcesses || postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return false;
             }
@@ -36802,7 +36821,7 @@ var BABYLON;
             if (!camera) {
                 return;
             }
-            postProcesses = postProcesses || camera._postProcesses;
+            postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return;
             }
@@ -54817,6 +54836,10 @@ var BABYLON;
             get: function () {
                 return this._sourceMesh.renderingGroupId;
             },
+            set: function (value) {
+                //no-op with warning
+                BABYLON.Tools.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene");
+            },
             enumerable: true,
             configurable: true
         });
@@ -59712,7 +59735,10 @@ var BABYLON;
             camera.detachPostProcess(this);
             var index = camera._postProcesses.indexOf(this);
             if (index === 0 && camera._postProcesses.length > 0) {
-                this._camera._postProcesses[0].markTextureDirty();
+                var firstPostProcess = this._camera._getFirstPostProcess();
+                if (firstPostProcess) {
+                    firstPostProcess.markTextureDirty();
+                }
             }
             this.onActivateObservable.clear();
             this.onAfterRenderObservable.clear();
@@ -66418,7 +66444,7 @@ var BABYLON;
                 var camera = cams[i];
                 var cameraName = camera.name;
                 for (var j = 0; j < this._indicesForCamera[cameraName].length; j++) {
-                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined) {
+                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined || camera._postProcesses[this._indicesForCamera[cameraName][j]] === null) {
                         this._postProcesses[this._singleInstance ? 0 : cameraName].forEach(function (postProcess) {
                             cams[i].attachPostProcess(postProcess, _this._indicesForCamera[cameraName][j]);
                         });

+ 37 - 8
dist/preview release/es6.js

@@ -20096,10 +20096,23 @@ var BABYLON;
             enumerable: true,
             configurable: true
         });
+        /**
+         * Internal, gets the first post proces.
+         * @returns the first post process to be run on this camera.
+         */
+        Camera.prototype._getFirstPostProcess = function () {
+            for (var pp in this._postProcesses) {
+                if (this._postProcesses[pp] !== null) {
+                    return this._postProcesses[pp];
+                }
+            }
+            return null;
+        };
         Camera.prototype._cascadePostProcessesToRigCams = function () {
             // invalidate framebuffer
-            if (this._postProcesses.length > 0) {
-                this._postProcesses[0].markTextureDirty();
+            var firstPostProcess = this._getFirstPostProcess();
+            if (firstPostProcess) {
+                firstPostProcess.markTextureDirty();
             }
             // glue the rigPostProcess to the end of the user postprocesses & assign to each sub-camera
             for (var i = 0, len = this._rigCameras.length; i < len; i++) {
@@ -20129,6 +20142,9 @@ var BABYLON;
             if (insertAt == null || insertAt < 0) {
                 this._postProcesses.push(postProcess);
             }
+            else if (this._postProcesses[insertAt] === null) {
+                this._postProcesses[insertAt] = postProcess;
+            }
             else {
                 this._postProcesses.splice(insertAt, 0, postProcess);
             }
@@ -20138,7 +20154,7 @@ var BABYLON;
         Camera.prototype.detachPostProcess = function (postProcess) {
             var idx = this._postProcesses.indexOf(postProcess);
             if (idx !== -1) {
-                this._postProcesses.splice(idx, 1);
+                this._postProcesses[idx] = null;
             }
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated
         };
@@ -20313,7 +20329,10 @@ var BABYLON;
             else {
                 var i = this._postProcesses.length;
                 while (--i >= 0) {
-                    this._postProcesses[i].dispose(this);
+                    var postProcess = this._postProcesses[i];
+                    if (postProcess) {
+                        postProcess.dispose(this);
+                    }
                 }
             }
             // Render targets
@@ -36743,7 +36762,7 @@ var BABYLON;
             if (!camera) {
                 return false;
             }
-            var postProcesses = postProcesses || camera._postProcesses;
+            var postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (!postProcesses || postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return false;
             }
@@ -36802,7 +36821,7 @@ var BABYLON;
             if (!camera) {
                 return;
             }
-            postProcesses = postProcesses || camera._postProcesses;
+            postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return;
             }
@@ -55515,6 +55534,13 @@ var BABYLON;
             get: function () {
                 return this._sourceMesh.renderingGroupId;
             },
+            set: function (value) {
+                if (!this._sourceMesh || value === this._sourceMesh.renderingGroupId) {
+                    return;
+                }
+                //no-op with warning
+                BABYLON.Tools.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene");
+            },
             enumerable: true,
             configurable: true
         });
@@ -60410,7 +60436,10 @@ var BABYLON;
             camera.detachPostProcess(this);
             var index = camera._postProcesses.indexOf(this);
             if (index === 0 && camera._postProcesses.length > 0) {
-                this._camera._postProcesses[0].markTextureDirty();
+                var firstPostProcess = this._camera._getFirstPostProcess();
+                if (firstPostProcess) {
+                    firstPostProcess.markTextureDirty();
+                }
             }
             this.onActivateObservable.clear();
             this.onAfterRenderObservable.clear();
@@ -67116,7 +67145,7 @@ var BABYLON;
                 var camera = cams[i];
                 var cameraName = camera.name;
                 for (var j = 0; j < this._indicesForCamera[cameraName].length; j++) {
-                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined) {
+                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined || camera._postProcesses[this._indicesForCamera[cameraName][j]] === null) {
                         this._postProcesses[this._singleInstance ? 0 : cameraName].forEach(function (postProcess) {
                             cams[i].attachPostProcess(postProcess, _this._indicesForCamera[cameraName][j]);
                         });

Datei-Diff unterdrückt, da er zu groß ist
+ 3 - 3
dist/preview release/gui/babylon.gui.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 4 - 4
dist/preview release/inspector/babylon.inspector.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 3 - 3
dist/preview release/inspector/babylon.inspector.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 2 - 2
dist/preview release/loaders/babylon.glTF1FileLoader.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 2 - 2
dist/preview release/loaders/babylon.glTF2FileLoader.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 3 - 3
dist/preview release/loaders/babylon.glTFFileLoader.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/loaders/babylon.objFileLoader.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 3 - 3
dist/preview release/loaders/babylonjs.loaders.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/materialsLibrary/babylon.customMaterial.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/materialsLibrary/babylon.waterMaterial.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 3 - 3
dist/preview release/materialsLibrary/babylonjs.materials.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/postProcessesLibrary/babylonjs.postProcess.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/serializers/babylon.glTF2Serializer.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
dist/preview release/serializers/babylonjs.serializers.min.js


Datei-Diff unterdrückt, da er zu groß ist
+ 63 - 63
dist/preview release/viewer/babylon.viewer.js


+ 34 - 8
dist/preview release/viewer/babylon.viewer.max.js

@@ -20206,10 +20206,23 @@ var BABYLON;
             enumerable: true,
             configurable: true
         });
+        /**
+         * Internal, gets the first post proces.
+         * @returns the first post process to be run on this camera.
+         */
+        Camera.prototype._getFirstPostProcess = function () {
+            for (var pp in this._postProcesses) {
+                if (this._postProcesses[pp] !== null) {
+                    return this._postProcesses[pp];
+                }
+            }
+            return null;
+        };
         Camera.prototype._cascadePostProcessesToRigCams = function () {
             // invalidate framebuffer
-            if (this._postProcesses.length > 0) {
-                this._postProcesses[0].markTextureDirty();
+            var firstPostProcess = this._getFirstPostProcess();
+            if (firstPostProcess) {
+                firstPostProcess.markTextureDirty();
             }
             // glue the rigPostProcess to the end of the user postprocesses & assign to each sub-camera
             for (var i = 0, len = this._rigCameras.length; i < len; i++) {
@@ -20239,6 +20252,9 @@ var BABYLON;
             if (insertAt == null || insertAt < 0) {
                 this._postProcesses.push(postProcess);
             }
+            else if (this._postProcesses[insertAt] === null) {
+                this._postProcesses[insertAt] = postProcess;
+            }
             else {
                 this._postProcesses.splice(insertAt, 0, postProcess);
             }
@@ -20248,7 +20264,7 @@ var BABYLON;
         Camera.prototype.detachPostProcess = function (postProcess) {
             var idx = this._postProcesses.indexOf(postProcess);
             if (idx !== -1) {
-                this._postProcesses.splice(idx, 1);
+                this._postProcesses[idx] = null;
             }
             this._cascadePostProcessesToRigCams(); // also ensures framebuffer invalidated
         };
@@ -20423,7 +20439,10 @@ var BABYLON;
             else {
                 var i = this._postProcesses.length;
                 while (--i >= 0) {
-                    this._postProcesses[i].dispose(this);
+                    var postProcess = this._postProcesses[i];
+                    if (postProcess) {
+                        postProcess.dispose(this);
+                    }
                 }
             }
             // Render targets
@@ -36853,7 +36872,7 @@ var BABYLON;
             if (!camera) {
                 return false;
             }
-            var postProcesses = postProcesses || camera._postProcesses;
+            var postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (!postProcesses || postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return false;
             }
@@ -36912,7 +36931,7 @@ var BABYLON;
             if (!camera) {
                 return;
             }
-            postProcesses = postProcesses || camera._postProcesses;
+            postProcesses = postProcesses || camera._postProcesses.filter(function (pp) { return pp != null; });
             if (postProcesses.length === 0 || !this._scene.postProcessesEnabled) {
                 return;
             }
@@ -55625,6 +55644,10 @@ var BABYLON;
             get: function () {
                 return this._sourceMesh.renderingGroupId;
             },
+            set: function (value) {
+                //no-op with warning
+                BABYLON.Tools.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene");
+            },
             enumerable: true,
             configurable: true
         });
@@ -60520,7 +60543,10 @@ var BABYLON;
             camera.detachPostProcess(this);
             var index = camera._postProcesses.indexOf(this);
             if (index === 0 && camera._postProcesses.length > 0) {
-                this._camera._postProcesses[0].markTextureDirty();
+                var firstPostProcess = this._camera._getFirstPostProcess();
+                if (firstPostProcess) {
+                    firstPostProcess.markTextureDirty();
+                }
             }
             this.onActivateObservable.clear();
             this.onAfterRenderObservable.clear();
@@ -67226,7 +67252,7 @@ var BABYLON;
                 var camera = cams[i];
                 var cameraName = camera.name;
                 for (var j = 0; j < this._indicesForCamera[cameraName].length; j++) {
-                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined) {
+                    if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined || camera._postProcesses[this._indicesForCamera[cameraName][j]] === null) {
                         this._postProcesses[this._singleInstance ? 0 : cameraName].forEach(function (postProcess) {
                             cams[i].attachPostProcess(postProcess, _this._indicesForCamera[cameraName][j]);
                         });

+ 4 - 0
src/Mesh/babylon.instancedMesh.ts

@@ -59,6 +59,10 @@
         }
 
         public set renderingGroupId(value: number) {
+            if (!this._sourceMesh || value === this._sourceMesh.renderingGroupId) {
+                return;
+            }
+
             //no-op with warning
             Tools.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene");
         }