Просмотр исходного кода

Updating gulp completely

Now supports the web worker creation, shaders directory, icnluding a
config file that is easily adjustable.
This can replace the standard build using visual studio!
Raanan Weber 10 лет назад
Родитель
Сommit
a28712c606
6 измененных файлов с 337 добавлено и 300 удалено
  1. 167 0
      Tools/Gulp/config.json
  2. 0 48
      Tools/Gulp/gulp-shaders.js
  3. 77 0
      Tools/Gulp/gulp-srcToVariable.js
  4. 69 219
      Tools/Gulp/gulpfile.js
  5. 14 12
      Tools/Gulp/package.json
  6. 10 21
      Tools/Gulp/readme.md

+ 167 - 0
Tools/Gulp/config.json

@@ -0,0 +1,167 @@
+{
+    "build" : {
+        "filename" : "babylon.js",
+        "minSuffix" : ".min",
+        "declarationFilename" : "babylon.d.ts",
+        "outputDirectory" : "build/"
+    },
+    "core" : {
+        "typescript" : [
+            "../../Babylon/**/*.ts",
+            "../../References/**/*.d.ts"
+        ],
+        "files" : [
+            "../../Babylon/Math/babylon.math.js",
+            "../../Babylon/Tools/babylon.database.js",
+            "../../Babylon/Tools/babylon.tools.tga.js",
+            "../../Babylon/Tools/babylon.tools.dds.js",
+            "../../Babylon/Tools/babylon.smartArray.js",
+            "../../Babylon/Tools/babylon.smartCollection.js",
+            "../../Babylon/Tools/babylon.tools.js",
+            "../../Babylon/babylon.engine.js",
+            "../../Babylon/babylon.node.js",
+            "../../Babylon/Tools/babylon.filesInput.js",
+            "../../Babylon/Collisions/babylon.pickingInfo.js",
+            "../../Babylon/Culling/babylon.boundingSphere.js",
+            "../../Babylon/Culling/babylon.boundingBox.js",
+            "../../Babylon/Culling/babylon.boundingInfo.js",
+            "../../Babylon/Mesh/babylon.abstractMesh.js",
+            "../../Babylon/Lights/babylon.light.js",
+            "../../Babylon/Lights/babylon.pointLight.js",
+            "../../Babylon/Lights/babylon.spotLight.js",
+            "../../Babylon/Lights/babylon.hemisphericLight.js",
+            "../../Babylon/Lights/babylon.directionalLight.js",
+            "../../Babylon/Lights/Shadows/babylon.shadowGenerator.js",
+            "../../Babylon/Collisions/babylon.collider.js",
+            "../../Babylon/Collisions/babylon.collisionCoordinator.js",
+            "../../Babylon/Cameras/babylon.camera.js",
+            "../../Babylon/Cameras/babylon.targetCamera.js",
+            "../../Babylon/Cameras/babylon.freeCamera.js",
+            "../../Babylon/Cameras/babylon.followCamera.js",
+            "../../Babylon/Cameras/babylon.touchCamera.js",
+            "../../Babylon/Cameras/babylon.arcRotateCamera.js",
+            "../../Babylon/Cameras/babylon.deviceOrientationCamera.js",
+            "../../Babylon/Rendering/babylon.renderingManager.js",
+            "../../Babylon/Rendering/babylon.renderingGroup.js",
+            "../../Babylon/babylon.scene.js",
+            "../../Babylon/Mesh/babylon.vertexBuffer.js",
+            "../../Babylon/Mesh/babylon.instancedMesh.js",
+            "../../Babylon/Mesh/babylon.mesh.js",
+            "../../Babylon/Mesh/babylon.subMesh.js",
+            "../../Babylon/Materials/Textures/babylon.baseTexture.js",
+            "../../Babylon/Materials/Textures/babylon.texture.js",
+            "../../Babylon/Materials/Textures/babylon.cubeTexture.js",
+            "../../Babylon/Materials/Textures/babylon.renderTargetTexture.js",
+            "../../Babylon/Materials/Textures/Procedurals/babylon.proceduralTexture.js",
+            "../../Babylon/Materials/Textures/babylon.mirrorTexture.js",
+            "../../Babylon/Materials/Textures/babylon.dynamicTexture.js",
+            "../../Babylon/Materials/Textures/babylon.videoTexture.js",
+            "../../Babylon/Materials/Textures/Procedurals/babylon.customProceduralTexture.js",
+            "../../Babylon/Materials/Textures/babylon.proceduralTexture.js",
+            "../../Babylon/Materials/Textures/Procedurals/babylon.standardProceduralTexture.js",
+            "../../Babylon/Materials/babylon.effect.js",
+            "../../Babylon/Materials/babylon.material.js",
+            "../../Babylon/Materials/babylon.standardMaterial.js",
+            "../../Babylon/Materials/babylon.multiMaterial.js",
+            "../../Babylon/Loading/babylon.sceneLoader.js",
+            "../../Babylon/Loading/Plugins/babylon.babylonFileLoader.js",
+            "../../Babylon/Sprites/babylon.spriteManager.js",
+            "../../Babylon/Sprites/babylon.sprite.js",
+            "../../Babylon/Layer/babylon.layer.js",
+            "../../Babylon/Particles/babylon.particle.js",
+            "../../Babylon/Particles/babylon.particleSystem.js",
+            "../../Babylon/Animations/babylon.animation.js",
+            "../../Babylon/Animations/babylon.animatable.js",
+            "../../Babylon/Animations/babylon.easing.js",
+            "../../Babylon/Culling/Octrees/babylon.octree.js",
+            "../../Babylon/Culling/Octrees/babylon.octreeBlock.js",
+            "../../Babylon/Bones/babylon.bone.js",
+            "../../Babylon/Bones/babylon.skeleton.js",
+            "../../Babylon/Bones/babylon.skeleton.js",
+            "../../Babylon/PostProcess/babylon.postProcess.js",
+            "../../Babylon/PostProcess/babylon.postProcessManager.js",
+            "../../Babylon/PostProcess/babylon.passPostProcess.js",
+            "../../Babylon/PostProcess/babylon.blurPostProcess.js",
+            "../../Babylon/PostProcess/babylon.refractionPostProcess.js",
+            "../../Babylon/PostProcess/babylon.blackAndWhitePostProcess.js",
+            "../../Babylon/PostProcess/babylon.convolutionPostProcess.js",
+            "../../Babylon/PostProcess/babylon.filterPostProcess.js",
+            "../../Babylon/PostProcess/babylon.fxaaPostProcess.js",
+            "../../Babylon/LensFlare/babylon.lensFlare.js",
+            "../../Babylon/LensFlare/babylon.lensFlareSystem.js",
+            "../../Babylon/Physics/Plugins/babylon.cannonJSPlugin.js",
+            "../../Babylon/Physics/Plugins/babylon.oimoJSPlugin.js",
+            "../../Babylon/Physics/babylon.physicsEngine.js",
+            "../../Babylon/Tools/babylon.sceneSerializer.js",
+            "../../Babylon/Mesh/babylon.csg.js",
+            "../../Babylon/PostProcess/babylon.oculusDistortionCorrectionPostProcess.js",
+            "../../Babylon/Tools/babylon.virtualJoystick.js",
+            "../../Babylon/Cameras/VR/babylon.oculusCamera.js",
+            "../../Babylon/Cameras/VR/babylon.oculusGamepadCamera.js",
+            "../../Babylon/Cameras/babylon.virtualJoysticksCamera.js",
+            "../../Babylon/Materials/babylon.shaderMaterial.js",
+            "../../Babylon/Mesh/babylon.mesh.vertexData.js",
+            "../../Babylon/Cameras/babylon.anaglyphCamera.js",
+            "../../Babylon/PostProcess/babylon.anaglyphPostProcess.js",
+            "../../Babylon/Tools/babylon.tags.js",
+            "../../Babylon/Tools/babylon.andOrNotEvaluator.js",
+            "../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPass.js",
+            "../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderEffect.js",
+            "../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPipeline.js",
+            "../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPipelineManager.js",
+            "../../Babylon/PostProcess/babylon.displayPassPostProcess.js",
+            "../../Babylon/Rendering/babylon.boundingBoxRenderer.js",
+            "../../Babylon/Actions/babylon.condition.js",
+            "../../Babylon/Actions/babylon.action.js",
+            "../../Babylon/Actions/babylon.actionManager.js",
+            "../../Babylon/Actions/babylon.interpolateValueAction.js",
+            "../../Babylon/Actions/babylon.directActions.js",
+            "../../Babylon/Mesh/babylon.geometry.js",
+            "../../Babylon/Mesh/babylon.groundMesh.js",
+            "../../Babylon/Mesh/babylon.instancedMesh.js",
+            "../../Babylon/Tools/babylon.gamepads.js",
+            "../../Babylon/Cameras/babylon.gamepadCamera.js",
+            "../../Babylon/Mesh/babylon.linesMesh.js",
+            "../../Babylon/Rendering/babylon.outlineRenderer.js",
+            "../../Babylon/Tools/babylon.assetsManager.js",
+            "../../Babylon/Cameras/VR/babylon.vrDeviceOrientationCamera.js",
+            "../../Babylon/Cameras/VR/babylon.webVRCamera.js",
+            "../../Babylon/Tools/babylon.sceneOptimizer.js",
+            "../../Babylon/Mesh/babylon.meshLODLevel.js",
+            "../../Babylon/Audio/babylon.audioEngine.js",
+            "../../Babylon/Audio/babylon.sound.js",
+            "../../Babylon/Audio/babylon.soundtrack.js",
+            "../../Babylon/Debug/babylon.debugLayer.js",
+            "../../Babylon/Materials/Textures/babylon.rawTexture.js",
+            "../../Babylon/Mesh/babylon.polygonMesh.js",
+            "../../Babylon/Mesh/babylon.meshSimplification.js",
+            "../../Babylon/Audio/babylon.analyser.js",
+            "../../Babylon/Rendering/babylon.depthRenderer.js",
+            "../../Babylon/PostProcess/babylon.ssaoRenderingPipeline.js",
+            "../../Babylon/PostProcess/babylon.volumetricLightScatteringPostProcess.js",
+            "../../Babylon/PostProcess/babylon.lensRenderingPipeline.js",
+            "../../Babylon/PostProcess/babylon.colorCorrectionPostProcess.js"
+        ]
+    },
+    "shadersDirectories" : [
+        {
+            "variable" : "BABYLON.Effect.ShadersStore",
+            "files" : "../../Babylon/Shaders/*.fx"
+        }
+    ],
+    "workers" : [
+        {
+            "variable" : "BABYLON.CollisionWorker",
+            "files" : [	
+                "../../Babylon/Collisions/babylon.collisionWorker.js",
+                "../../Babylon/Collisions/babylon.collider.js",
+                "../../Babylon/Collisions/babylon.collisionCoordinator.js",
+                "../../Babylon/Math/babylon.math.js"
+            ]
+        }
+    ],
+    "extras" : {
+        "files": [
+        ]
+    }
+}

