David Catuhe 7 سال پیش
والد
کامیت
607bd990bf
30فایلهای تغییر یافته به همراه4292 افزوده شده و 5658 حذف شده
  1. 2 2
      Tools/Gulp/config.json
  2. 3802 3799
      dist/preview release/babylon.d.ts
  3. 48 48
      dist/preview release/babylon.js
  4. 87 87
      dist/preview release/babylon.max.js
  5. 87 87
      dist/preview release/babylon.no-module.max.js
  6. 48 48
      dist/preview release/babylon.worker.js
  7. 87 87
      dist/preview release/es6.js
  8. 3 3
      dist/preview release/loaders/babylon.glTF1FileLoader.d.ts
  9. 3 3
      dist/preview release/loaders/babylon.glTF2FileLoader.d.ts
  10. 1 1
      dist/preview release/loaders/babylon.objFileLoader.d.ts
  11. 1 1
      dist/preview release/loaders/babylon.stlFileLoader.d.ts
  12. 0 1094
      dist/preview release/proceduralTexturesLibrary/babylonjs.proceduralTextures.js
  13. 0 291
      dist/preview release/proceduralTexturesLibrary/babylonjs.proceduralTextures.module.d.ts
  14. 1 1
      loaders/src/OBJ/babylon.objFileLoader.ts
  15. 1 1
      loaders/src/STL/babylon.stlFileLoader.ts
  16. 1 1
      loaders/src/glTF/1.0/babylon.glTFLoader.ts
  17. 1 1
      loaders/src/glTF/2.0/babylon.glTFLoader.ts
  18. 2 2
      loaders/src/glTF/babylon.glTFFileLoader.ts
  19. 0 36
      src/Engine/babylon.engine.ts
  20. 19 14
      src/Layer/babylon.effectLayerSceneComponent.ts
  21. 13 8
      src/Layer/babylon.layerSceneComponent.ts
  22. 13 11
      src/LensFlare/babylon.lensFlareSystemSceneComponent.ts
  23. 1 16
      src/Loading/Plugins/babylon.babylonFileLoader.ts
  24. 6 6
      src/Loading/babylon.sceneLoader.ts
  25. 1 1
      src/Particles/babylon.IParticleSystem.ts
  26. 1 1
      src/Particles/babylon.particleHelper.ts
  27. 60 0
      src/Particles/babylon.particleSystemComponent.ts
  28. 2 2
      src/Tools/babylon.assetsManager.ts
  29. 0 6
      src/babylon.assetContainer.ts
  30. 1 0
      src/babylon.sceneComponent.ts

+ 2 - 2
Tools/Gulp/config.json

