sebastien 6 years ago
parent
commit
8839adeeb1

+ 1 - 0
Tools/Gulp/config.json

@@ -1509,6 +1509,7 @@
         "viewer-assets"
     ],
     "core": {
+        "isCore": true,
         "libraries": [
             {
                 "output": "babylon.js",

+ 203 - 207
Tools/Gulp/gulpfile.js

@@ -1,25 +1,25 @@
 // Gulp Tools
 var gulp = require("gulp");
-var uglify = require("gulp-uglify");
-var typescript = require("gulp-typescript");
-var sourcemaps = require("gulp-sourcemaps");
-var srcToVariable = require("gulp-content-to-variable");
-var merge2 = require("merge2");
-var concat = require("gulp-concat");
-var rename = require("gulp-rename");
-var cleants = require("gulp-clean-ts-extends");
-var replace = require("gulp-replace");
-var expect = require("gulp-expect-file");
-var optimisejs = require("gulp-optimize-js");
-var filter = require('gulp-filter');
-var path = require("path");
+// var uglify = require("gulp-uglify");
+// var typescript = require("gulp-typescript");
+// var sourcemaps = require("gulp-sourcemaps");
+// var srcToVariable = require("gulp-content-to-variable");
+// var merge2 = require("merge2");
+// var concat = require("gulp-concat");
+// var rename = require("gulp-rename");
+// var cleants = require("gulp-clean-ts-extends");
+// var replace = require("gulp-replace");
+// var expect = require("gulp-expect-file");
+// var optimisejs = require("gulp-optimize-js");
+// var filter = require('gulp-filter');
+// var path = require("path");
 
-// Gulp Helpers
-var addDtsExport = require("./helpers/gulp-addDtsExport");
-var addDecorateAndExtends = require("./helpers/gulp-decorateAndExtends");
-var addModuleExports = require("./helpers/gulp-addModuleExports");
-var addES6Exports = require("./helpers/gulp-addES6Exports");
-var uncommentShader = require("./helpers/gulp-removeShaderComments");
+// // Gulp Helpers
+// var addDtsExport = require("./helpers/gulp-addDtsExport");
+// var addDecorateAndExtends = require("./helpers/gulp-decorateAndExtends");
+// var addModuleExports = require("./helpers/gulp-addModuleExports");
+// var addES6Exports = require("./helpers/gulp-addES6Exports");
+// var uncommentShader = require("./helpers/gulp-removeShaderComments");
 
 // Import Gulp Tasks
 require("./tasks/gulpTasks-libraries");
@@ -33,211 +33,212 @@ require("./tasks/gulpTasks-typedoc");
 require("./tasks/gulpTasks-intellisense");
 require("./tasks/gulpTasks-tests");
 
-// Import Build Config
-var config = require("./config.json");
+// // Import Build Config
+// var config = require("./config.json");
 
-var includeShadersStream;
-var shadersStream;
+// var includeShadersStream;
+// var shadersStream;
 
-var extendsSearchRegex = /var\s__extends[\s\S]+?\}\)\(\);/g;
-var decorateSearchRegex = /var\s__decorate[\s\S]+?\};/g;
+// var extendsSearchRegex = /var\s__extends[\s\S]+?\}\)\(\);/g;
+// var decorateSearchRegex = /var\s__decorate[\s\S]+?\};/g;
 
-/**
- * TS configurations shared in the gulp file.
- */
-var tsConfig = {
-    noResolve: true,
-    target: "ES5",
-    declarationFiles: true,
-    typescript: require("typescript"),
-    experimentalDecorators: true,
-    isolatedModules: false,
-    noImplicitAny: true,
-    noImplicitReturns: true,
-    noImplicitThis: true,
-    noUnusedLocals: true,
-    strictNullChecks: true,
-    strictFunctionTypes: true,
-    types: [],
-    lib: [
-        "dom",
-        "es2015.promise",
-        "es5"
-    ]
-};
-var tsProject = typescript.createProject(tsConfig);
+// /**
+//  * TS configurations shared in the gulp file.
+//  */
+// var tsConfig = {
+//     noResolve: true,
+//     target: "ES5",
+//     declarationFiles: true,
+//     typescript: require("typescript"),
+//     experimentalDecorators: true,
+//     isolatedModules: false,
+//     noImplicitAny: true,
+//     noImplicitReturns: true,
+//     noImplicitThis: true,
+//     noUnusedLocals: true,
+//     strictNullChecks: true,
+//     strictFunctionTypes: true,
+//     types: [],
+//     lib: [
+//         "dom",
+//         "es2015.promise",
+//         "es5"
+//     ]
+// };
+// var tsProject = typescript.createProject(tsConfig);
 
