Browse Source

Isolated Modules in build for speed.

sebavan 6 years ago
parent
commit
148c2d956e

+ 2 - 0
.gitignore

@@ -18,6 +18,7 @@ TestResults
 src/**/*.js
 !src/webpack.config.js
 src/**/*.d.ts
+!src/LibDeclarations/*.d.ts
 loaders/src/**/*.js
 materialsLibrary/src/**/*.js
 proceduralTexturesLibrary/src/**/*.js
@@ -163,6 +164,7 @@ node_modules
 !dist/**/*.d.ts
 !dist/**/*.js.map
 !lib.d.ts
+!src/LibDeclarations/*.d.ts
 *.fragment.ts
 *.vertex.ts
 **/ShadersInclude/**/*.ts

+ 1 - 2
.vscode/settings.json

@@ -11,7 +11,6 @@
         "**/node_modules": true,
         "**/temp": true,
         "**/.temp": true,
-        "src/**/*.d.ts": true,
         "gui/**/*.d.ts": true,
         "inspector/**/*.d.ts": true,
         "loaders/**/*.d.ts": true,
@@ -43,7 +42,7 @@
         "**/*.js": {
             "when": "$(basename).ts"
         },
-        "**/*.d.ts": true,
+        "dist/**/*.d.ts": true,
         "**/*.fragment.ts": true,
         "**/*.vertex.ts": true,
         "**/ShadersInclude/**/*.ts": true,

+ 1 - 0
Tools/Gulp/config.json