+ 0 - 48
Tools/Gulp/gulp-shaders.js

@@ -1,48 +0,0 @@
-var through = require('through');
-var gutil = require('gulp-util');
-var PluginError = gutil.PluginError;
-var File = gutil.File;
-var path = require('path');
-
-
-var shaders = function shaders(name) {
-
-  var firstFile = null;
-  var content = {};
-
-  function bufferContents(file){
-    if (file.isNull()) return; // ignore
-    if (file.isStream()) return this.emit('error', new PluginError('gulp-shaders',  'Streaming not supported'));
-
-    if (!firstFile) firstFile = file;
-
-    var fileName = file.path
-      .replace(file.base, '')
-      .replace('.fragment', 'Pixel')
-      .replace('.vertex', 'Vertex')
-      .replace('.fx', 'Shader');
-
-    content[fileName] = file.contents.toString();
-  }
-
-  function endStream(){
-
-    var joinedPath = path.join(firstFile.base, name);
-
-    var joinedFile = new File({
-      cwd: firstFile.cwd,
-      base: firstFile.base,
-      path: joinedPath,
-      contents: new Buffer('BABYLON.Effect.ShadersStore='+JSON.stringify(content)+';')
-    });
-
-
-    this.emit('data', joinedFile);
-    this.emit('end');
-
-  }
-
-  return through(bufferContents, endStream);
-}
-
-module.exports = shaders;