-function processDependency(kind, dependency, filesToLoad, firstLevelOnly) {
-    if (!firstLevelOnly && dependency.dependUpon) {
-        for (var i = 0; i < dependency.dependUpon.length; i++) {
-            var dependencyName = dependency.dependUpon[i];
-            var parent = config.workloads[dependencyName];
-            processDependency(kind, parent, filesToLoad);
-        }
-    }
+// function processDependency(kind, dependency, filesToLoad, firstLevelOnly) {
+//     if (!firstLevelOnly && dependency.dependUpon) {
+//         for (var i = 0; i < dependency.dependUpon.length; i++) {
+//             var dependencyName = dependency.dependUpon[i];
+//             var parent = config.workloads[dependencyName];
+//             processDependency(kind, parent, filesToLoad);
+//         }
+//     }
 
-    var content = dependency[kind];
-    if (!content) {
-        return;
-    }
+//     var content = dependency[kind];
+//     if (!content) {
+//         return;
+//     }
 
-    for (var i = 0; i < content.length; i++) {
-        var file = content[i];
+//     for (var i = 0; i < content.length; i++) {
+//         var file = content[i];
 
-        if (filesToLoad.indexOf(file) === -1) {
-            filesToLoad.push(file);
-        }
-    }
-}
+//         if (filesToLoad.indexOf(file) === -1) {
+//             filesToLoad.push(file);
+//         }
+//     }
+// }
 
-function determineFilesToProcess(kind) {
-    var currentConfig = config.build.currentConfig;
-    var buildConfiguration = config.buildConfigurations[currentConfig];
-    var filesToLoad = [];
+// function determineFilesToProcess(kind) {
+//     var currentConfig = config.build.currentConfig;
+//     var buildConfiguration = config.buildConfigurations[currentConfig];
+//     var filesToLoad = [];
 
-    for (var index = 0; index < buildConfiguration.length; index++) {
-        var dependencyName = buildConfiguration[index];
-        var dependency = config.workloads[dependencyName];
+//     for (var index = 0; index < buildConfiguration.length; index++) {
+//         var dependencyName = buildConfiguration[index];
+//         var dependency = config.workloads[dependencyName];
 
-        if (kind === "directFiles" && !dependency) {
-            filesToLoad.push("../../dist/preview release/" + dependencyName);
-        }
-        else if (dependency) {
-            processDependency(kind, dependency, filesToLoad);
-        }
-    }
+//         if (kind === "directFiles" && !dependency) {
+//             filesToLoad.push("../../dist/preview release/" + dependencyName);
+//         }
+//         else if (dependency) {
+//             processDependency(kind, dependency, filesToLoad);
+//         }
+//     }
 
-    if (kind === "shaderIncludes") {
-        for (var index = 0; index < filesToLoad.length; index++) {
-            filesToLoad[index] = "../../src/Shaders/ShadersInclude/" + filesToLoad[index] + ".fx";
-        }
-    } else if (kind === "shaders") {
-        for (var index = 0; index < filesToLoad.length; index++) {
-            var name = filesToLoad[index];
-            filesToLoad[index] = "../../src/Shaders/" + filesToLoad[index] + ".fx";
-        }
-    }
+//     if (kind === "shaderIncludes") {
+//         for (var index = 0; index < filesToLoad.length; index++) {
+//             filesToLoad[index] = "../../src/Shaders/ShadersInclude/" + filesToLoad[index] + ".fx";
+//         }
+//     } else if (kind === "shaders") {
+//         for (var index = 0; index < filesToLoad.length; index++) {
+//             var name = filesToLoad[index];
+//             filesToLoad[index] = "../../src/Shaders/" + filesToLoad[index] + ".fx";
+//         }
+//     }
 
-    return filesToLoad;
-}
+//     return filesToLoad;
+// }
 
-/*
- * Shader Management.
- */
-function shadersName(filename) {
-    return path.basename(filename)
-        .replace(".fragment", "Pixel")
-        .replace(".vertex", "Vertex")
-        .replace(".fx", "Shader");
-}
+// /*
+//  * Shader Management.
+//  */
+// function shadersName(filename) {
+//     return path.basename(filename)
+//         .replace(".fragment", "Pixel")
+//         .replace(".vertex", "Vertex")
+//         .replace(".fx", "Shader");
+// }
 