@@ -60,6 +60,7 @@
         "build": {
             "webpack": "../../../src/webpack.config.js",
             "srcDirectory": "../../src/",
+            "loseDTSFiles": "../../src/LibDeclarations/*.d.ts",
             "distOutputDirectory": "/",
             "packageJSON": "../../package.json",
             "processDeclaration": {

+ 36 - 10
Tools/Gulp/tasks/gulpTasks-libraries.js

@@ -4,6 +4,7 @@ var webpack = require('webpack');
 var webpackStream = require("webpack-stream");
 var cp = require('child_process');
 var path = require("path");
+var concat = require("gulp-concat");
 
 // Gulp Helpers
 var uncommentShaders = require('../helpers/gulp-removeShaderComments');
@@ -82,18 +83,12 @@ var buildExternalLibrariesMultiEntry = function(libraries, settings, isMin) {
 }
 
 /**
- * Build DTS Files
+ * Build AMD DTS Files
  */
-var buildDTSFiles = function(libraries, settings, cb) {
-    // Convert Module to Namespace for globals
-    var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
-
+var buildAMDDTSFiles = function(libraries, settings, cb) {
     // TODO. Generate all d.ts
     let library = libraries[0];
     if (!library.preventLoadLibrary) {
-        // Find declaration path.
-        let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
-
         // Create temp directory.
         let srcDirectory = settings.build.srcDirectory;
         let depthCount = srcDirectory.match(/\//g).length - srcDirectory.match(/\.\.\//g).length;
@@ -107,6 +102,34 @@ var buildDTSFiles = function(libraries, settings, cb) {
         cp.execSync('tsc --module amd --outFile "' + tempDirectory + 'amd.js" --emitDeclarationOnly true', {
             cwd: settings.build.srcDirectory
         });
+    }
+    cb();
+}
+
+/**
+ * Append Lose DTS Files allowing isolated Modules build
+ */
+var appendLoseDTSFiles = function(settings) {
+    if (settings.build.loseDTSFiles) {
+        return gulp.src(["../../.temp/amd.d.ts", settings.build.loseDTSFiles], { base: "./"})
+            .pipe(concat("../../.temp/amd.d.ts"))
+            .pipe(gulp.dest("../../.temp/amd.d.ts"));
+    }
+    return Promise.resolve();
+}
+
+/**
+ * Process DTS Files
+ */
+var processDTSFiles = function(libraries, settings, cb) {
+    // Convert Module to Namespace for globals
+    var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
+
+    // TODO. Generate all d.ts
+    let library = libraries[0];
+    if (!library.preventLoadLibrary) {
+        // Find declaration path.
+        let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
 
         // Convert the tsc AMD BUNDLED declaration to our expected one
         processAmdDeclarationToModule("../../.temp/amd.d.ts", {
@@ -133,9 +156,12 @@ function buildExternalLibraries(settings) {
     var shaders = function() { return buildShaders(settings); };
     var buildMin = function() { return buildExternalLibrariesMultiEntry(settings.libraries, settings, true) };
     var buildMax = function() { return buildExternalLibrariesMultiEntry(settings.libraries, settings, false) };
-    var buildDTS = function(cb) { return buildDTSFiles(settings.libraries, settings, cb) };
 
-    tasks.push(cleanup, shaders, buildMin, buildMax, buildDTS);
+    var buildAMDDTS = function(cb) { return buildAMDDTSFiles(settings.libraries, settings, cb) };
+    var appendLoseDTS = function() { return appendLoseDTSFiles(settings) };
+    var processDTS = function(cb) { return processDTSFiles(settings.libraries, settings, cb) };
+
+    tasks.push(cleanup, shaders, buildMin, buildMax, buildAMDDTS, appendLoseDTS, processDTS);
 
     return gulp.series.apply(this, tasks);
 }

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

@@ -43,7 +43,7 @@ gulp.task("watchCore", async function startWatch() {
         async: true,
         verbose: true
     };
-    shelljs.exec("tsc --declaration false --target es5 --module es2015 --outDir ../.temp/es6LocalDev/core -w", options, function(code, stdout, stderr) {
+    shelljs.exec("tsc --isolatedModules true --declaration false --target es5 --module es2015 --outDir ../.temp/es6LocalDev/core -w", options, function(code, stdout, stderr) {
         if (stderr) {
             console.log(stderr);
         }

+ 83 - 0
src/LibDeclarations/browser.d.ts

@@ -0,0 +1,83 @@
+// Mixins
+interface Window {
+    mozIndexedDB: IDBFactory;
+    webkitIndexedDB: IDBFactory;
+    msIndexedDB: IDBFactory;
+    webkitURL: typeof URL;
+    mozRequestAnimationFrame(callback: FrameRequestCallback): number;
+    oRequestAnimationFrame(callback: FrameRequestCallback): number;
+    WebGLRenderingContext: WebGLRenderingContext;
+    MSGesture: MSGesture;
+    CANNON: any;
+    AudioContext: AudioContext;
+    webkitAudioContext: AudioContext;
+    PointerEvent: any;
+    Math: Math;
+    Uint8Array: Uint8ArrayConstructor;
+    Float32Array: Float32ArrayConstructor;
+    mozURL: typeof URL;
+    msURL: typeof URL;
+    VRFrameData: any; // WebVR, from specs 1.1
+    DracoDecoderModule: any;
+    setImmediate(handler: (...args: any[]) => void): number;
+}
+
+interface Document {
+    mozCancelFullScreen(): void;
+    msCancelFullScreen(): void;
+    webkitCancelFullScreen(): void;
+    requestPointerLock(): void;
+    exitPointerLock(): void;
+    mozFullScreen: boolean;
+    msIsFullScreen: boolean;
+    readonly webkitIsFullScreen: boolean;
+    readonly pointerLockElement: Element;
+    mozPointerLockElement: HTMLElement;
+    msPointerLockElement: HTMLElement;
+    webkitPointerLockElement: HTMLElement;
+}
+
+interface HTMLCanvasElement {
+    requestPointerLock(): void;
+    msRequestPointerLock?(): void;
+    mozRequestPointerLock?(): void;
+    webkitRequestPointerLock?(): void;
+
+    /** Track wether a record is in progress */
+    isRecording: boolean;
+    /** Capture Stream method defined by some browsers */
+    captureStream(fps?: number): MediaStream;
+}
+
+interface CanvasRenderingContext2D {
+    msImageSmoothingEnabled: boolean;
+}
+
+interface MouseEvent {
+    mozMovementX: number;
+    mozMovementY: number;
+    webkitMovementX: number;
+    webkitMovementY: number;
+    msMovementX: number;
+    msMovementY: number;
+}
+
+interface Navigator {
+    mozGetVRDevices: (any: any) => any;
+    webkitGetUserMedia(constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void;
+    mozGetUserMedia(constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void;
+    msGetUserMedia(constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void;
+
+    webkitGetGamepads(): Gamepad[];
+    msGetGamepads(): Gamepad[];
+    webkitGamepads(): Gamepad[];
+}
+
+interface HTMLVideoElement {
+    mozSrcObject: any;
+}
+
+interface Math {
+    fround(x: number): number;
+    imul(a: number, b: number): number;
+}

+ 101 - 0
src/LibDeclarations/webgl.d.ts

@@ -0,0 +1,101 @@
+
+interface WebGLProgram {
+    context?: WebGLRenderingContext;
+    vertexShader?: WebGLShader;
+    fragmentShader?: WebGLShader;
+    isParallelCompiled: boolean;
+    onCompiled?: () => void;
+}
+
+interface WebGLRenderingContext {
+    drawArraysInstanced(mode: number, first: number, count: number, primcount: number): void;
+    drawElementsInstanced(mode: number, count: number, type: number, offset: number, primcount: number): void;
+    vertexAttribDivisor(index: number, divisor: number): void;
+
+    createVertexArray(): any;
+    bindVertexArray(vao?: WebGLVertexArrayObject | null): void;
+    deleteVertexArray(vao: WebGLVertexArrayObject): void;
+
+    blitFramebuffer(srcX0: number, srcY0: number, srcX1: number, srcY1: number, dstX0: number, dstY0: number, dstX1: number, dstY1: number, mask: number, filter: number): void;
+    renderbufferStorageMultisample(target: number, samples: number, internalformat: number, width: number, height: number): void;
+
+    bindBufferBase(target: number, index: number, buffer: WebGLBuffer | null): void;
+    getUniformBlockIndex(program: WebGLProgram, uniformBlockName: string): number;
+    uniformBlockBinding(program: WebGLProgram, uniformBlockIndex: number, uniformBlockBinding: number): void;
+
+    // Queries
+    createQuery(): WebGLQuery;
+    deleteQuery(query: WebGLQuery): void;
+    beginQuery(target: number, query: WebGLQuery): void;
+    endQuery(target: number): void;
+    getQueryParameter(query: WebGLQuery, pname: number): any;
+    getQuery(target: number, pname: number): any;
+
+    MAX_SAMPLES: number;
+    RGBA8: number;
+    READ_FRAMEBUFFER: number;
+    DRAW_FRAMEBUFFER: number;
+    UNIFORM_BUFFER: number;
+
+    HALF_FLOAT_OES: number;
+    RGBA16F: number;
+    RGBA32F: number;
+    R32F: number;
+    RG32F: number;
+    RGB32F: number;
+    R16F: number;
+    RG16F: number;
+    RGB16F: number;
+    RED: number;
+    RG: number;
+    R8: number;
+    RG8: number;
+
+    UNSIGNED_INT_24_8: number;
+    DEPTH24_STENCIL8: number;
+
+    /* Multiple Render Targets */
+    drawBuffers(buffers: number[]): void;
+    readBuffer(src: number): void;
+
+    readonly COLOR_ATTACHMENT0: number;                             // 0x8CE1
+    readonly COLOR_ATTACHMENT1: number;                             // 0x8CE2
+    readonly COLOR_ATTACHMENT2: number;                             // 0x8CE3
+    readonly COLOR_ATTACHMENT3: number;                             // 0x8CE4
+
+    // Occlusion Query
+    ANY_SAMPLES_PASSED_CONSERVATIVE: number;
+    ANY_SAMPLES_PASSED: number;
+    QUERY_RESULT_AVAILABLE: number;
+    QUERY_RESULT: number;
+}
+
+interface WebGLBuffer {
+    references: number;
+    capacity: number;
+    is32Bits: boolean;
+}
+
+interface WebGLProgram {
+    transformFeedback?: WebGLTransformFeedback | null;
+    __SPECTOR_rebuildProgram?: ((vertexSourceCode: string, fragmentSourceCode: string, onCompiled: (program: WebGLProgram) => void, onError: (message: string) => void) => void) | null;
+}
+
+interface EXT_disjoint_timer_query {
+    QUERY_COUNTER_BITS_EXT: number;
+    TIME_ELAPSED_EXT: number;
+    TIMESTAMP_EXT: number;
+    GPU_DISJOINT_EXT: number;
+    QUERY_RESULT_EXT: number;
+    QUERY_RESULT_AVAILABLE_EXT: number;
+    queryCounterEXT(query: WebGLQuery, target: number): void;
+    createQueryEXT(): WebGLQuery;
+    beginQueryEXT(target: number, query: WebGLQuery): void;
+    endQueryEXT(target: number): void;
+    getQueryObjectEXT(query: WebGLQuery, target: number): any;
+    deleteQueryEXT(query: WebGLQuery): void;
+}
+
+interface WebGLUniformLocation {
+    _currentState: any;
+}

src/Engines/webgl2.ts → src/LibDeclarations/webgl2.d.ts


src/Cameras/webvr.ts → src/LibDeclarations/webvr.d.ts


+ 41 - 0
src/LibDeclarations/webxr.d.ts

@@ -0,0 +1,41 @@
+interface XRDevice {
+    requestSession(options: XRSessionCreationOptions): Promise<XRSession>;
+    supportsSession(options: XRSessionCreationOptions): Promise<void>;
+}
+interface XRSession {
+    getInputSources(): Array<any>;
+    baseLayer: XRWebGLLayer;
+    requestFrameOfReference(type: string): Promise<void>;
+    requestHitTest(origin: Float32Array, direction: Float32Array, frameOfReference: any): any;
+    end(): Promise<void>;
+    requestAnimationFrame: Function;
+    addEventListener: Function;
+}
+interface XRSessionCreationOptions {
+    outputContext?: WebGLRenderingContext | null;
+    immersive?: boolean;
+    environmentIntegration?: boolean;
+}
+interface XRLayer {
+    getViewport: Function;
+    framebufferWidth: number;
+    framebufferHeight: number;
+}
+interface XRView {
+    projectionMatrix: Float32Array;
+}
+interface XRFrame {
+    getDevicePose: Function;
+    getInputPose: Function;
+    views: Array<XRView>;
+    baseLayer: XRLayer;
+}
+interface XRFrameOfReference {
+}
+interface XRWebGLLayer extends XRLayer {
+    framebuffer: WebGLFramebuffer;
+}
+declare var XRWebGLLayer: {
+    prototype: XRWebGLLayer;
+    new(session: XRSession, context?: WebGLRenderingContext): XRWebGLLayer;
+};

+ 0 - 227
src/mixins.ts

@@ -1,227 +0,0 @@
-// Mixins
-interface Window {
-    mozIndexedDB: IDBFactory;
-    webkitIndexedDB: IDBFactory;
-    msIndexedDB: IDBFactory;
-    webkitURL: typeof URL;
-    mozRequestAnimationFrame(callback: FrameRequestCallback): number;
-    oRequestAnimationFrame(callback: FrameRequestCallback): number;
-    WebGLRenderingContext: WebGLRenderingContext;
-    MSGesture: MSGesture;
-    CANNON: any;
-    AudioContext: AudioContext;
-    webkitAudioContext: AudioContext;
-    PointerEvent: any;
-    Math: Math;
-    Uint8Array: Uint8ArrayConstructor;
-    Float32Array: Float32ArrayConstructor;
-    mozURL: typeof URL;
-    msURL: typeof URL;
-    VRFrameData: any; // WebVR, from specs 1.1
-    DracoDecoderModule: any;
-    setImmediate(handler: (...args: any[]) => void): number;
-}
-
-interface WebGLProgram {
-    context?: WebGLRenderingContext;
-    vertexShader?: WebGLShader;
-    fragmentShader?: WebGLShader;
-    isParallelCompiled: boolean;
-    onCompiled?: () => void;
-}
-
-interface WebGLRenderingContext {
-    drawArraysInstanced(mode: number, first: number, count: number, primcount: number): void;
-    drawElementsInstanced(mode: number, count: number, type: number, offset: number, primcount: number): void;
-    vertexAttribDivisor(index: number, divisor: number): void;
-
-    createVertexArray(): any;
-    bindVertexArray(vao?: WebGLVertexArrayObject | null): void;
-    deleteVertexArray(vao: WebGLVertexArrayObject): void;
-
-    blitFramebuffer(srcX0: number, srcY0: number, srcX1: number, srcY1: number, dstX0: number, dstY0: number, dstX1: number, dstY1: number, mask: number, filter: number): void;
-    renderbufferStorageMultisample(target: number, samples: number, internalformat: number, width: number, height: number): void;
-
-    bindBufferBase(target: number, index: number, buffer: WebGLBuffer | null): void;
-    getUniformBlockIndex(program: WebGLProgram, uniformBlockName: string): number;
-    uniformBlockBinding(program: WebGLProgram, uniformBlockIndex: number, uniformBlockBinding: number): void;
-
-    // Queries
-    createQuery(): WebGLQuery;
-    deleteQuery(query: WebGLQuery): void;
-    beginQuery(target: number, query: WebGLQuery): void;
-    endQuery(target: number): void;
-    getQueryParameter(query: WebGLQuery, pname: number): any;
-    getQuery(target: number, pname: number): any;
-
-    MAX_SAMPLES: number;
-    RGBA8: number;
-    READ_FRAMEBUFFER: number;
-    DRAW_FRAMEBUFFER: number;
-    UNIFORM_BUFFER: number;
-
-    HALF_FLOAT_OES: number;
-    RGBA16F: number;
-    RGBA32F: number;
-    R32F: number;
-    RG32F: number;
-    RGB32F: number;
-    R16F: number;
-    RG16F: number;
-    RGB16F: number;
-    RED: number;
-    RG: number;
-    R8: number;
-    RG8: number;
-
-    UNSIGNED_INT_24_8: number;
-    DEPTH24_STENCIL8: number;
-
-    /* Multiple Render Targets */
-    drawBuffers(buffers: number[]): void;
-    readBuffer(src: number): void;
-
-    readonly COLOR_ATTACHMENT0: number;                             // 0x8CE1
-    readonly COLOR_ATTACHMENT1: number;                             // 0x8CE2
-    readonly COLOR_ATTACHMENT2: number;                             // 0x8CE3
-    readonly COLOR_ATTACHMENT3: number;                             // 0x8CE4
-
-    // Occlusion Query
-    ANY_SAMPLES_PASSED_CONSERVATIVE: number;
-    ANY_SAMPLES_PASSED: number;
-    QUERY_RESULT_AVAILABLE: number;
-    QUERY_RESULT: number;
-}
-
-interface Document {
-    mozCancelFullScreen(): void;
-    msCancelFullScreen(): void;
-    webkitCancelFullScreen(): void;
-    requestPointerLock(): void;
-    exitPointerLock(): void;
-    mozFullScreen: boolean;
-    msIsFullScreen: boolean;
-    readonly webkitIsFullScreen: boolean;
-    readonly pointerLockElement: Element;
-    mozPointerLockElement: HTMLElement;
-    msPointerLockElement: HTMLElement;
-    webkitPointerLockElement: HTMLElement;
-}
-
-interface HTMLCanvasElement {
-    requestPointerLock(): void;
-    msRequestPointerLock?(): void;
-    mozRequestPointerLock?(): void;
-    webkitRequestPointerLock?(): void;
-
-    /** Track wether a record is in progress */
-    isRecording: boolean;
-    /** Capture Stream method defined by some browsers */
-    captureStream(fps?: number): MediaStream;
-}
-
-interface CanvasRenderingContext2D {
-    msImageSmoothingEnabled: boolean;
-}
-
-interface WebGLBuffer {
-    references: number;
-    capacity: number;
-    is32Bits: boolean;
-}
-
-interface WebGLProgram {
-    transformFeedback?: WebGLTransformFeedback | null;
-    __SPECTOR_rebuildProgram?: ((vertexSourceCode: string, fragmentSourceCode: string, onCompiled: (program: WebGLProgram) => void, onError: (message: string) => void) => void) | null;
-}
-
-interface MouseEvent {
-    mozMovementX: number;
-    mozMovementY: number;
-    webkitMovementX: number;
-    webkitMovementY: number;
-    msMovementX: number;
-    msMovementY: number;
-}
-
-interface Navigator {
-    mozGetVRDevices: (any: any) => any;
-    webkitGetUserMedia(constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void;
-    mozGetUserMedia(constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void;
-    msGetUserMedia(constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void;
-
-    webkitGetGamepads(): Gamepad[];
-    msGetGamepads(): Gamepad[];
-    webkitGamepads(): Gamepad[];
-}
-
-interface HTMLVideoElement {
-    mozSrcObject: any;
-}
-
-interface Math {
-    fround(x: number): number;
-    imul(a: number, b: number): number;
-}
-
-interface EXT_disjoint_timer_query {
-    QUERY_COUNTER_BITS_EXT: number;
-    TIME_ELAPSED_EXT: number;
-    TIMESTAMP_EXT: number;
-    GPU_DISJOINT_EXT: number;
-    QUERY_RESULT_EXT: number;
-    QUERY_RESULT_AVAILABLE_EXT: number;
-    queryCounterEXT(query: WebGLQuery, target: number): void;
-    createQueryEXT(): WebGLQuery;
-    beginQueryEXT(target: number, query: WebGLQuery): void;
-    endQueryEXT(target: number): void;
-    getQueryObjectEXT(query: WebGLQuery, target: number): any;
-    deleteQueryEXT(query: WebGLQuery): void;
-}
-
-interface WebGLUniformLocation {
-    _currentState: any;
-}
-
-// WebXR
-interface XRDevice {
-    requestSession(options: XRSessionCreationOptions): Promise<XRSession>;
-    supportsSession(options: XRSessionCreationOptions): Promise<void>;
-}
-interface XRSession {
-    getInputSources(): Array<any>;
-    baseLayer: XRWebGLLayer;
-    requestFrameOfReference(type: string): Promise<void>;
-    requestHitTest(origin: Float32Array, direction: Float32Array, frameOfReference: any): any;
-    end(): Promise<void>;
-    requestAnimationFrame: Function;
-    addEventListener: Function;
-}
-interface XRSessionCreationOptions {
-    outputContext?: WebGLRenderingContext | null;
-    immersive?: boolean;
-    environmentIntegration?: boolean;
-}
-interface XRLayer {
-    getViewport: Function;
-    framebufferWidth: number;
-    framebufferHeight: number;
-}
-interface XRView {
-    projectionMatrix: Float32Array;
-}
-interface XRFrame {
-    getDevicePose: Function;
-    getInputPose: Function;
-    views: Array<XRView>;
-    baseLayer: XRLayer;
-}
-interface XRFrameOfReference {
-}
-interface XRWebGLLayer extends XRLayer {
-    framebuffer: WebGLFramebuffer;
-}
-declare var XRWebGLLayer: {
-    prototype: XRWebGLLayer;
-    new(session: XRSession, context?: WebGLRenderingContext): XRWebGLLayer;
-};