@@ -254,10 +254,10 @@
             "files": [
                 "../../src/Particles/babylon.particle.js",
                 "../../src/Particles/babylon.particleSystem.js",
-                "../../src/Particles/EmitterTypes/babylon.IParticleEmitterType.js",
                 "../../src/Particles/EmitterTypes/babylon.boxParticleEmitter.js",
                 "../../src/Particles/EmitterTypes/babylon.coneParticleEmitter.js",
-                "../../src/Particles/EmitterTypes/babylon.sphereParticleEmitter.js"
+                "../../src/Particles/EmitterTypes/babylon.sphereParticleEmitter.js",
+                "../../src/Particles/babylon.particleSystemComponent.js"
             ],
             "dependUpon": [
                 "core"

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 3802 - 3799
dist/preview release/babylon.d.ts


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 48 - 48
dist/preview release/babylon.js


+ 87 - 87
dist/preview release/babylon.max.js

@@ -14097,35 +14097,6 @@ var BABYLON;
             return effect;
         };
         /**
-         * Create an effect to use with particle systems.
-         * Please note that some parameters like animation sheets or not being billboard are not supported in this configuration
-         * @param fragmentName defines the base name of the effect (The name of file without .fragment.fx)
-         * @param uniformsNames defines a list of attribute names
-         * @param samplers defines an array of string used to represent textures
-         * @param defines defines the string containing the defines to use to compile the shaders
-         * @param fallbacks defines the list of potential fallbacks to use if shader conmpilation fails
-         * @param onCompiled defines a function to call when the effect creation is successful
-         * @param onError defines a function to call when the effect creation has failed
-         * @returns the new Effect
-         */
-        Engine.prototype.createEffectForParticles = function (fragmentName, uniformsNames, samplers, defines, fallbacks, onCompiled, onError) {
-            if (uniformsNames === void 0) { uniformsNames = []; }
-            if (samplers === void 0) { samplers = []; }
-            if (defines === void 0) { defines = ""; }
-            var attributesNamesOrOptions = BABYLON.ParticleSystem._GetAttributeNamesOrOptions();
-            var effectCreationOption = BABYLON.ParticleSystem._GetEffectCreationOptions();
-            if (defines.indexOf(" BILLBOARD") === -1) {
-                defines += "\n#define BILLBOARD\n";
-            }
-            if (samplers.indexOf("diffuseSampler") === -1) {
-                samplers.push("diffuseSampler");
-            }
-            return this.createEffect({
-                vertex: "particles",
-                fragmentElement: fragmentName
-            }, attributesNamesOrOptions, effectCreationOption.concat(uniformsNames), samplers, defines, fallbacks, onCompiled, onError);
-        };
-        /**
          * Directly creates a webGL program
          * @param vertexCode defines the vertex shader code to use
          * @param fragmentCode defines the fragment shader code to use
@@ -23968,6 +23939,7 @@ var BABYLON;
         SceneComponentConstants.NAME_LAYER = "Layer";
         SceneComponentConstants.NAME_LENSFLARESYSTEM = "LensFlareSystem";
         SceneComponentConstants.NAME_BOUNDINGBOXRENDERER = "BoundingBoxRenderer";
+        SceneComponentConstants.NAME_PARTICLESYSTEM = "ParticleSystem";
         SceneComponentConstants.STEP_ISREADYFORMESH_EFFECTLAYER = 0;
         SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER = 0;
         SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER = 0;
@@ -29492,9 +29464,6 @@ var BABYLON;
             this.skeletons.forEach(function (o) {
                 _this.scene.addSkeleton(o);
             });
-            this.particleSystems.forEach(function (o) {
-                _this.scene.addParticleSystem(o);
-            });
             this.animations.forEach(function (o) {
                 _this.scene.addAnimation(o);
             });
@@ -29549,9 +29518,6 @@ var BABYLON;
             this.skeletons.forEach(function (o) {
                 _this.scene.removeSkeleton(o);
             });
-            this.particleSystems.forEach(function (o) {
-                _this.scene.removeParticleSystem(o);
-            });
             this.animations.forEach(function (o) {
                 _this.scene.removeAnimation(o);
             });
@@ -56967,10 +56933,6 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.particleSystem.js.map
 
-
-
-//# sourceMappingURL=babylon.IParticleEmitterType.js.map
-
 var BABYLON;
 (function (BABYLON) {
     /**
@@ -57476,6 +57438,46 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.sphereParticleEmitter.js.map
 
+var BABYLON;
+(function (BABYLON) {
+    // Adds the parser to the scene parsers.
+    BABYLON.AbstractScene.AddParser(BABYLON.SceneComponentConstants.NAME_PARTICLESYSTEM, function (parsedData, scene, container, rootUrl) {
+        // Particles Systems
+        if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {
+            for (var index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {
+                var parsedParticleSystem = parsedData.particleSystems[index];
+                if (parsedParticleSystem.activeParticleCount) {
+                    var ps = BABYLON.GPUParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
+                    container.particleSystems.push(ps);
+                }
+                else {
+                    var ps = BABYLON.ParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
+                    container.particleSystems.push(ps);
+                }
+            }
+        }
+    });
+    BABYLON.Engine.prototype.createEffectForParticles = function (fragmentName, uniformsNames, samplers, defines, fallbacks, onCompiled, onError) {
+        if (uniformsNames === void 0) { uniformsNames = []; }
+        if (samplers === void 0) { samplers = []; }
+        if (defines === void 0) { defines = ""; }
+        var attributesNamesOrOptions = BABYLON.ParticleSystem._GetAttributeNamesOrOptions();
+        var effectCreationOption = BABYLON.ParticleSystem._GetEffectCreationOptions();
+        if (defines.indexOf(" BILLBOARD") === -1) {
+            defines += "\n#define BILLBOARD\n";
+        }
+        if (samplers.indexOf("diffuseSampler") === -1) {
+            samplers.push("diffuseSampler");
+        }
+        return this.createEffect({
+            vertex: "particles",
+            fragmentElement: fragmentName
+        }, attributesNamesOrOptions, effectCreationOption.concat(uniformsNames), samplers, defines, fallbacks, onCompiled, onError);
+    };
+})(BABYLON || (BABYLON = {}));
+
+//# sourceMappingURL=babylon.particleSystemComponent.js.map
+
 var __assign = (this && this.__assign) || Object.assign || function(t) {
     for (var s, i = 1, n = arguments.length; i < n; i++) {
         s = arguments[i];
@@ -69033,20 +69035,6 @@ var BABYLON;
                     currentMesh.computeWorldMatrix(true);
                 }
             }
-            // Particles Systems
-            if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {
-                for (index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {
-                    var parsedParticleSystem = parsedData.particleSystems[index];
-                    if (parsedParticleSystem.activeParticleCount) {
-                        var ps = BABYLON.GPUParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
-                        container.particleSystems.push(ps);
-                    }
-                    else {
-                        var ps = BABYLON.ParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
-                        container.particleSystems.push(ps);
-                    }
-                }
-            }
             // Shadows
             if (parsedData.shadowGenerators !== undefined && parsedData.shadowGenerators !== null) {
                 for (index = 0, cache = parsedData.shadowGenerators.length; index < cache; index++) {
@@ -84908,7 +84896,7 @@ var BABYLON;
         this.lensFlareSystems.push(newLensFlareSystem);
     };
     /**
-     * Defines the layer scene component responsible to manage any layers
+     * Defines the lens flare scene component responsible to manage any lens flares
      * in a given scene.
      */
     var LensFlareSystemSceneComponent = /** @class */ (function () {
@@ -84922,7 +84910,7 @@ var BABYLON;
              */
             this.name = BABYLON.SceneComponentConstants.NAME_LENSFLARESYSTEM;
             this.scene = scene;
-            this._lensFlareSystems = scene.lensFlareSystems = new Array();
+            scene.lensFlareSystems = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -84970,8 +84958,9 @@ var BABYLON;
         LensFlareSystemSceneComponent.prototype.serialize = function (serializationObject) {
             // Lens flares
             serializationObject.lensFlareSystems = [];
-            for (var _i = 0, _a = this._lensFlareSystems; _i < _a.length; _i++) {
-                var lensFlareSystem = _a[_i];
+            var lensFlareSystems = this.scene.lensFlareSystems;
+            for (var _i = 0, lensFlareSystems_1 = lensFlareSystems; _i < lensFlareSystems_1.length; _i++) {
+                var lensFlareSystem = lensFlareSystems_1[_i];
                 serializationObject.lensFlareSystems.push(lensFlareSystem.serialize());
             }
         };
@@ -84979,21 +84968,23 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         LensFlareSystemSceneComponent.prototype.dispose = function () {
-            while (this._lensFlareSystems.length) {
-                this._lensFlareSystems[0].dispose();
+            var lensFlareSystems = this.scene.lensFlareSystems;
+            while (lensFlareSystems.length) {
+                lensFlareSystems[0].dispose();
             }
         };
         LensFlareSystemSceneComponent.prototype._draw = function (camera) {
             // Lens flares
             if (this.scene.lensFlaresEnabled) {
-                BABYLON.Tools.StartPerformanceCounter("Lens flares", this._lensFlareSystems.length > 0);
-                for (var _i = 0, _a = this._lensFlareSystems; _i < _a.length; _i++) {
-                    var lensFlareSystem = _a[_i];
+                var lensFlareSystems = this.scene.lensFlareSystems;
+                BABYLON.Tools.StartPerformanceCounter("Lens flares", lensFlareSystems.length > 0);
+                for (var _i = 0, lensFlareSystems_2 = lensFlareSystems; _i < lensFlareSystems_2.length; _i++) {
+                    var lensFlareSystem = lensFlareSystems_2[_i];
                     if ((camera.layerMask & lensFlareSystem.layerMask) !== 0) {
                         lensFlareSystem.render();
                     }
                 }
-                BABYLON.Tools.EndPerformanceCounter("Lens flares", this._lensFlareSystems.length > 0);
+                BABYLON.Tools.EndPerformanceCounter("Lens flares", lensFlareSystems.length > 0);
             }
         };
         return LensFlareSystemSceneComponent;
@@ -97087,7 +97078,7 @@ var BABYLON;
             this._previousStencilState = false;
             this.scene = scene;
             this._engine = scene.getEngine();
-            this._effectLayers = scene.effectLayers = new Array();
+            scene.effectLayers = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -97105,8 +97096,9 @@ var BABYLON;
          * context lost for instance.
          */
         EffectLayerSceneComponent.prototype.rebuild = function () {
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var effectLayer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
+                var effectLayer = layers_1[_i];
                 effectLayer._rebuild();
             }
         };
@@ -97117,8 +97109,9 @@ var BABYLON;
         EffectLayerSceneComponent.prototype.serialize = function (serializationObject) {
             // Effect layers
             serializationObject.effectLayers = [];
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var effectLayer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {
+                var effectLayer = layers_2[_i];
                 if (effectLayer.serialize) {
                     serializationObject.effectLayers.push(effectLayer.serialize());
                 }
@@ -97154,18 +97147,20 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         EffectLayerSceneComponent.prototype.dispose = function () {
-            while (this._effectLayers.length) {
-                this._effectLayers[0].dispose();
+            var layers = this.scene.effectLayers;
+            while (layers.length) {
+                layers[0].dispose();
             }
         };
         EffectLayerSceneComponent.prototype._isReadyForMesh = function (mesh, hardwareInstancedRendering) {
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var layer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_3 = layers; _i < layers_3.length; _i++) {
+                var layer = layers_3[_i];
                 if (!layer.hasMesh(mesh)) {
                     continue;
                 }
-                for (var _b = 0, _c = mesh.subMeshes; _b < _c.length; _b++) {
-                    var subMesh = _c[_b];
+                for (var _a = 0, _b = mesh.subMeshes; _a < _b.length; _a++) {
+                    var subMesh = _b[_a];
                     if (!layer.isReady(subMesh, hardwareInstancedRendering)) {
                         return false;
                     }
@@ -97176,10 +97171,11 @@ var BABYLON;
         EffectLayerSceneComponent.prototype._renderMainTexture = function (camera) {
             this._renderEffects = false;
             this._needStencil = false;
-            if (this._effectLayers && this._effectLayers.length > 0) {
+            var layers = this.scene.effectLayers;
+            if (layers && layers.length > 0) {
                 this._previousStencilState = this._engine.getStencilBuffer();
-                for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                    var effectLayer = _a[_i];
+                for (var _i = 0, layers_4 = layers; _i < layers_4.length; _i++) {
+                    var effectLayer = layers_4[_i];
                     if (effectLayer.shouldRender() &&
                         (!effectLayer.camera ||
                             (effectLayer.camera.cameraRigMode === BABYLON.Camera.RIG_MODE_NONE && camera === effectLayer.camera) ||
@@ -97211,8 +97207,9 @@ var BABYLON;
         EffectLayerSceneComponent.prototype._draw = function (renderingGroupId) {
             if (this._renderEffects) {
                 this._engine.setDepthBuffer(false);
-                for (var i = 0; i < this._effectLayers.length; i++) {
-                    var effectLayer = this._effectLayers[i];
+                var layers = this.scene.effectLayers;
+                for (var i = 0; i < layers.length; i++) {
+                    var effectLayer = layers[i];
                     if (effectLayer.renderingGroupId === renderingGroupId) {
                         if (effectLayer.shouldRender()) {
                             effectLayer.render();
@@ -100022,7 +100019,7 @@ var BABYLON;
             this.name = BABYLON.SceneComponentConstants.NAME_LAYER;
             this.scene = scene;
             this._engine = scene.getEngine();
-            this._layers = scene.layers = new Array();
+            scene.layers = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -100036,8 +100033,9 @@ var BABYLON;
          * context lost for instance.
          */
         LayerSceneComponent.prototype.rebuild = function () {
-            for (var _i = 0, _a = this._layers; _i < _a.length; _i++) {
-                var layer = _a[_i];
+            var layers = this.scene.layers;
+            for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
+                var layer = layers_1[_i];
                 layer._rebuild();
             }
         };
@@ -100045,16 +100043,18 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         LayerSceneComponent.prototype.dispose = function () {
-            while (this._layers.length) {
-                this._layers[0].dispose();
+            var layers = this.scene.layers;
+            while (layers.length) {
+                layers[0].dispose();
             }
         };
         LayerSceneComponent.prototype._draw = function (camera, isBackground) {
-            if (this._layers.length) {
+            var layers = this.scene.layers;
+            if (layers.length) {
                 this._engine.setDepthBuffer(false);
                 var cameraLayerMask = camera.layerMask;
-                for (var _i = 0, _a = this._layers; _i < _a.length; _i++) {
-                    var layer = _a[_i];
+                for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {
+                    var layer = layers_2[_i];
                     if (layer.isBackground === isBackground && ((layer.layerMask & cameraLayerMask) !== 0)) {
                         layer.render();
                     }

+ 87 - 87
dist/preview release/babylon.no-module.max.js

@@ -14064,35 +14064,6 @@ var BABYLON;
             return effect;
         };
         /**
-         * Create an effect to use with particle systems.
-         * Please note that some parameters like animation sheets or not being billboard are not supported in this configuration
-         * @param fragmentName defines the base name of the effect (The name of file without .fragment.fx)
-         * @param uniformsNames defines a list of attribute names
-         * @param samplers defines an array of string used to represent textures
-         * @param defines defines the string containing the defines to use to compile the shaders
-         * @param fallbacks defines the list of potential fallbacks to use if shader conmpilation fails
-         * @param onCompiled defines a function to call when the effect creation is successful
-         * @param onError defines a function to call when the effect creation has failed
-         * @returns the new Effect
-         */
-        Engine.prototype.createEffectForParticles = function (fragmentName, uniformsNames, samplers, defines, fallbacks, onCompiled, onError) {
-            if (uniformsNames === void 0) { uniformsNames = []; }
-            if (samplers === void 0) { samplers = []; }
-            if (defines === void 0) { defines = ""; }
-            var attributesNamesOrOptions = BABYLON.ParticleSystem._GetAttributeNamesOrOptions();
-            var effectCreationOption = BABYLON.ParticleSystem._GetEffectCreationOptions();
-            if (defines.indexOf(" BILLBOARD") === -1) {
-                defines += "\n#define BILLBOARD\n";
-            }
-            if (samplers.indexOf("diffuseSampler") === -1) {
-                samplers.push("diffuseSampler");
-            }
-            return this.createEffect({
-                vertex: "particles",
-                fragmentElement: fragmentName
-            }, attributesNamesOrOptions, effectCreationOption.concat(uniformsNames), samplers, defines, fallbacks, onCompiled, onError);
-        };
-        /**
          * Directly creates a webGL program
          * @param vertexCode defines the vertex shader code to use
          * @param fragmentCode defines the fragment shader code to use
@@ -23935,6 +23906,7 @@ var BABYLON;
         SceneComponentConstants.NAME_LAYER = "Layer";
         SceneComponentConstants.NAME_LENSFLARESYSTEM = "LensFlareSystem";
         SceneComponentConstants.NAME_BOUNDINGBOXRENDERER = "BoundingBoxRenderer";
+        SceneComponentConstants.NAME_PARTICLESYSTEM = "ParticleSystem";
         SceneComponentConstants.STEP_ISREADYFORMESH_EFFECTLAYER = 0;
         SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER = 0;
         SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER = 0;
@@ -29459,9 +29431,6 @@ var BABYLON;
             this.skeletons.forEach(function (o) {
                 _this.scene.addSkeleton(o);
             });
-            this.particleSystems.forEach(function (o) {
-                _this.scene.addParticleSystem(o);
-            });
             this.animations.forEach(function (o) {
                 _this.scene.addAnimation(o);
             });
@@ -29516,9 +29485,6 @@ var BABYLON;
             this.skeletons.forEach(function (o) {
                 _this.scene.removeSkeleton(o);
             });
-            this.particleSystems.forEach(function (o) {
-                _this.scene.removeParticleSystem(o);
-            });
             this.animations.forEach(function (o) {
                 _this.scene.removeAnimation(o);
             });
@@ -56934,10 +56900,6 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.particleSystem.js.map
 
-
-
-//# sourceMappingURL=babylon.IParticleEmitterType.js.map
-
 var BABYLON;
 (function (BABYLON) {
     /**
@@ -57443,6 +57405,46 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.sphereParticleEmitter.js.map
 
+var BABYLON;
+(function (BABYLON) {
+    // Adds the parser to the scene parsers.
+    BABYLON.AbstractScene.AddParser(BABYLON.SceneComponentConstants.NAME_PARTICLESYSTEM, function (parsedData, scene, container, rootUrl) {
+        // Particles Systems
+        if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {
+            for (var index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {
+                var parsedParticleSystem = parsedData.particleSystems[index];
+                if (parsedParticleSystem.activeParticleCount) {
+                    var ps = BABYLON.GPUParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
+                    container.particleSystems.push(ps);
+                }
+                else {
+                    var ps = BABYLON.ParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
+                    container.particleSystems.push(ps);
+                }
+            }
+        }
+    });
+    BABYLON.Engine.prototype.createEffectForParticles = function (fragmentName, uniformsNames, samplers, defines, fallbacks, onCompiled, onError) {
+        if (uniformsNames === void 0) { uniformsNames = []; }
+        if (samplers === void 0) { samplers = []; }
+        if (defines === void 0) { defines = ""; }
+        var attributesNamesOrOptions = BABYLON.ParticleSystem._GetAttributeNamesOrOptions();
+        var effectCreationOption = BABYLON.ParticleSystem._GetEffectCreationOptions();
+        if (defines.indexOf(" BILLBOARD") === -1) {
+            defines += "\n#define BILLBOARD\n";
+        }
+        if (samplers.indexOf("diffuseSampler") === -1) {
+            samplers.push("diffuseSampler");
+        }
+        return this.createEffect({
+            vertex: "particles",
+            fragmentElement: fragmentName
+        }, attributesNamesOrOptions, effectCreationOption.concat(uniformsNames), samplers, defines, fallbacks, onCompiled, onError);
+    };
+})(BABYLON || (BABYLON = {}));
+
+//# sourceMappingURL=babylon.particleSystemComponent.js.map
+
 var __assign = (this && this.__assign) || Object.assign || function(t) {
     for (var s, i = 1, n = arguments.length; i < n; i++) {
         s = arguments[i];
@@ -69000,20 +69002,6 @@ var BABYLON;
                     currentMesh.computeWorldMatrix(true);
                 }
             }
-            // Particles Systems
-            if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {
-                for (index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {
-                    var parsedParticleSystem = parsedData.particleSystems[index];
-                    if (parsedParticleSystem.activeParticleCount) {
-                        var ps = BABYLON.GPUParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
-                        container.particleSystems.push(ps);
-                    }
-                    else {
-                        var ps = BABYLON.ParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
-                        container.particleSystems.push(ps);
-                    }
-                }
-            }
             // Shadows
             if (parsedData.shadowGenerators !== undefined && parsedData.shadowGenerators !== null) {
                 for (index = 0, cache = parsedData.shadowGenerators.length; index < cache; index++) {
@@ -84875,7 +84863,7 @@ var BABYLON;
         this.lensFlareSystems.push(newLensFlareSystem);
     };
     /**
-     * Defines the layer scene component responsible to manage any layers
+     * Defines the lens flare scene component responsible to manage any lens flares
      * in a given scene.
      */
     var LensFlareSystemSceneComponent = /** @class */ (function () {
@@ -84889,7 +84877,7 @@ var BABYLON;
              */
             this.name = BABYLON.SceneComponentConstants.NAME_LENSFLARESYSTEM;
             this.scene = scene;
-            this._lensFlareSystems = scene.lensFlareSystems = new Array();
+            scene.lensFlareSystems = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -84937,8 +84925,9 @@ var BABYLON;
         LensFlareSystemSceneComponent.prototype.serialize = function (serializationObject) {
             // Lens flares
             serializationObject.lensFlareSystems = [];
-            for (var _i = 0, _a = this._lensFlareSystems; _i < _a.length; _i++) {
-                var lensFlareSystem = _a[_i];
+            var lensFlareSystems = this.scene.lensFlareSystems;
+            for (var _i = 0, lensFlareSystems_1 = lensFlareSystems; _i < lensFlareSystems_1.length; _i++) {
+                var lensFlareSystem = lensFlareSystems_1[_i];
                 serializationObject.lensFlareSystems.push(lensFlareSystem.serialize());
             }
         };
@@ -84946,21 +84935,23 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         LensFlareSystemSceneComponent.prototype.dispose = function () {
-            while (this._lensFlareSystems.length) {
-                this._lensFlareSystems[0].dispose();
+            var lensFlareSystems = this.scene.lensFlareSystems;
+            while (lensFlareSystems.length) {
+                lensFlareSystems[0].dispose();
             }
         };
         LensFlareSystemSceneComponent.prototype._draw = function (camera) {
             // Lens flares
             if (this.scene.lensFlaresEnabled) {
-                BABYLON.Tools.StartPerformanceCounter("Lens flares", this._lensFlareSystems.length > 0);
-                for (var _i = 0, _a = this._lensFlareSystems; _i < _a.length; _i++) {
-                    var lensFlareSystem = _a[_i];
+                var lensFlareSystems = this.scene.lensFlareSystems;
+                BABYLON.Tools.StartPerformanceCounter("Lens flares", lensFlareSystems.length > 0);
+                for (var _i = 0, lensFlareSystems_2 = lensFlareSystems; _i < lensFlareSystems_2.length; _i++) {
+                    var lensFlareSystem = lensFlareSystems_2[_i];
                     if ((camera.layerMask & lensFlareSystem.layerMask) !== 0) {
                         lensFlareSystem.render();
                     }
                 }
-                BABYLON.Tools.EndPerformanceCounter("Lens flares", this._lensFlareSystems.length > 0);
+                BABYLON.Tools.EndPerformanceCounter("Lens flares", lensFlareSystems.length > 0);
             }
         };
         return LensFlareSystemSceneComponent;
@@ -97054,7 +97045,7 @@ var BABYLON;
             this._previousStencilState = false;
             this.scene = scene;
             this._engine = scene.getEngine();
-            this._effectLayers = scene.effectLayers = new Array();
+            scene.effectLayers = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -97072,8 +97063,9 @@ var BABYLON;
          * context lost for instance.
          */
         EffectLayerSceneComponent.prototype.rebuild = function () {
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var effectLayer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
+                var effectLayer = layers_1[_i];
                 effectLayer._rebuild();
             }
         };
@@ -97084,8 +97076,9 @@ var BABYLON;
         EffectLayerSceneComponent.prototype.serialize = function (serializationObject) {
             // Effect layers
             serializationObject.effectLayers = [];
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var effectLayer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {
+                var effectLayer = layers_2[_i];
                 if (effectLayer.serialize) {
                     serializationObject.effectLayers.push(effectLayer.serialize());
                 }
@@ -97121,18 +97114,20 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         EffectLayerSceneComponent.prototype.dispose = function () {
-            while (this._effectLayers.length) {
-                this._effectLayers[0].dispose();
+            var layers = this.scene.effectLayers;
+            while (layers.length) {
+                layers[0].dispose();
             }
         };
         EffectLayerSceneComponent.prototype._isReadyForMesh = function (mesh, hardwareInstancedRendering) {
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var layer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_3 = layers; _i < layers_3.length; _i++) {
+                var layer = layers_3[_i];
                 if (!layer.hasMesh(mesh)) {
                     continue;
                 }
-                for (var _b = 0, _c = mesh.subMeshes; _b < _c.length; _b++) {
-                    var subMesh = _c[_b];
+                for (var _a = 0, _b = mesh.subMeshes; _a < _b.length; _a++) {
+                    var subMesh = _b[_a];
                     if (!layer.isReady(subMesh, hardwareInstancedRendering)) {
                         return false;
                     }
@@ -97143,10 +97138,11 @@ var BABYLON;
         EffectLayerSceneComponent.prototype._renderMainTexture = function (camera) {
             this._renderEffects = false;
             this._needStencil = false;
-            if (this._effectLayers && this._effectLayers.length > 0) {
+            var layers = this.scene.effectLayers;
+            if (layers && layers.length > 0) {
                 this._previousStencilState = this._engine.getStencilBuffer();
-                for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                    var effectLayer = _a[_i];
+                for (var _i = 0, layers_4 = layers; _i < layers_4.length; _i++) {
+                    var effectLayer = layers_4[_i];
                     if (effectLayer.shouldRender() &&
                         (!effectLayer.camera ||
                             (effectLayer.camera.cameraRigMode === BABYLON.Camera.RIG_MODE_NONE && camera === effectLayer.camera) ||
@@ -97178,8 +97174,9 @@ var BABYLON;
         EffectLayerSceneComponent.prototype._draw = function (renderingGroupId) {
             if (this._renderEffects) {
                 this._engine.setDepthBuffer(false);
-                for (var i = 0; i < this._effectLayers.length; i++) {
-                    var effectLayer = this._effectLayers[i];
+                var layers = this.scene.effectLayers;
+                for (var i = 0; i < layers.length; i++) {
+                    var effectLayer = layers[i];
                     if (effectLayer.renderingGroupId === renderingGroupId) {
                         if (effectLayer.shouldRender()) {
                             effectLayer.render();
@@ -99989,7 +99986,7 @@ var BABYLON;
             this.name = BABYLON.SceneComponentConstants.NAME_LAYER;
             this.scene = scene;
             this._engine = scene.getEngine();
-            this._layers = scene.layers = new Array();
+            scene.layers = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -100003,8 +100000,9 @@ var BABYLON;
          * context lost for instance.
          */
         LayerSceneComponent.prototype.rebuild = function () {
-            for (var _i = 0, _a = this._layers; _i < _a.length; _i++) {
-                var layer = _a[_i];
+            var layers = this.scene.layers;
+            for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
+                var layer = layers_1[_i];
                 layer._rebuild();
             }
         };
@@ -100012,16 +100010,18 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         LayerSceneComponent.prototype.dispose = function () {
-            while (this._layers.length) {
-                this._layers[0].dispose();
+            var layers = this.scene.layers;
+            while (layers.length) {
+                layers[0].dispose();
             }
         };
         LayerSceneComponent.prototype._draw = function (camera, isBackground) {
-            if (this._layers.length) {
+            var layers = this.scene.layers;
+            if (layers.length) {
                 this._engine.setDepthBuffer(false);
                 var cameraLayerMask = camera.layerMask;
-                for (var _i = 0, _a = this._layers; _i < _a.length; _i++) {
-                    var layer = _a[_i];
+                for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {
+                    var layer = layers_2[_i];
                     if (layer.isBackground === isBackground && ((layer.layerMask & cameraLayerMask) !== 0)) {
                         layer.render();
                     }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 48 - 48
dist/preview release/babylon.worker.js


+ 87 - 87
dist/preview release/es6.js

@@ -14064,35 +14064,6 @@ var BABYLON;
             return effect;
         };
         /**
-         * Create an effect to use with particle systems.
-         * Please note that some parameters like animation sheets or not being billboard are not supported in this configuration
-         * @param fragmentName defines the base name of the effect (The name of file without .fragment.fx)
-         * @param uniformsNames defines a list of attribute names
-         * @param samplers defines an array of string used to represent textures
-         * @param defines defines the string containing the defines to use to compile the shaders
-         * @param fallbacks defines the list of potential fallbacks to use if shader conmpilation fails
-         * @param onCompiled defines a function to call when the effect creation is successful
-         * @param onError defines a function to call when the effect creation has failed
-         * @returns the new Effect
-         */
-        Engine.prototype.createEffectForParticles = function (fragmentName, uniformsNames, samplers, defines, fallbacks, onCompiled, onError) {
-            if (uniformsNames === void 0) { uniformsNames = []; }
-            if (samplers === void 0) { samplers = []; }
-            if (defines === void 0) { defines = ""; }
-            var attributesNamesOrOptions = BABYLON.ParticleSystem._GetAttributeNamesOrOptions();
-            var effectCreationOption = BABYLON.ParticleSystem._GetEffectCreationOptions();
-            if (defines.indexOf(" BILLBOARD") === -1) {
-                defines += "\n#define BILLBOARD\n";
-            }
-            if (samplers.indexOf("diffuseSampler") === -1) {
-                samplers.push("diffuseSampler");
-            }
-            return this.createEffect({
-                vertex: "particles",
-                fragmentElement: fragmentName
-            }, attributesNamesOrOptions, effectCreationOption.concat(uniformsNames), samplers, defines, fallbacks, onCompiled, onError);
-        };
-        /**
          * Directly creates a webGL program
          * @param vertexCode defines the vertex shader code to use
          * @param fragmentCode defines the fragment shader code to use
@@ -23935,6 +23906,7 @@ var BABYLON;
         SceneComponentConstants.NAME_LAYER = "Layer";
         SceneComponentConstants.NAME_LENSFLARESYSTEM = "LensFlareSystem";
         SceneComponentConstants.NAME_BOUNDINGBOXRENDERER = "BoundingBoxRenderer";
+        SceneComponentConstants.NAME_PARTICLESYSTEM = "ParticleSystem";
         SceneComponentConstants.STEP_ISREADYFORMESH_EFFECTLAYER = 0;
         SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER = 0;
         SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER = 0;
@@ -29459,9 +29431,6 @@ var BABYLON;
             this.skeletons.forEach(function (o) {
                 _this.scene.addSkeleton(o);
             });
-            this.particleSystems.forEach(function (o) {
-                _this.scene.addParticleSystem(o);
-            });
             this.animations.forEach(function (o) {
                 _this.scene.addAnimation(o);
             });
@@ -29516,9 +29485,6 @@ var BABYLON;
             this.skeletons.forEach(function (o) {
                 _this.scene.removeSkeleton(o);
             });
-            this.particleSystems.forEach(function (o) {
-                _this.scene.removeParticleSystem(o);
-            });
             this.animations.forEach(function (o) {
                 _this.scene.removeAnimation(o);
             });
@@ -56934,10 +56900,6 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.particleSystem.js.map
 
-
-
-//# sourceMappingURL=babylon.IParticleEmitterType.js.map
-
 var BABYLON;
 (function (BABYLON) {
     /**
@@ -57443,6 +57405,46 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.sphereParticleEmitter.js.map
 
+var BABYLON;
+(function (BABYLON) {
+    // Adds the parser to the scene parsers.
+    BABYLON.AbstractScene.AddParser(BABYLON.SceneComponentConstants.NAME_PARTICLESYSTEM, function (parsedData, scene, container, rootUrl) {
+        // Particles Systems
+        if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {
+            for (var index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {
+                var parsedParticleSystem = parsedData.particleSystems[index];
+                if (parsedParticleSystem.activeParticleCount) {
+                    var ps = BABYLON.GPUParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
+                    container.particleSystems.push(ps);
+                }
+                else {
+                    var ps = BABYLON.ParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
+                    container.particleSystems.push(ps);
+                }
+            }
+        }
+    });
+    BABYLON.Engine.prototype.createEffectForParticles = function (fragmentName, uniformsNames, samplers, defines, fallbacks, onCompiled, onError) {
+        if (uniformsNames === void 0) { uniformsNames = []; }
+        if (samplers === void 0) { samplers = []; }
+        if (defines === void 0) { defines = ""; }
+        var attributesNamesOrOptions = BABYLON.ParticleSystem._GetAttributeNamesOrOptions();
+        var effectCreationOption = BABYLON.ParticleSystem._GetEffectCreationOptions();
+        if (defines.indexOf(" BILLBOARD") === -1) {
+            defines += "\n#define BILLBOARD\n";
+        }
+        if (samplers.indexOf("diffuseSampler") === -1) {
+            samplers.push("diffuseSampler");
+        }
+        return this.createEffect({
+            vertex: "particles",
+            fragmentElement: fragmentName
+        }, attributesNamesOrOptions, effectCreationOption.concat(uniformsNames), samplers, defines, fallbacks, onCompiled, onError);
+    };
+})(BABYLON || (BABYLON = {}));
+
+//# sourceMappingURL=babylon.particleSystemComponent.js.map
+
 var __assign = (this && this.__assign) || Object.assign || function(t) {
     for (var s, i = 1, n = arguments.length; i < n; i++) {
         s = arguments[i];
@@ -69000,20 +69002,6 @@ var BABYLON;
                     currentMesh.computeWorldMatrix(true);
                 }
             }
-            // Particles Systems
-            if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {
-                for (index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {
-                    var parsedParticleSystem = parsedData.particleSystems[index];
-                    if (parsedParticleSystem.activeParticleCount) {
-                        var ps = BABYLON.GPUParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
-                        container.particleSystems.push(ps);
-                    }
-                    else {
-                        var ps = BABYLON.ParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
-                        container.particleSystems.push(ps);
-                    }
-                }
-            }
             // Shadows
             if (parsedData.shadowGenerators !== undefined && parsedData.shadowGenerators !== null) {
                 for (index = 0, cache = parsedData.shadowGenerators.length; index < cache; index++) {
@@ -84875,7 +84863,7 @@ var BABYLON;
         this.lensFlareSystems.push(newLensFlareSystem);
     };
     /**
-     * Defines the layer scene component responsible to manage any layers
+     * Defines the lens flare scene component responsible to manage any lens flares
      * in a given scene.
      */
     var LensFlareSystemSceneComponent = /** @class */ (function () {
@@ -84889,7 +84877,7 @@ var BABYLON;
              */
             this.name = BABYLON.SceneComponentConstants.NAME_LENSFLARESYSTEM;
             this.scene = scene;
-            this._lensFlareSystems = scene.lensFlareSystems = new Array();
+            scene.lensFlareSystems = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -84937,8 +84925,9 @@ var BABYLON;
         LensFlareSystemSceneComponent.prototype.serialize = function (serializationObject) {
             // Lens flares
             serializationObject.lensFlareSystems = [];
-            for (var _i = 0, _a = this._lensFlareSystems; _i < _a.length; _i++) {
-                var lensFlareSystem = _a[_i];
+            var lensFlareSystems = this.scene.lensFlareSystems;
+            for (var _i = 0, lensFlareSystems_1 = lensFlareSystems; _i < lensFlareSystems_1.length; _i++) {
+                var lensFlareSystem = lensFlareSystems_1[_i];
                 serializationObject.lensFlareSystems.push(lensFlareSystem.serialize());
             }
         };
@@ -84946,21 +84935,23 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         LensFlareSystemSceneComponent.prototype.dispose = function () {
-            while (this._lensFlareSystems.length) {
-                this._lensFlareSystems[0].dispose();
+            var lensFlareSystems = this.scene.lensFlareSystems;
+            while (lensFlareSystems.length) {
+                lensFlareSystems[0].dispose();
             }
         };
         LensFlareSystemSceneComponent.prototype._draw = function (camera) {
             // Lens flares
             if (this.scene.lensFlaresEnabled) {
-                BABYLON.Tools.StartPerformanceCounter("Lens flares", this._lensFlareSystems.length > 0);
-                for (var _i = 0, _a = this._lensFlareSystems; _i < _a.length; _i++) {
-                    var lensFlareSystem = _a[_i];
+                var lensFlareSystems = this.scene.lensFlareSystems;
+                BABYLON.Tools.StartPerformanceCounter("Lens flares", lensFlareSystems.length > 0);
+                for (var _i = 0, lensFlareSystems_2 = lensFlareSystems; _i < lensFlareSystems_2.length; _i++) {
+                    var lensFlareSystem = lensFlareSystems_2[_i];
                     if ((camera.layerMask & lensFlareSystem.layerMask) !== 0) {
                         lensFlareSystem.render();
                     }
                 }
-                BABYLON.Tools.EndPerformanceCounter("Lens flares", this._lensFlareSystems.length > 0);
+                BABYLON.Tools.EndPerformanceCounter("Lens flares", lensFlareSystems.length > 0);
             }
         };
         return LensFlareSystemSceneComponent;
@@ -97054,7 +97045,7 @@ var BABYLON;
             this._previousStencilState = false;
             this.scene = scene;
             this._engine = scene.getEngine();
-            this._effectLayers = scene.effectLayers = new Array();
+            scene.effectLayers = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -97072,8 +97063,9 @@ var BABYLON;
          * context lost for instance.
          */
         EffectLayerSceneComponent.prototype.rebuild = function () {
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var effectLayer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
+                var effectLayer = layers_1[_i];
                 effectLayer._rebuild();
             }
         };
@@ -97084,8 +97076,9 @@ var BABYLON;
         EffectLayerSceneComponent.prototype.serialize = function (serializationObject) {
             // Effect layers
             serializationObject.effectLayers = [];
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var effectLayer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {
+                var effectLayer = layers_2[_i];
                 if (effectLayer.serialize) {
                     serializationObject.effectLayers.push(effectLayer.serialize());
                 }
@@ -97121,18 +97114,20 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         EffectLayerSceneComponent.prototype.dispose = function () {
-            while (this._effectLayers.length) {
-                this._effectLayers[0].dispose();
+            var layers = this.scene.effectLayers;
+            while (layers.length) {
+                layers[0].dispose();
             }
         };
         EffectLayerSceneComponent.prototype._isReadyForMesh = function (mesh, hardwareInstancedRendering) {
-            for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                var layer = _a[_i];
+            var layers = this.scene.effectLayers;
+            for (var _i = 0, layers_3 = layers; _i < layers_3.length; _i++) {
+                var layer = layers_3[_i];
                 if (!layer.hasMesh(mesh)) {
                     continue;
                 }
-                for (var _b = 0, _c = mesh.subMeshes; _b < _c.length; _b++) {
-                    var subMesh = _c[_b];
+                for (var _a = 0, _b = mesh.subMeshes; _a < _b.length; _a++) {
+                    var subMesh = _b[_a];
                     if (!layer.isReady(subMesh, hardwareInstancedRendering)) {
                         return false;
                     }
@@ -97143,10 +97138,11 @@ var BABYLON;
         EffectLayerSceneComponent.prototype._renderMainTexture = function (camera) {
             this._renderEffects = false;
             this._needStencil = false;
-            if (this._effectLayers && this._effectLayers.length > 0) {
+            var layers = this.scene.effectLayers;
+            if (layers && layers.length > 0) {
                 this._previousStencilState = this._engine.getStencilBuffer();
-                for (var _i = 0, _a = this._effectLayers; _i < _a.length; _i++) {
-                    var effectLayer = _a[_i];
+                for (var _i = 0, layers_4 = layers; _i < layers_4.length; _i++) {
+                    var effectLayer = layers_4[_i];
                     if (effectLayer.shouldRender() &&
                         (!effectLayer.camera ||
                             (effectLayer.camera.cameraRigMode === BABYLON.Camera.RIG_MODE_NONE && camera === effectLayer.camera) ||
@@ -97178,8 +97174,9 @@ var BABYLON;
         EffectLayerSceneComponent.prototype._draw = function (renderingGroupId) {
             if (this._renderEffects) {
                 this._engine.setDepthBuffer(false);
-                for (var i = 0; i < this._effectLayers.length; i++) {
-                    var effectLayer = this._effectLayers[i];
+                var layers = this.scene.effectLayers;
+                for (var i = 0; i < layers.length; i++) {
+                    var effectLayer = layers[i];
                     if (effectLayer.renderingGroupId === renderingGroupId) {
                         if (effectLayer.shouldRender()) {
                             effectLayer.render();
@@ -99989,7 +99986,7 @@ var BABYLON;
             this.name = BABYLON.SceneComponentConstants.NAME_LAYER;
             this.scene = scene;
             this._engine = scene.getEngine();
-            this._layers = scene.layers = new Array();
+            scene.layers = new Array();
         }
         /**
          * Registers the component in a given scene
@@ -100003,8 +100000,9 @@ var BABYLON;
          * context lost for instance.
          */
         LayerSceneComponent.prototype.rebuild = function () {
-            for (var _i = 0, _a = this._layers; _i < _a.length; _i++) {
-                var layer = _a[_i];
+            var layers = this.scene.layers;
+            for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
+                var layer = layers_1[_i];
                 layer._rebuild();
             }
         };
@@ -100012,16 +100010,18 @@ var BABYLON;
          * Disposes the component and the associated ressources.
          */
         LayerSceneComponent.prototype.dispose = function () {
-            while (this._layers.length) {
-                this._layers[0].dispose();
+            var layers = this.scene.layers;
+            while (layers.length) {
+                layers[0].dispose();
             }
         };
         LayerSceneComponent.prototype._draw = function (camera, isBackground) {
-            if (this._layers.length) {
+            var layers = this.scene.layers;
+            if (layers.length) {
                 this._engine.setDepthBuffer(false);
                 var cameraLayerMask = camera.layerMask;
-                for (var _i = 0, _a = this._layers; _i < _a.length; _i++) {
-                    var layer = _a[_i];
+                for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {
+                    var layer = layers_2[_i];
                     if (layer.isBackground === isBackground && ((layer.layerMask & cameraLayerMask) !== 0)) {
                         layer.render();
                     }

+ 3 - 3
dist/preview release/loaders/babylon.glTF1FileLoader.d.ts

@@ -78,7 +78,7 @@ declare module BABYLON {
         readonly state: Nullable<GLTFLoaderState>;
         importMeshAsync: (meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void) => Promise<{
             meshes: AbstractMesh[];
-            particleSystems: ParticleSystem[];
+            particleSystems: IParticleSystem[];
             skeletons: Skeleton[];
             animationGroups: AnimationGroup[];
         }>;
@@ -255,7 +255,7 @@ declare module BABYLON {
          */
         importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{
             meshes: AbstractMesh[];
-            particleSystems: ParticleSystem[];
+            particleSystems: IParticleSystem[];
             skeletons: Skeleton[];
             animationGroups: AnimationGroup[];
         }>;
@@ -730,7 +730,7 @@ declare module BABYLON.GLTF1 {
         */
         importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{
             meshes: AbstractMesh[];
-            particleSystems: ParticleSystem[];
+            particleSystems: IParticleSystem[];
             skeletons: Skeleton[];
             animationGroups: AnimationGroup[];
         }>;

+ 3 - 3
dist/preview release/loaders/babylon.glTF2FileLoader.d.ts

@@ -78,7 +78,7 @@ declare module BABYLON {
         readonly state: Nullable<GLTFLoaderState>;
         importMeshAsync: (meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void) => Promise<{
             meshes: AbstractMesh[];
-            particleSystems: ParticleSystem[];
+            particleSystems: IParticleSystem[];
             skeletons: Skeleton[];
             animationGroups: AnimationGroup[];
         }>;
@@ -255,7 +255,7 @@ declare module BABYLON {
          */
         importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{
             meshes: AbstractMesh[];
-            particleSystems: ParticleSystem[];
+            particleSystems: IParticleSystem[];
             skeletons: Skeleton[];
             animationGroups: AnimationGroup[];
         }>;
@@ -471,7 +471,7 @@ declare module BABYLON.GLTF2 {
         dispose(): void;
         importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{
             meshes: AbstractMesh[];
-            particleSystems: ParticleSystem[];
+            particleSystems: IParticleSystem[];
             skeletons: Skeleton[];
             animationGroups: AnimationGroup[];
         }>;

+ 1 - 1
dist/preview release/loaders/babylon.objFileLoader.d.ts

@@ -59,7 +59,7 @@ declare module BABYLON {
         private _loadMTL(url, rootUrl, onSuccess);
         importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{
             meshes: AbstractMesh[];
-            particleSystems: ParticleSystem[];
+            particleSystems: IParticleSystem[];
             skeletons: Skeleton[];
             animationGroups: AnimationGroup[];
         }>;

+ 1 - 1
dist/preview release/loaders/babylon.stlFileLoader.d.ts

@@ -7,7 +7,7 @@ declare module BABYLON {
         vertexPattern: RegExp;
         name: string;
         extensions: ISceneLoaderPluginExtensions;
-        importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: Nullable<AbstractMesh[]>, particleSystems: Nullable<ParticleSystem[]>, skeletons: Nullable<Skeleton[]>): boolean;
+        importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: Nullable<AbstractMesh[]>, particleSystems: Nullable<IParticleSystem[]>, skeletons: Nullable<Skeleton[]>): boolean;
         load(scene: Scene, data: any, rootUrl: string): boolean;
         loadAssetContainer(scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): AssetContainer;
         private isBinary(data);

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 1094
dist/preview release/proceduralTexturesLibrary/babylonjs.proceduralTextures.js


+ 0 - 291
dist/preview release/proceduralTexturesLibrary/babylonjs.proceduralTextures.module.d.ts

@@ -1,291 +0,0 @@
-
-
-declare module 'babylonjs-procedural-textures' { 
-    export = BABYLON; 
-}
-
-declare module BABYLON {
-    class WoodProceduralTexture extends ProceduralTexture {
-        private _ampScale;
-        private _woodColor;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        ampScale: number;
-        woodColor: Color3;
-        /**
-         * Serializes this wood procedural texture
-         * @returns a serialized wood procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Wood Procedural Texture from parsed wood procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing wood procedural texture information
-         * @returns a parsed Wood Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): WoodProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class FireProceduralTexture extends ProceduralTexture {
-        private _time;
-        private _speed;
-        private _autoGenerateTime;
-        private _fireColors;
-        private _alphaThreshold;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        render(useCameraPostProcess?: boolean): void;
-        static readonly PurpleFireColors: Color3[];
-        static readonly GreenFireColors: Color3[];
-        static readonly RedFireColors: Color3[];
-        static readonly BlueFireColors: Color3[];
-        autoGenerateTime: boolean;
-        fireColors: Color3[];
-        time: number;
-        speed: Vector2;
-        alphaThreshold: number;
-        /**
-         * Serializes this fire procedural texture
-         * @returns a serialized fire procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Fire Procedural Texture from parsed fire procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing fire procedural texture information
-         * @returns a parsed Fire Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): FireProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class CloudProceduralTexture extends ProceduralTexture {
-        private _skyColor;
-        private _cloudColor;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        skyColor: Color4;
-        cloudColor: Color4;
-        /**
-         * Serializes this cloud procedural texture
-         * @returns a serialized cloud procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Cloud Procedural Texture from parsed cloud procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing cloud procedural texture information
-         * @returns a parsed Cloud Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): CloudProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class GrassProceduralTexture extends ProceduralTexture {
-        private _grassColors;
-        private _groundColor;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        grassColors: Color3[];
-        groundColor: Color3;
-        /**
-         * Serializes this grass procedural texture
-         * @returns a serialized grass procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Grass Procedural Texture from parsed grass procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing grass procedural texture information
-         * @returns a parsed Grass Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): GrassProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class RoadProceduralTexture extends ProceduralTexture {
-        private _roadColor;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        roadColor: Color3;
-        /**
-         * Serializes this road procedural texture
-         * @returns a serialized road procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Road Procedural Texture from parsed road procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing road procedural texture information
-         * @returns a parsed Road Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): RoadProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class BrickProceduralTexture extends ProceduralTexture {
-        private _numberOfBricksHeight;
-        private _numberOfBricksWidth;
-        private _jointColor;
-        private _brickColor;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        numberOfBricksHeight: number;
-        numberOfBricksWidth: number;
-        jointColor: Color3;
-        brickColor: Color3;
-        /**
-         * Serializes this brick procedural texture
-         * @returns a serialized brick procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Brick Procedural Texture from parsed brick procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing brick procedural texture information
-         * @returns a parsed Brick Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): BrickProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class MarbleProceduralTexture extends ProceduralTexture {
-        private _numberOfTilesHeight;
-        private _numberOfTilesWidth;
-        private _amplitude;
-        private _jointColor;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        numberOfTilesHeight: number;
-        amplitude: number;
-        numberOfTilesWidth: number;
-        jointColor: Color3;
-        /**
-         * Serializes this marble procedural texture
-         * @returns a serialized marble procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Marble Procedural Texture from parsed marble procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing marble procedural texture information
-         * @returns a parsed Marble Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): MarbleProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class StarfieldProceduralTexture extends ProceduralTexture {
-        private _time;
-        private _alpha;
-        private _beta;
-        private _zoom;
-        private _formuparam;
-        private _stepsize;
-        private _tile;
-        private _brightness;
-        private _darkmatter;
-        private _distfading;
-        private _saturation;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        time: number;
-        alpha: number;
-        beta: number;
-        formuparam: number;
-        stepsize: number;
-        zoom: number;
-        tile: number;
-        brightness: number;
-        darkmatter: number;
-        distfading: number;
-        saturation: number;
-        /**
-         * Serializes this starfield procedural texture
-         * @returns a serialized starfield procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Starfield Procedural Texture from parsed startfield procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing startfield procedural texture information
-         * @returns a parsed Starfield Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): StarfieldProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class NormalMapProceduralTexture extends ProceduralTexture {
-        private _baseTexture;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        render(useCameraPostProcess?: boolean): void;
-        resize(size: any, generateMipMaps: any): void;
-        baseTexture: Texture;
-        /**
-         * Serializes this normal map procedural texture
-         * @returns a serialized normal map procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Normal Map Procedural Texture from parsed normal map procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing normal map procedural texture information
-         * @returns a parsed Normal Map Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): NormalMapProceduralTexture;
-    }
-}
-
-
-declare module BABYLON {
-    class PerlinNoiseProceduralTexture extends ProceduralTexture {
-        time: number;
-        timeScale: number;
-        translationSpeed: number;
-        private _currentTranslation;
-        constructor(name: string, size: number, scene: Scene, fallbackTexture?: Texture, generateMipMaps?: boolean);
-        updateShaderUniforms(): void;
-        render(useCameraPostProcess?: boolean): void;
-        resize(size: any, generateMipMaps: any): void;
-        /**
-         * Serializes this perlin noise procedural texture
-         * @returns a serialized perlin noise procedural texture object
-         */
-        serialize(): any;
-        /**
-         * Creates a Perlin Noise Procedural Texture from parsed perlin noise procedural texture data
-         * @param parsedTexture defines parsed texture data
-         * @param scene defines the current scene
-         * @param rootUrl defines the root URL containing perlin noise procedural texture information
-         * @returns a parsed Perlin Noise Procedural Texture
-         */
-        static Parse(parsedTexture: any, scene: Scene, rootUrl: string): PerlinNoiseProceduralTexture;
-    }
-}

+ 1 - 1
loaders/src/OBJ/babylon.objFileLoader.ts

@@ -252,7 +252,7 @@ module BABYLON {
                 () => { console.warn("Error - Unable to load " + pathOfFile); });
         }
 
-        public importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{ meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {
+        public importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{ meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {
             //get the meshes from OBJ file
             return this._parseSolid(meshesNames, scene, data, rootUrl).then(meshes => {
                 return {

+ 1 - 1
loaders/src/STL/babylon.stlFileLoader.ts

@@ -18,7 +18,7 @@ module BABYLON {
             ".stl": { isBinary: true },
         };
 
-        public importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: Nullable<AbstractMesh[]>, particleSystems: Nullable<ParticleSystem[]>, skeletons: Nullable<Skeleton[]>): boolean {
+        public importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: Nullable<AbstractMesh[]>, particleSystems: Nullable<IParticleSystem[]>, skeletons: Nullable<Skeleton[]>): boolean {
             var matches;
 
             if (typeof data !== "string") {

+ 1 - 1
loaders/src/glTF/1.0/babylon.glTFLoader.ts

@@ -1640,7 +1640,7 @@ module BABYLON.GLTF1 {
         * @param onProgress event that fires when loading progress has occured
         * @returns a promise containg the loaded meshes, particles, skeletons and animations
         */
-        public importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{ meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {
+        public importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{ meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {
             return new Promise((resolve, reject) => {
                 this._importMeshAsync(meshesNames, scene, data, rootUrl, (meshes, skeletons) => {
                     resolve({

+ 1 - 1
loaders/src/glTF/2.0/babylon.glTFLoader.ts

@@ -95,7 +95,7 @@ module BABYLON.GLTF2 {
             this._parent._clear();
         }
 
-        public importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{ meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {
+        public importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{ meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {
             return Promise.resolve().then(() => {
                 this._babylonScene = scene;
                 this._rootUrl = rootUrl;

+ 2 - 2
loaders/src/glTF/babylon.glTFFileLoader.ts

@@ -89,7 +89,7 @@ module BABYLON {
     /** @hidden */
     export interface IGLTFLoader extends IDisposable {
         readonly state: Nullable<GLTFLoaderState>;
-        importMeshAsync: (meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void) => Promise<{ meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }>;
+        importMeshAsync: (meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void) => Promise<{ meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }>;
         loadAsync: (scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void) => Promise<void>;
     }
 
@@ -425,7 +425,7 @@ module BABYLON {
          * @param onProgress event that fires when loading progress has occured
          * @returns a promise containg the loaded meshes, particles, skeletons and animations
          */
-        public importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{ meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {
+        public importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{ meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {
             return Promise.resolve().then(() => {
                 const loaderData = this._parse(data);
                 this._loader = this._getLoader(loaderData);

+ 0 - 36
src/Engine/babylon.engine.ts

@@ -3436,42 +3436,6 @@
         }
 
         /**
-         * Create an effect to use with particle systems.
-         * Please note that some parameters like animation sheets or not being billboard are not supported in this configuration
-         * @param fragmentName defines the base name of the effect (The name of file without .fragment.fx)
-         * @param uniformsNames defines a list of attribute names 
-         * @param samplers defines an array of string used to represent textures
-         * @param defines defines the string containing the defines to use to compile the shaders
-         * @param fallbacks defines the list of potential fallbacks to use if shader conmpilation fails
-         * @param onCompiled defines a function to call when the effect creation is successful
-         * @param onError defines a function to call when the effect creation has failed
-         * @returns the new Effect
-         */
-        public createEffectForParticles(fragmentName: string, uniformsNames: string[] = [], samplers: string[] = [], defines = "", fallbacks?: EffectFallbacks,
-            onCompiled?: (effect: Effect) => void, onError?: (effect: Effect, errors: string) => void): Effect {
-
-            var attributesNamesOrOptions = ParticleSystem._GetAttributeNamesOrOptions();
-            var effectCreationOption = ParticleSystem._GetEffectCreationOptions();
-
-            if (defines.indexOf(" BILLBOARD") === -1) {
-                defines += "\n#define BILLBOARD\n";
-            }
-
-            if (samplers.indexOf("diffuseSampler") === -1) {
-                samplers.push("diffuseSampler");
-            }
-
-            return this.createEffect(
-                {
-                    vertex: "particles",
-                    fragmentElement: fragmentName
-                },
-                attributesNamesOrOptions,
-                effectCreationOption.concat(uniformsNames),
-                samplers, defines, fallbacks, onCompiled, onError);
-        }
-
-        /**
          * Directly creates a webGL program
          * @param vertexCode defines the vertex shader code to use
          * @param fragmentCode defines the fragment shader code to use

+ 19 - 14
src/Layer/babylon.effectLayerSceneComponent.ts

@@ -60,8 +60,6 @@
         public scene: Scene
 
         private _engine: Engine;
-        private _effectLayers: Array<EffectLayer>;
-
         private _renderEffects = false;
         private _needStencil = false;
         private _previousStencilState = false;
@@ -73,7 +71,7 @@
         constructor(scene: Scene) {
             this.scene = scene;
             this._engine = scene.getEngine();
-            this._effectLayers = scene.effectLayers = new Array<EffectLayer>();
+            scene.effectLayers = new Array<EffectLayer>();
         }
 
         /**
@@ -97,7 +95,8 @@
          * context lost for instance.
          */
         public rebuild(): void {
-            for (let effectLayer of this._effectLayers) {
+            let layers = this.scene.effectLayers;
+            for (let effectLayer of layers) {
                 effectLayer._rebuild();
             }
         }
@@ -110,7 +109,8 @@
             // Effect layers
             serializationObject.effectLayers = [];
 
-            for (let effectLayer of this._effectLayers) {
+            let layers = this.scene.effectLayers;
+            for (let effectLayer of layers) {
                 if (effectLayer.serialize) {
                     serializationObject.effectLayers.push(effectLayer.serialize());
                 }
@@ -146,14 +146,16 @@
         /**
          * Disposes the component and the associated ressources.
          */
-        public dispose(): void {
-            while (this._effectLayers.length) {
-                this._effectLayers[0].dispose();
+        public dispose(): void {            
+            let layers = this.scene.effectLayers;
+            while (layers.length) {
+                layers[0].dispose();
             }
         }
 
-        private _isReadyForMesh(mesh: AbstractMesh, hardwareInstancedRendering: boolean): boolean {
-            for (let layer of this._effectLayers) {
+        private _isReadyForMesh(mesh: AbstractMesh, hardwareInstancedRendering: boolean): boolean {            
+            let layers = this.scene.effectLayers;
+            for (let layer of layers) {
                 if (!layer.hasMesh(mesh)) {
                     continue;
                 }
@@ -171,9 +173,10 @@
             this._renderEffects = false;
             this._needStencil = false;
 
-            if (this._effectLayers && this._effectLayers.length > 0) {
+            let layers = this.scene.effectLayers;
+            if (layers && layers.length > 0) {
                 this._previousStencilState = this._engine.getStencilBuffer();
-                for (let effectLayer of this._effectLayers) {
+                for (let effectLayer of layers) {
                     if (effectLayer.shouldRender() &&
                         (!effectLayer.camera ||
                             (effectLayer.camera.cameraRigMode === Camera.RIG_MODE_NONE && camera === effectLayer.camera) ||
@@ -211,8 +214,10 @@
         private _draw(renderingGroupId: number): void {
             if (this._renderEffects) {
                 this._engine.setDepthBuffer(false);
-                for (let i = 0; i < this._effectLayers.length; i++) {
-                    const effectLayer = this._effectLayers[i];
+                
+                let layers = this.scene.effectLayers;
+                for (let i = 0; i < layers.length; i++) {
+                    const effectLayer = layers[i];
                     if (effectLayer.renderingGroupId === renderingGroupId) {
                         if (effectLayer.shouldRender()) {
                             effectLayer.render();

+ 13 - 8
src/Layer/babylon.layerSceneComponent.ts

@@ -22,7 +22,6 @@
         public scene: Scene;
 
         private _engine: Engine;
-        private _layers: Array<Layer>;
 
         /**
          * Creates a new instance of the component for the given scene
@@ -31,7 +30,7 @@
         constructor(scene: Scene) {
             this.scene = scene;
             this._engine = scene.getEngine();
-            this._layers = scene.layers = new Array<Layer>();
+            scene.layers = new Array<Layer>();
         }
 
         /**
@@ -47,7 +46,9 @@
          * context lost for instance.
          */
         public rebuild(): void {
-            for (let layer of this._layers) {
+            let layers = this.scene.layers;
+
+            for (let layer of layers) {
                 layer._rebuild();
             }
         }
@@ -56,16 +57,20 @@
          * Disposes the component and the associated ressources.
          */
         public dispose(): void {
-            while (this._layers.length) {
-                this._layers[0].dispose();
+            let layers = this.scene.layers;
+
+            while (layers.length) {
+                layers[0].dispose();
             }
         }
 
-        private _draw(camera: Camera, isBackground: boolean): void {
-            if (this._layers.length) {
+        private _draw(camera: Camera, isBackground: boolean): void {            
+            let layers = this.scene.layers;
+
+            if (layers.length) {
                 this._engine.setDepthBuffer(false);
                 const cameraLayerMask = camera.layerMask;
-                for (let layer of this._layers) {
+                for (let layer of layers) {
                     if (layer.isBackground === isBackground && ((layer.layerMask & cameraLayerMask) !== 0)) {
                         layer.render();
                     }

+ 13 - 11
src/LensFlare/babylon.lensFlareSystemSceneComponent.ts

@@ -17,6 +17,7 @@
          * @see http://doc.babylonjs.com/how_to/how_to_use_lens_flares
          */         
         lensFlareSystems: Array<LensFlareSystem>;
+
         /**
          * Removes the given lens flare system from this scene.
          * @param toRemove The lens flare system to remove
@@ -78,7 +79,7 @@
     }
 
     /**
-     * Defines the layer scene component responsible to manage any layers
+     * Defines the lens flare scene component responsible to manage any lens flares
      * in a given scene.
      */
     export class LensFlareSystemSceneComponent implements ISceneSerializableComponent {
@@ -92,8 +93,6 @@
          */
         public scene: Scene;
 
-        private _lensFlareSystems: Array<LensFlareSystem>;
-
         /**
          * Creates a new instance of the component for the given scene
          * @param scene Defines the scene to register the component in
@@ -101,7 +100,7 @@
         constructor(scene: Scene) {
             this.scene = scene;
 
-            this._lensFlareSystems = scene.lensFlareSystems = new Array<LensFlareSystem>();
+            scene.lensFlareSystems = new Array<LensFlareSystem>();
         }
 
         /**
@@ -152,7 +151,8 @@
         public serialize(serializationObject: any): void {
             // Lens flares
             serializationObject.lensFlareSystems = [];
-            for (let lensFlareSystem of this._lensFlareSystems) {
+            let lensFlareSystems = this.scene.lensFlareSystems;
+            for (let lensFlareSystem of lensFlareSystems) {
                 serializationObject.lensFlareSystems.push(lensFlareSystem.serialize());
             }
         }
@@ -161,21 +161,23 @@
          * Disposes the component and the associated ressources.
          */
         public dispose(): void {
-            while (this._lensFlareSystems.length) {
-                this._lensFlareSystems[0].dispose();
+            let lensFlareSystems = this.scene.lensFlareSystems;
+            while (lensFlareSystems.length) {
+                lensFlareSystems[0].dispose();
             }
         }
 
         private _draw(camera: Camera): void {
             // Lens flares
-            if (this.scene.lensFlaresEnabled) {
-                Tools.StartPerformanceCounter("Lens flares", this._lensFlareSystems.length > 0);
-                for (let lensFlareSystem of this._lensFlareSystems) {
+            if (this.scene.lensFlaresEnabled) {                
+                let lensFlareSystems = this.scene.lensFlareSystems;
+                Tools.StartPerformanceCounter("Lens flares", lensFlareSystems.length > 0);
+                for (let lensFlareSystem of lensFlareSystems) {
                     if ((camera.layerMask & lensFlareSystem.layerMask) !== 0) {
                         lensFlareSystem.render();
                     }
                 }
-                Tools.EndPerformanceCounter("Lens flares", this._lensFlareSystems.length > 0);
+                Tools.EndPerformanceCounter("Lens flares", lensFlareSystems.length > 0);
             }
         }
     }

+ 1 - 16
src/Loading/Plugins/babylon.babylonFileLoader.ts

@@ -293,21 +293,6 @@
                 }
             }
 
-            // Particles Systems
-            if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {
-                for (index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {
-                    var parsedParticleSystem = parsedData.particleSystems[index];
-
-                    if (parsedParticleSystem.activeParticleCount) {
-                        let ps = GPUParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
-                        container.particleSystems.push(ps);
-                    } else {
-                        let ps = ParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
-                        container.particleSystems.push(ps);
-                    }
-                }
-            }
-
             // Shadows
             if (parsedData.shadowGenerators !== undefined && parsedData.shadowGenerators !== null) {
                 for (index = 0, cache = parsedData.shadowGenerators.length; index < cache; index++) {
@@ -384,7 +369,7 @@
 
             return false;
         },
-        importMesh: (meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[], onError?: (message: string, exception?: any) => void): boolean => {
+        importMesh: (meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], onError?: (message: string, exception?: any) => void): boolean => {
             // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details
             // when SceneLoader.debugLogging = true (default), or exception encountered.
             // Everything stored in var log instead of writing separate lines to support only writing in exception,

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 6 - 6
src/Loading/babylon.sceneLoader.ts


+ 1 - 1
src/Particles/babylon.IParticleSystem.ts

@@ -1,6 +1,6 @@
 module BABYLON {
     /**
-     * Interface representing a particle system in Babylon.
+     * Interface representing a particle system in Babylon.js.
      * This groups the common functionalities that needs to be implemented in order to create a particle system.
      * A particle system represents a way to manage particles from their emission to their animation and rendering.
      */

+ 1 - 1
src/Particles/babylon.particleHelper.ts

@@ -48,7 +48,7 @@ module BABYLON {
          * Please note that the emitter shape is not exported
          * @param system defines the particle systems to export
          */
-        public static ExportSet(systems: ParticleSystem[]): ParticleSystemSet {
+        public static ExportSet(systems: IParticleSystem[]): ParticleSystemSet {
             var set = new ParticleSystemSet();
 
             for (var system of systems) {

+ 60 - 0
src/Particles/babylon.particleSystemComponent.ts

@@ -0,0 +1,60 @@
+module BABYLON {
+    // Adds the parser to the scene parsers.
+    AbstractScene.AddParser(SceneComponentConstants.NAME_PARTICLESYSTEM, (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => {
+        // Particles Systems
+        if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {
+            for (var index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {
+                var parsedParticleSystem = parsedData.particleSystems[index];
+
+                if (parsedParticleSystem.activeParticleCount) {
+                    let ps = GPUParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
+                    container.particleSystems.push(ps);
+                } else {
+                    let ps = ParticleSystem.Parse(parsedParticleSystem, scene, rootUrl);
+                    container.particleSystems.push(ps);
+                }
+            }
+        }
+    });
+
+    export interface Engine {
+        /**
+         * Create an effect to use with particle systems.
+         * Please note that some parameters like animation sheets or not being billboard are not supported in this configuration
+         * @param fragmentName defines the base name of the effect (The name of file without .fragment.fx)
+         * @param uniformsNames defines a list of attribute names 
+         * @param samplers defines an array of string used to represent textures
+         * @param defines defines the string containing the defines to use to compile the shaders
+         * @param fallbacks defines the list of potential fallbacks to use if shader conmpilation fails
+         * @param onCompiled defines a function to call when the effect creation is successful
+         * @param onError defines a function to call when the effect creation has failed
+         * @returns the new Effect
+         */
+        createEffectForParticles(fragmentName: string, uniformsNames: string[], samplers: string[], defines: string, fallbacks?: EffectFallbacks,
+            onCompiled?: (effect: Effect) => void, onError?: (effect: Effect, errors: string) => void): Effect
+    }
+
+    Engine.prototype.createEffectForParticles = function(fragmentName: string, uniformsNames: string[] = [], samplers: string[] = [], defines = "", fallbacks?: EffectFallbacks,
+        onCompiled?: (effect: Effect) => void, onError?: (effect: Effect, errors: string) => void): Effect {
+
+        var attributesNamesOrOptions = ParticleSystem._GetAttributeNamesOrOptions();
+        var effectCreationOption = ParticleSystem._GetEffectCreationOptions();
+
+        if (defines.indexOf(" BILLBOARD") === -1) {
+            defines += "\n#define BILLBOARD\n";
+        }
+
+        if (samplers.indexOf("diffuseSampler") === -1) {
+            samplers.push("diffuseSampler");
+        }
+
+        return this.createEffect(
+            {
+                vertex: "particles",
+                fragmentElement: fragmentName
+            },
+            attributesNamesOrOptions,
+            effectCreationOption.concat(uniformsNames),
+            samplers, defines, fallbacks, onCompiled, onError);
+    }
+} 

+ 2 - 2
src/Tools/babylon.assetsManager.ts

@@ -210,7 +210,7 @@ module BABYLON {
         /**
          * Gets the list of loaded particle systems
          */
-        public loadedParticleSystems: Array<ParticleSystem>;
+        public loadedParticleSystems: Array<IParticleSystem>;
         /**
          * Gets the list of loaded skeletons
          */
@@ -261,7 +261,7 @@ module BABYLON {
          */
         public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {
             SceneLoader.ImportMesh(this.meshesNames, this.rootUrl, this.sceneFilename, scene,
-                (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => {
+                (meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[]) => {
                     this.loadedMeshes = meshes;
                     this.loadedParticleSystems = particleSystems;
                     this.loadedSkeletons = skeletons;

+ 0 - 6
src/babylon.assetContainer.ts

@@ -38,9 +38,6 @@ module BABYLON {
             this.skeletons.forEach((o) => {
                 this.scene.addSkeleton(o);
             });
-            this.particleSystems.forEach((o) => {
-                this.scene.addParticleSystem(o);
-            });
             this.animations.forEach((o) => {
                 this.scene.addAnimation(o);
             });
@@ -95,9 +92,6 @@ module BABYLON {
             this.skeletons.forEach((o) => {
                 this.scene.removeSkeleton(o);
             });
-            this.particleSystems.forEach((o) => {
-                this.scene.removeParticleSystem(o);
-            });
             this.animations.forEach((o) => {
                 this.scene.removeAnimation(o);
             });

+ 1 - 0
src/babylon.sceneComponent.ts

@@ -8,6 +8,7 @@
         public static readonly NAME_LAYER = "Layer";
         public static readonly NAME_LENSFLARESYSTEM = "LensFlareSystem";
         public static readonly NAME_BOUNDINGBOXRENDERER = "BoundingBoxRenderer";
+        public static readonly NAME_PARTICLESYSTEM = "ParticleSystem";
 
         public static readonly STEP_ISREADYFORMESH_EFFECTLAYER = 0;