-function includeShadersName(filename) {
-    return path.basename(filename).replace(".fx", "");
-}
+// function includeShadersName(filename) {
+//     return path.basename(filename).replace(".fx", "");
+// }
 
-/*
- * Main necessary files stream Management.
- */
-gulp.task("includeShaders", function(cb) {
-    var filesToProcess = determineFilesToProcess("shaderIncludes");
-    includeShadersStream = gulp.src(filesToProcess).
-        pipe(expect.real({ errorOnFailure: true }, filesToProcess)).
-        pipe(uncommentShader()).
-        pipe(srcToVariable({
-            variableName: "BABYLON.Effect.IncludesShadersStore", asMap: true, namingCallback: includeShadersName
-        }));
-    cb();
-});
+// /*
+//  * Main necessary files stream Management.
+//  */
+// gulp.task("includeShaders", function(cb) {
+//     var filesToProcess = determineFilesToProcess("shaderIncludes");
+//     includeShadersStream = gulp.src(filesToProcess).
+//         pipe(expect.real({ errorOnFailure: true }, filesToProcess)).
+//         pipe(uncommentShader()).
+//         pipe(srcToVariable({
+//             variableName: "BABYLON.Effect.IncludesShadersStore", asMap: true, namingCallback: includeShadersName
+//         }));
+//     cb();
+// });
 
-gulp.task("shaders", gulp.series("includeShaders", function(cb) {
-    var filesToProcess = determineFilesToProcess("shaders");
-    shadersStream = gulp.src(filesToProcess).
-        pipe(expect.real({ errorOnFailure: true }, filesToProcess)).
-        pipe(uncommentShader()).
-        pipe(srcToVariable({
-            variableName: "BABYLON.Effect.ShadersStore", asMap: true, namingCallback: shadersName
-        }));
-    cb();
-}));
+// gulp.task("shaders", gulp.series("includeShaders", function(cb) {
+//     var filesToProcess = determineFilesToProcess("shaders");
+//     shadersStream = gulp.src(filesToProcess).
+//         pipe(expect.real({ errorOnFailure: true }, filesToProcess)).
+//         pipe(uncommentShader()).
+//         pipe(srcToVariable({
+//             variableName: "BABYLON.Effect.ShadersStore", asMap: true, namingCallback: shadersName
+//         }));
+//     cb();
+// }));
 
-gulp.task("build", gulp.series("shaders", function build() {
-    var filesToProcess = determineFilesToProcess("files");
-    var directFilesToProcess = determineFilesToProcess("directFiles");
-    let mergedStreams = merge2(gulp.src(filesToProcess)
-        .pipe(expect.real({ errorOnFailure: true }, filesToProcess)),
-        shadersStream,
-        includeShadersStream);
-    if (directFilesToProcess.length) {
-        mergedStreams.add(gulp.src(directFilesToProcess));
-    }
-    return merge2(
-        mergedStreams
-            .pipe(concat(config.build.noModuleFilename))
-            .pipe(cleants())
-            .pipe(replace(extendsSearchRegex, ""))
-            .pipe(replace(decorateSearchRegex, ""))
-            .pipe(addDecorateAndExtends())
-            .pipe(gulp.dest(config.build.outputDirectory))
-            .pipe(rename(config.build.filename))
-            .pipe(addModuleExports("BABYLON", {
-                dependencies: config.build.dependencies
-            }))
-            .pipe(gulp.dest(config.build.outputDirectory))
-            .pipe(rename(config.build.minFilename))
-            .pipe(uglify())
-            .pipe(optimisejs())
-            .pipe(gulp.dest(config.build.outputDirectory)),
-        mergedStreams
-            .pipe(concat("es6.js"))
-            .pipe(cleants())
-            .pipe(replace(extendsSearchRegex, ""))
-            .pipe(replace(decorateSearchRegex, ""))
-            .pipe(addES6Exports("BABYLON"))
-            .pipe(gulp.dest(config.build.outputDirectory))
-    );
-}));
+// gulp.task("build", gulp.series("shaders", function build() {
+//     var filesToProcess = determineFilesToProcess("files");
+//     var directFilesToProcess = determineFilesToProcess("directFiles");
+//     let mergedStreams = merge2(gulp.src(filesToProcess)
+//         .pipe(expect.real({ errorOnFailure: true }, filesToProcess)),
+//         shadersStream,
+//         includeShadersStream);
+//     if (directFilesToProcess.length) {
+//         mergedStreams.add(gulp.src(directFilesToProcess));
+//     }
+//     return merge2(
+//         mergedStreams
+//             .pipe(concat(config.build.noModuleFilename))
+//             .pipe(cleants())
+//             .pipe(replace(extendsSearchRegex, ""))
+//             .pipe(replace(decorateSearchRegex, ""))
+//             .pipe(addDecorateAndExtends())
+//             .pipe(gulp.dest(config.build.outputDirectory))
+//             .pipe(rename(config.build.filename))
+//             .pipe(addModuleExports("BABYLON", {
+//                 dependencies: config.build.dependencies
+//             }))
+//             .pipe(gulp.dest(config.build.outputDirectory))
+//             .pipe(rename(config.build.minFilename))
+//             .pipe(uglify())
+//             .pipe(optimisejs())
+//             .pipe(gulp.dest(config.build.outputDirectory)),
+//         mergedStreams
+//             .pipe(concat("es6.js"))
+//             .pipe(cleants())
+//             .pipe(replace(extendsSearchRegex, ""))
+//             .pipe(replace(decorateSearchRegex, ""))
+//             .pipe(addES6Exports("BABYLON"))
+//             .pipe(gulp.dest(config.build.outputDirectory))
+//     );
+// }));
 