+ 77 - 0
Tools/Gulp/gulp-srcToVariable.js

@@ -0,0 +1,77 @@
+var through = require('through2');
+var gutil = require('gulp-util');
+var PluginError = gutil.PluginError;
+var path = require('path');
+var File = gutil.File;
+
+// Consts
+const PLUGIN_NAME = 'gulp-srcToVariable';
+
+var srcToVariable = function srcToVariable(varName, asMap, namingCallback) {
+    
+    var content;
+    var firstFile;
+    
+    namingCallback = namingCallback || function(filename) { return filename; };
+    
+    function bufferContents(file, enc, cb) {
+    // ignore empty files
+    if (file.isNull()) {
+      cb();
+      return;
+    }
+
+    // no stream support, only files.
+    if (file.isStream()) {
+      this.emit('error', new PluginError('gulp-concat',  'Streaming not supported'));
+      cb();
+      return;
+    }
+
+    // set first file if not already set
+    if (!firstFile) {
+      firstFile = file;
+    }
+
+    // construct concat instance
+    if (!content) {
+      content = asMap ? {} : "";
+    }
+    // add file to concat instance
+    if(asMap) {
+        var name = namingCallback(file.relative);
+        
+        content[name] = file.contents.toString();
+    } else {
+        content += file.contents.toString();
+    }
+    cb();
+  }
+
+  function endStream(cb) {
+    if (!firstFile || !content) {
+      cb();
+      return;
+    }
+
+    
+    var joinedPath = path.join(firstFile.base, varName);
+
+    var joinedFile = new File({
+      cwd: firstFile.cwd,
+      base: firstFile.base,
+      path: joinedPath,
+      contents: new Buffer(varName + '=' + JSON.stringify(content) + ';')
+    });
+    
+    this.push(joinedFile);
+    
+    
+    cb();
+  }
+
+  return through.obj(bufferContents, endStream);
+    
+}
+
+module.exports = srcToVariable;

+ 69 - 219
Tools/Gulp/gulpfile.js

@@ -1,248 +1,98 @@
-var gulp = require('gulp-param')(require('gulp'), process.argv),
-    uglify = require('gulp-uglify'),
-    rename = require('gulp-rename'),
-    concat = require('gulp-concat'),
-    clean = require('gulp-clean'),
-    typescript = require('gulp-typescript'),
-	sourcemaps = require('gulp-sourcemaps'),
-    shaders = require('./gulp-shaders'),
-    gulpFilter = require('gulp-filter');
+var gulp = require("gulp");
+var uglify = require("gulp-uglify");
+var typescript = require("gulp-typescript");
+var sourcemaps = require("gulp-sourcemaps");
+var srcToVariable = require("./gulp-srcToVariable");
+var merge2 = require("merge2");
+var concat = require("gulp-concat");
+var rename = require("gulp-rename");
+var cleants = require('gulp-clean-ts-extends');
+var changed = require('gulp-changed');
+var runSequence = require('run-sequence');
 
-/**
- * Concat all fx files into one js file.
- */
-gulp.task('shaders', function() {
-  return gulp.src(['../../Babylon/Shaders/*.fx'])
-    .pipe(shaders('shaders.js'))
-    .pipe(gulp.dest('build/'))
+var config = require("./config.json");
 
-});
+var shadersStream;
+var workersStream;
 