-/*
- * Compiles all typescript files and creating a js and a declaration file.
- */
-gulp.task("typescript-compile", function() {
-    const dtsFilter = filter(['**', '!**/*.d.ts'], {restore: false});
-    var tsResult = gulp.src(config.typescript)
-        .pipe(dtsFilter)
-        .pipe(sourcemaps.init())
-        .pipe(tsProject({
-            summarizeFailureOutput: true
-        }));
+// /*
+//  * Compiles all typescript files and creating a js and a declaration file.
+//  */
+// gulp.task("typescript-compile", function() {
+//     const dtsFilter = filter(['**', '!**/*.d.ts'], {restore: false});
+//     var tsResult = gulp.src(config.typescript)
+//         .pipe(dtsFilter)
+//         .pipe(sourcemaps.init())
+//         .pipe(tsProject({
+//             summarizeFailureOutput: true
+//         }));
 
-    tsResult.once("error", function(err) {
-        tsResult.once("finish", function() {
-            console.log("Typescript compile failed");
-            console.error(err);
-            process.exit(1);
-        });
-    });
+//     tsResult.once("error", function(err) {
+//         tsResult.once("finish", function() {
+//             console.log("Typescript compile failed");
+//             console.error(err);
+//             process.exit(1);
+//         });
+//     });
 
-    return merge2([
-        tsResult.dts
-            .pipe(concat(config.build.declarationFilename))
-            .pipe(addDtsExport("BABYLON", "babylonjs"))
-            .pipe(gulp.dest(config.build.outputDirectory)),
-        tsResult.js
-            .pipe(sourcemaps.write("./",
-                {
-                    includeContent: false,
-                    sourceRoot: (filePath) => {
-                        return "";
-                    }
-                }))
-            .pipe(gulp.dest(config.build.srcOutputDirectory))
-    ])
-});
+//     return merge2([
+//         tsResult.dts
+//             .pipe(concat(config.build.declarationFilename))
+//             .pipe(addDtsExport("BABYLON", "babylonjs"))
+//             .pipe(gulp.dest(config.build.outputDirectory)),
+//         tsResult.js
+//             .pipe(sourcemaps.write("./",
+//                 {
+//                     includeContent: false,
+//                     sourceRoot: (filePath) => {
+//                         return "";
+//                     }
+//                 }))
+//             .pipe(gulp.dest(config.build.srcOutputDirectory))
+//     ])
+// });
 
 /**
  * Build the releasable files.
+ * Back Compat Only, now name core as it is a lib
  */
-gulp.task("typescript", gulp.series("typescript-compile", "build"));
+gulp.task("typescript", gulp.series("core"));
 
 /**
  * Build all libs.
@@ -245,14 +246,9 @@ gulp.task("typescript", gulp.series("typescript-compile", "build"));
 gulp.task("typescript-libraries", gulp.series(config.modules, config.viewerModules));
 
 /**
- * Custom build with full path file control; used by profile.html
- */
-gulp.task("build-custom", gulp.series("typescript-compile", "build"));
-
-/**
  * Validate compile the code and check the comments and style case convention through typedoc
  */