-/**
- * Compile typescript files to their js respective files
- */
-gulp.task('typescript-to-js', function() {
-  //Compile all ts file into their respective js file.
-  
-  var tsResult = gulp.src(['../../Babylon/**/*.ts','../../References/**/*.d.ts'])
-                       .pipe(sourcemaps.init()) // This means sourcemaps will be generated
-                       .pipe(typescript({ noExternalResolve: true, target: 'ES5'}));
-  
-   return tsResult.js
-                .pipe(sourcemaps.write('.')) // Now the sourcemaps are added to the .js file
-                .pipe(gulp.dest('../../Babylon/'));
+//function to convert the shaders' filenames to variable names.
+function shadersName(filename) {
+    return filename.replace('.fragment', 'Pixel')
+      .replace('.vertex', 'Vertex')
+      .replace('.fx', 'Shader');
+}
+
+gulp.task("shaders", function(cb) {
+    shadersStream = config.shadersDirectories.map(function(shadersDef) {
+        return gulp.src(shadersDef.files).pipe(srcToVariable(shadersDef.variable, true, shadersName));
+    });
+    cb();
 });
 
-/**
- * Compile the declaration file babylon.d.ts
- */
-gulp.task('typescript-declaration', ['typescript-to-js'], function() {
-	
-	var tsResult = gulp.src(['../../Babylon/**/*.ts','../../References/**/*.d.ts'])
-                       .pipe(typescript({
-                           declarationFiles: true,
-                           noExternalResolve: true,
-						   target: 'ES5'
-                       }));
+gulp.task("workers", function(cb) {
+    workersStream = config.workers.map(function(workerDef) {
+        return gulp.src(workerDef.files).pipe(uglify()).pipe(srcToVariable(workerDef.variable));
+    });
+    cb();
+});
 
-    return tsResult.dts.pipe(concat('babylon.d.ts'))
-	.pipe(gulp.dest('build/'));
+/*
+Compiles all typescript files and creating a declaration file.
+*/
+gulp.task('typescript-compile', function() {  
+  var tsResult = gulp.src(config.core.typescript)
+                .pipe(sourcemaps.init()) // sourcemaps init. currently redundant directory def, waiting for this - https://github.com/floridoo/gulp-sourcemaps/issues/111
+                .pipe(typescript({ 
+                    noExternalResolve: true, 
+                    target: 'ES5', 
+                    declarationFiles: true,
+                    typescript: require('typescript')
+                }));
+    return merge2([
+        tsResult.dts
+            .pipe(concat(config.build.declarationFilename))
+            .pipe(gulp.dest(config.build.outputDirectory)),
+        tsResult.js
+            .pipe(sourcemaps.write("./")) // sourcemaps are written
+            .pipe(gulp.dest('../../Babylon/'))
+    ]);
 });
 
-/**
- * Concat all js files in order into one big js file and minify it.
- * The list is based on https://github.com/BabylonJS/Babylon.js/wiki/Creating-the-minified-version
- * Do not hesitate to update it if you need to add your own files.
- */
-gulp.task('scripts', ['shaders'] ,function() {
-  return gulp.src([
-      '../../Babylon/Math/babylon.math.js',
-      '../../Babylon/Tools/babylon.database.js',
-      '../../Babylon/Tools/babylon.tools.tga.js',
-      '../../Babylon/Tools/babylon.tools.dds.js',
-      '../../Babylon/Tools/babylon.smartArray.js',
-      '../../Babylon/Tools/babylon.smartCollection.js',
-      '../../Babylon/Tools/babylon.tools.js',
-      '../../Babylon/babylon.engine.js',
-      '../../Babylon/babylon.node.js',
-      '../../Babylon/Tools/babylon.filesInput.js',
-      '../../Babylon/Collisions/babylon.pickingInfo.js',
-      '../../Babylon/Culling/babylon.boundingSphere.js',
-      '../../Babylon/Culling/babylon.boundingBox.js',
-      '../../Babylon/Culling/babylon.boundingInfo.js',
-      '../../Babylon/Mesh/babylon.abstractMesh.js',
-      '../../Babylon/Lights/babylon.light.js',
-      '../../Babylon/Lights/babylon.pointLight.js',
-      '../../Babylon/Lights/babylon.spotLight.js',
-      '../../Babylon/Lights/babylon.hemisphericLight.js',
-      '../../Babylon/Lights/babylon.directionalLight.js',
-      '../../Babylon/Lights/Shadows/babylon.shadowGenerator.js',
-      '../../Babylon/Collisions/babylon.collider.js',
-	  '../../Babylon/Collisions/babylon.collisionCoordinator.js',
-      '../../Babylon/Cameras/babylon.camera.js',
-      '../../Babylon/Cameras/babylon.targetCamera.js',
-      '../../Babylon/Cameras/babylon.freeCamera.js',
-      '../../Babylon/Cameras/babylon.followCamera.js',
-      '../../Babylon/Cameras/babylon.touchCamera.js',
-      '../../Babylon/Cameras/babylon.arcRotateCamera.js',
-      '../../Babylon/Cameras/babylon.deviceOrientationCamera.js',
-      '../../Babylon/Rendering/babylon.renderingManager.js',
-      '../../Babylon/Rendering/babylon.renderingGroup.js',
-      '../../Babylon/babylon.scene.js',
-      '../../Babylon/Mesh/babylon.vertexBuffer.js',
-      '../../Babylon/Mesh/babylon.instancedMesh.js',
-      '../../Babylon/Mesh/babylon.mesh.js',
-      '../../Babylon/Mesh/babylon.subMesh.js',
-      '../../Babylon/Materials/Textures/babylon.baseTexture.js',
-      '../../Babylon/Materials/Textures/babylon.texture.js',
-      '../../Babylon/Materials/Textures/babylon.cubeTexture.js',
-      '../../Babylon/Materials/Textures/babylon.renderTargetTexture.js',
-      '../../Babylon/Materials/Textures/Procedurals/babylon.proceduralTexture.js',
-      '../../Babylon/Materials/Textures/babylon.mirrorTexture.js',
-      '../../Babylon/Materials/Textures/babylon.dynamicTexture.js',
-      '../../Babylon/Materials/Textures/babylon.videoTexture.js',
-      '../../Babylon/Materials/Textures/Procedurals/babylon.customProceduralTexture.js',
-      '../../Babylon/Materials/Textures/babylon.proceduralTexture.js',
-      '../../Babylon/Materials/Textures/Procedurals/babylon.standardProceduralTexture.js',
-      '../../Babylon/Materials/babylon.effect.js',
-      'build/shaders.js',
-      '../../Babylon/Materials/babylon.material.js',
-      '../../Babylon/Materials/babylon.standardMaterial.js',
-      '../../Babylon/Materials/babylon.multiMaterial.js',
-      '../../Babylon/Loading/babylon.sceneLoader.js',
-      '../../Babylon/Loading/Plugins/babylon.babylonFileLoader.js',
-      '../../Babylon/Sprites/babylon.spriteManager.js',
-      '../../Babylon/Sprites/babylon.sprite.js',
-      '../../Babylon/Layer/babylon.layer.js',
-      '../../Babylon/Particles/babylon.particle.js',
-      '../../Babylon/Particles/babylon.particleSystem.js',
-      '../../Babylon/Animations/babylon.animation.js',
-      '../../Babylon/Animations/babylon.animatable.js',
-      '../../Babylon/Animations/babylon.easing.js',
-      '../../Babylon/Culling/Octrees/babylon.octree.js',
-      '../../Babylon/Culling/Octrees/babylon.octreeBlock.js',
-      '../../Babylon/Bones/babylon.bone.js',
-      '../../Babylon/Bones/babylon.skeleton.js',
-      '../../Babylon/Bones/babylon.skeleton.js',
-      '../../Babylon/PostProcess/babylon.postProcess.js',
-      '../../Babylon/PostProcess/babylon.postProcessManager.js',
-      '../../Babylon/PostProcess/babylon.passPostProcess.js',
-      '../../Babylon/PostProcess/babylon.blurPostProcess.js',
-      '../../Babylon/PostProcess/babylon.refractionPostProcess.js',
-      '../../Babylon/PostProcess/babylon.blackAndWhitePostProcess.js',
-      '../../Babylon/PostProcess/babylon.convolutionPostProcess.js',
-      '../../Babylon/PostProcess/babylon.filterPostProcess.js',
-      '../../Babylon/PostProcess/babylon.fxaaPostProcess.js',
-      '../../Babylon/LensFlare/babylon.lensFlare.js',
-      '../../Babylon/LensFlare/babylon.lensFlareSystem.js',
-      '../../Babylon/Physics/Plugins/babylon.cannonJSPlugin.js',
-      '../../Babylon/Physics/Plugins/babylon.oimoJSPlugin.js',
-      '../../Babylon/Physics/babylon.physicsEngine.js',
-      '../../Babylon/Tools/babylon.sceneSerializer.js',
-      '../../Babylon/Mesh/babylon.csg.js',
-      '../../Babylon/PostProcess/babylon.oculusDistortionCorrectionPostProcess.js',
-      '../../Babylon/Tools/babylon.virtualJoystick.js',
-      '../../Babylon/Cameras/VR/babylon.oculusCamera.js',
-      '../../Babylon/Cameras/VR/babylon.oculusGamepadCamera.js',
-      '../../Babylon/Cameras/babylon.virtualJoysticksCamera.js',
-      '../../Babylon/Materials/babylon.shaderMaterial.js',
-      '../../Babylon/Mesh/babylon.mesh.vertexData.js',
-      '../../Babylon/Cameras/babylon.anaglyphCamera.js',
-      '../../Babylon/PostProcess/babylon.anaglyphPostProcess.js',
-      '../../Babylon/Tools/babylon.tags.js',
-      '../../Babylon/Tools/babylon.andOrNotEvaluator.js',
-      '../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPass.js',
-      '../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderEffect.js',
-      '../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPipeline.js',
-      '../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPipelineManager.js',
-      '../../Babylon/PostProcess/babylon.displayPassPostProcess.js',
-      '../../Babylon/Rendering/babylon.boundingBoxRenderer.js',
-      '../../Babylon/Actions/babylon.condition.js',
-      '../../Babylon/Actions/babylon.action.js',
-      '../../Babylon/Actions/babylon.actionManager.js',
-      '../../Babylon/Actions/babylon.interpolateValueAction.js',
-      '../../Babylon/Actions/babylon.directActions.js',
-      '../../Babylon/Mesh/babylon.geometry.js',
-      '../../Babylon/Mesh/babylon.groundMesh.js',
-      '../../Babylon/Mesh/babylon.instancedMesh.js',
-      '../../Babylon/Tools/babylon.gamepads.js',
-      '../../Babylon/Cameras/babylon.gamepadCamera.js',
-      '../../Babylon/Mesh/babylon.linesMesh.js',
-      '../../Babylon/Rendering/babylon.outlineRenderer.js',
-      '../../Babylon/Tools/babylon.assetsManager.js',
-      '../../Babylon/Cameras/VR/babylon.vrDeviceOrientationCamera.js',
-      '../../Babylon/Cameras/VR/babylon.webVRCamera.js',
-      '../../Babylon/Tools/babylon.sceneOptimizer.js',
-      '../../Babylon/Mesh/babylon.meshLODLevel.js',
-      '../../Babylon/Audio/babylon.audioEngine.js',
-      '../../Babylon/Audio/babylon.sound.js',
-      '../../Babylon/Audio/babylon.soundtrack.js',
-      '../../Babylon/Debug/babylon.debugLayer.js',
-      '../../Babylon/Materials/Textures/babylon.rawTexture.js',
-      '../../Babylon/Mesh/babylon.polygonMesh.js',
-      '../../Babylon/Mesh/babylon.meshSimplification.js',
-      '../../Babylon/Audio/babylon.analyser.js',
-      '../../Babylon/Rendering/babylon.depthRenderer.js',
-      '../../Babylon/PostProcess/babylon.ssaoRenderingPipeline.js',
-      '../../Babylon/PostProcess/babylon.volumetricLightScatteringPostProcess.js',
-      '../../Babylon/PostProcess/babylon.lensRenderingPipeline.js',
-	  '../../Babylon/PostProcess/babylon.colorCorrectionPostProcess.js'
-    ])
-    .pipe(concat('babylon.js'))
-    .pipe(gulp.dest('build/'))
-    .pipe(rename({suffix: '.min'}))
-    //.pipe(uglify({ outSourceMap: true })) //waiting for https://github.com/gulpjs/gulp/issues/356
+gulp.task("build", ["workers", "shaders"], function() {
+    return merge2(
+        gulp.src(config.core.files, config.extras.files),    
+        shadersStream,
+        workersStream
+    )
+    .pipe(concat(config.build.filename))
+    .pipe(cleants())
+    .pipe(gulp.dest(config.build.outputDirectory))
+    .pipe(rename({suffix: config.build.minSuffix}))
     .pipe(uglify())
-    .pipe(gulp.dest('build/'))
-
+    .pipe(gulp.dest(config.build.outputDirectory))
 });
 
-/**
- * Clean temporary files
- * Called after the task scripts
- */
-gulp.task('clean', ['scripts'], function() {
-  return gulp.src(['build/shaders.js'], {read: false})
-    .pipe(clean());
+gulp.task("typescript", function(cb) {
+    runSequence("typescript-compile", "build");
 });
 
 /**
- * The default task, call the tasks: shaders, scripts, clean
+ * The default task, call the tasks: build
  */
 gulp.task('default', function() {
-    gulp.start('shaders','scripts', 'clean');
-});
-
-/**
- * The default typescript task, call the tasks: shaders, scripts, clean AFTER the task typescript-to-js
- */
-gulp.task('typescript', ['typescript-declaration'], function() {
-    gulp.start('shaders','scripts', 'clean');
+    return gulp.start('build');
 });
 
 /**
  * Watch task, will call the default task if a js file is updated.
  */
 gulp.task('watch', function() {
-  gulp.watch('src/**/*.js', ['default']);
+  gulp.watch('../../Babylon/**/*.js', ['build']);
 });
 
 /**
  * Watch typescript task, will call the default typescript task if a typescript file is updated.
  */
 gulp.task('watch-typescript', function() {
-  gulp.watch('src/**/*.ts', ['typescript']);
-});
-
-/**
- * task to uglify a file passed as an argument
- */
-gulp.task('makeUgly' ,function(path, fileIn) {
-  if (path.lastIndexOf('/') + 1 !== path.length) { path  += '/'; }
-
-  return gulp.src([path + fileIn])
-    .pipe(rename({suffix: '.min'}))
-    .pipe(uglify())
-    .pipe(gulp.dest(path))
-
+  gulp.watch("../../Babylon/**/*.ts", ["typescript-compile", "build"]);
 });

+ 14 - 12
Tools/Gulp/package.json

@@ -1,19 +1,21 @@
 {
   "name": "BabylonJS",
-  "version": "1.9.0",
+  "version": "2.1.0",
   "description": "",
   "main": "",
   "devDependencies": {
-    "gulp": "^3.6.2",
-    "gulp-clean": "^0.3.0",
-    "gulp-concat": "^2.2.0",
-    "gulp-filter": "^0.4.1",
-    "gulp-rename": "^1.2.0",
-    "gulp-typescript" : "2.4.2",
-    "gulp-sourcemaps" : "1.3.0",
-    "gulp-uglify": "^0.3.0",
-    "gulp-util": "^2.2.14",
-    "through": "^2.3.4",
-    "gulp-param": "0.6.3"
+    "gulp": "^3.8.11",
+    "gulp-uglify": "~1.2.0",
+    "gulp-sourcemaps": "~1.5.2",
+    "typescript": "~1.4.0",
+    "gulp-typescript": "~2.6.0",
+    "through2": "~0.6.5",
+    "gulp-util": "~3.0.4",
+    "gulp-concat": "~2.5.2",
+    "merge2": "~0.3.5",
+    "gulp-rename": "~1.2.2",
+    "gulp-clean-ts-extends": "~0.1.1",
+    "gulp-changed": "~1.2.1",
+    "run-sequence": "~1.1.0"
   }
 }

+ 10 - 21
Tools/Gulp/readme.md

@@ -22,19 +22,13 @@ npm install
 npm update
 ```
 
-### Update gulpfile.js (task scripts) if you want to add your own files:
-```
-/**
- * Concat all js files in order into one big js file and minify it.
- * The list is based on https://github.com/BabylonJS/Babylon.js/wiki/Creating-the-minified-version
- * Do not hesistate to update it if you need to add your own files.
- */
-gulp.task('scripts', ['shaders'] ,function() {
-return gulp.src([
-      '../../Babylon/Math/babylon.math.js',
-      '../../Babylon/Math/babylon.axis.js',
-
-      ....
+### Update config.json if you want to add your own files:
+```
+"extras" : {
+    "files": [
+        "file1.js", "file2.js"
+    ]
+}
 ```
 ## From the javascript source
 ### Build Babylon.js from the javascript files:
@@ -69,14 +63,9 @@ Be aware that all js files content will be overwrite.
 gulp watch-typescript
 ```
 
-### Compile all the typscript files to their javascript respective files
+### Compile all the typscript files to their javascript respective files including declaration file
 ```
-gulp typescript-to-js
+gulp typescript-compile
 ```
 
-Be aware that all js files content will be overwrite.
-
-### Build the typescript declaration file
-```
-gulp typescript-declaration
-```
+Be aware that all js files content will be overwritten.