-gulp.task("typedoc-check", gulp.series("typescript-compile", "gui", "loaders", "serializers", "typedoc-generate", "typedoc-validate"));
+gulp.task("typedoc-check", gulp.series("core", "gui", "loaders", "serializers", "typedoc-generate", "typedoc-validate"));
 
 /**
  * Combine Webserver and Watch as long as vscode does not handle multi tasks.
@@ -262,7 +258,7 @@ gulp.task("run", gulp.series("watch", "webserver"));
 /**
  * Do it all (Build).
  */
-gulp.task("typescript-all", gulp.series("typescript", "typescript-libraries", "netlify-cleanup"));
+gulp.task("typescript-all", gulp.series("typescript-libraries", "netlify-cleanup"));
 
 /**
  * Do it all (tests).

+ 49 - 3
Tools/Gulp/helpers/gulp-processShaders.js

@@ -5,7 +5,7 @@ let fs = require('fs');
 
 let tsShaderTemplate = 
 `import { Effect } from "babylonjs";
-
+##INCLUDES_PLACEHOLDER##
 let name = '##NAME_PLACEHOLDER##';
 let shader = \`##SHADER_PLACEHOLDER##\`;
 
@@ -23,7 +23,39 @@ function getShaderName(filename) {
     }
 }
 
-function main() {
+function getIncludes(sourceCode) {
+    var regex = /#include<(.+)>(\((.*)\))*(\[(.*)\])*/g;
+    var match = regex.exec(sourceCode);
+
+    var includes = new Set();
+
+    while (match != null) {
+        let includeFile = match[1];
+
+        // Uniform declaration
+        if (includeFile.indexOf("__decl__") !== -1) {
+            includeFile = includeFile.replace(/__decl__/, "");
+
+            // Add non UBO import
+            const noUBOFile = includeFile + "Declaration";
+            includes.add(noUBOFile);
+
+            includeFile = includeFile.replace(/Vertex/, "Ubo");
+            includeFile = includeFile.replace(/Fragment/, "Ubo");
+            const uBOFile = includeFile + "Declaration";
+            includes.add(uBOFile);
+        }
+        else {
+            includes.add(includeFile);
+        }
+
+        match = regex.exec(sourceCode);
+    }
+
+    return includes;
+}
+
+function main(isCore) {
     return through.obj(function (file, enc, cb) {
             if (file.isNull()) {
                 cb(null, file);
@@ -43,9 +75,23 @@ function main() {
             // Trailing whitespace...
             fxData = fxData.replace(/[^\S\r\n]+$/gm, "");
 
+            let includeText = "";
+            const includes = getIncludes(fxData);
+            includes.forEach((entry) => {
+                if (isCore) {
+                    includeText = includeText + `import "./ShadersInclude/${entry}";
+`;
+                }
+                else {
+                    includeText = includeText + `import "babylonjs/Shaders/ShadersInclude/${entry}";
+`;
+                }
+            });
+
             const shaderStore = directory.indexOf("ShadersInclude") > -1 ? "IncludesShadersStore" : "ShadersStore";
 
-            let tsContent = tsShaderTemplate.replace('##NAME_PLACEHOLDER##', shaderName);
+            let tsContent = tsShaderTemplate.replace('##INCLUDES_PLACEHOLDER##', includeText);
+            tsContent = tsContent.replace('##NAME_PLACEHOLDER##', shaderName);
             tsContent = tsContent.replace('##SHADER_PLACEHOLDER##', fxData);
             tsContent = tsContent.replace('##SHADERSTORE_PLACEHOLDER##', shaderStore);
 

+ 1 - 1
Tools/Gulp/tasks/gulpTasks-libraries.js

@@ -21,7 +21,7 @@ var config = require("../config.json");
 var buildShaders = function(settings) {
     return gulp.src(settings.build.srcDirectory + "**/*.fx")
             .pipe(uncommentShaders())
-            .pipe(processShaders());
+            .pipe(processShaders(settings.isCore));
 }
 
 /**

+ 2 - 2
Tools/Gulp/tasks/gulpTasks-watch.js

@@ -50,7 +50,7 @@ gulp.task("watch", function startWatch() {
 
                 tasks.push(gulp.src(settings.srcDirectory + "**/*.fx")
                     .pipe(uncommentShaders())
-                    .pipe(processShaders())
+                    .pipe(processShaders(config[module].isCore))
                 );
 
                 tasks.push(
@@ -58,7 +58,7 @@ gulp.task("watch", function startWatch() {
                         console.log(library.output + ": Shaders.");
                         gulp.src(settings.srcDirectory + "**/*.fx")
                             .pipe(uncommentShaders())
-                            .pipe(processShaders());
+                            .pipe(processShaders(config[module].isCore));
                     })
                 );
             }