David Catuhe 6 年之前
父節點
當前提交
30ee8fb65f

文件差異過大導致無法顯示
+ 3362 - 2981
Playground/babylon.d.txt


+ 3 - 2
Viewer/tests/package.json

@@ -11,6 +11,7 @@
     "devDependencies": {
         "@types/mocha": "2.2.46",
         "@types/chai": "^4.1.0",
-        "@types/sinon": "^4.1.3"
+        "@types/sinon": "^4.1.3",
+        "typescript": "~3.0.1"
     }
-}
+}

文件差異過大導致無法顯示
+ 3367 - 2986
dist/preview release/babylon.d.ts


文件差異過大導致無法顯示
+ 1 - 1
dist/preview release/babylon.js


文件差異過大導致無法顯示
+ 13161 - 12252
dist/preview release/babylon.max.js


文件差異過大導致無法顯示
+ 13161 - 12252
dist/preview release/babylon.no-module.max.js


文件差異過大導致無法顯示
+ 1 - 1
dist/preview release/babylon.worker.js


文件差異過大導致無法顯示
+ 13163 - 12254
dist/preview release/es6.js


+ 1 - 1
dist/preview release/serializers/babylon.glTF2Serializer.js

@@ -3540,7 +3540,7 @@ var BABYLON;
                                 resolve(proceduralTexture);
                             }
                             else {
-                                proceduralTexture._effect.onCompileObservable.add(function () {
+                                proceduralTexture.getEffect().executeWhenCompiled(function () {
                                     proceduralTexture.render();
                                     resolve(proceduralTexture);
                                 });

文件差異過大導致無法顯示
+ 1 - 1
dist/preview release/serializers/babylon.glTF2Serializer.min.js


+ 1 - 1
dist/preview release/serializers/babylonjs.serializers.js

@@ -3701,7 +3701,7 @@ var BABYLON;
                                 resolve(proceduralTexture);
                             }
                             else {
-                                proceduralTexture._effect.onCompileObservable.add(function () {
+                                proceduralTexture.getEffect().executeWhenCompiled(function () {
                                     proceduralTexture.render();
                                     resolve(proceduralTexture);
                                 });

文件差異過大導致無法顯示
+ 1 - 1
dist/preview release/serializers/babylonjs.serializers.min.js


+ 19 - 5
dist/preview release/viewer/babylon.viewer.d.ts

@@ -168,11 +168,11 @@ declare module BabylonViewer {
                 * Mainly used for help and errors
                 * @param subScreen the name of the subScreen. Those can be defined in the configuration object
                 */
-            showOverlayScreen(subScreen: string): Promise<string> | Promise<Template>;
+            showOverlayScreen(subScreen: string): Promise<Template> | Promise<string>;
             /**
                 * Hide the overlay screen.
                 */
-            hideOverlayScreen(): Promise<string> | Promise<Template>;
+            hideOverlayScreen(): Promise<Template> | Promise<string>;
             /**
                 * show the viewer (in case it was hidden)
                 *
@@ -189,11 +189,11 @@ declare module BabylonViewer {
                 * Show the loading screen.
                 * The loading screen can be configured using the configuration object
                 */
-            showLoadingScreen(): Promise<string> | Promise<Template>;
+            showLoadingScreen(): Promise<Template> | Promise<string>;
             /**
                 * Hide the loading screen
                 */
-            hideLoadingScreen(): Promise<string> | Promise<Template>;
+            hideLoadingScreen(): Promise<Template> | Promise<string>;
             dispose(): void;
             protected _onConfigurationLoaded(configuration: ViewerConfiguration): void;
     }
@@ -924,7 +924,7 @@ declare module BabylonViewer {
       * @param name the name of the custom optimizer configuration
       * @param upgrade set to true if you want to upgrade optimizer and false if you want to degrade
       */
-    export function getCustomOptimizerByName(name: string, upgrade?: boolean): (sceneManager: SceneManager) => boolean;
+    export function getCustomOptimizerByName(name: string, upgrade?: boolean): typeof extendedUpgrade;
     export function registerCustomOptimizer(name: string, optimizer: (sceneManager: SceneManager) => boolean): void;
 }
 declare module BabylonViewer {
@@ -1558,6 +1558,20 @@ declare module BabylonViewer {
     export function addLoaderPlugin(name: string, plugin: ILoaderPlugin): void;
 }
 declare module BabylonViewer {
+    /**
+        * A custom upgrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedUpgrade(sceneManager: SceneManager): boolean;
+    /**
+        * A custom degrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedDegrade(sceneManager: SceneManager): boolean;
+}
+declare module BabylonViewer {
 }
 declare module BabylonViewer {
     export interface IEnvironmentMapConfiguration {

文件差異過大導致無法顯示
+ 2 - 2
dist/preview release/viewer/babylon.viewer.js


文件差異過大導致無法顯示
+ 1 - 1
dist/preview release/viewer/babylon.viewer.max.js


+ 22 - 5
dist/preview release/viewer/babylon.viewer.module.d.ts

@@ -200,11 +200,11 @@ declare module 'babylonjs-viewer/viewer/defaultViewer' {
                 * Mainly used for help and errors
                 * @param subScreen the name of the subScreen. Those can be defined in the configuration object
                 */
-            showOverlayScreen(subScreen: string): Promise<string> | Promise<Template>;
+            showOverlayScreen(subScreen: string): Promise<Template> | Promise<string>;
             /**
                 * Hide the overlay screen.
                 */
-            hideOverlayScreen(): Promise<string> | Promise<Template>;
+            hideOverlayScreen(): Promise<Template> | Promise<string>;
             /**
                 * show the viewer (in case it was hidden)
                 *
@@ -221,11 +221,11 @@ declare module 'babylonjs-viewer/viewer/defaultViewer' {
                 * Show the loading screen.
                 * The loading screen can be configured using the configuration object
                 */
-            showLoadingScreen(): Promise<string> | Promise<Template>;
+            showLoadingScreen(): Promise<Template> | Promise<string>;
             /**
                 * Hide the loading screen
                 */
-            hideLoadingScreen(): Promise<string> | Promise<Template>;
+            hideLoadingScreen(): Promise<Template> | Promise<string>;
             dispose(): void;
             protected _onConfigurationLoaded(configuration: ViewerConfiguration): void;
     }
@@ -985,13 +985,14 @@ declare module 'babylonjs-viewer/templating/viewerTemplatePlugin' {
 }
 
 declare module 'babylonjs-viewer/optimizer/custom' {
+    import { extendedUpgrade } from "babylonjs-viewer/optimizer/custom/extended";
     import { SceneManager } from "babylonjs-viewer/managers/sceneManager";
     /**
       *
       * @param name the name of the custom optimizer configuration
       * @param upgrade set to true if you want to upgrade optimizer and false if you want to degrade
       */
-    export function getCustomOptimizerByName(name: string, upgrade?: boolean): (sceneManager: SceneManager) => boolean;
+    export function getCustomOptimizerByName(name: string, upgrade?: boolean): typeof extendedUpgrade;
     export function registerCustomOptimizer(name: string, optimizer: (sceneManager: SceneManager) => boolean): void;
 }
 
@@ -1662,6 +1663,22 @@ declare module 'babylonjs-viewer/loader/plugins' {
     export function addLoaderPlugin(name: string, plugin: ILoaderPlugin): void;
 }
 
+declare module 'babylonjs-viewer/optimizer/custom/extended' {
+    import { SceneManager } from 'babylonjs-viewer/managers/sceneManager';
+    /**
+        * A custom upgrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedUpgrade(sceneManager: SceneManager): boolean;
+    /**
+        * A custom degrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedDegrade(sceneManager: SceneManager): boolean;
+}
+
 declare module 'babylonjs-viewer/configuration/interfaces' {
     export * from 'babylonjs-viewer/configuration/interfaces/cameraConfiguration';
     export * from 'babylonjs-viewer/configuration/interfaces/colorGradingConfiguration';

+ 22 - 8
localDev/index.html

@@ -67,7 +67,7 @@
         // Load the scripts + map file to allow vscode debug.
         BABYLONDEVTOOLS.Loader
             .require(indexjs)
-            .load(function () {
+            .load(function() {
                 BABYLON.DracoCompression.Configuration.decoder = {
                     wasmUrl: "../dist/preview%20release/draco_wasm_wrapper_gltf.js",
                     wasmBinaryUrl: "../dist/preview%20release/draco_decoder_gltf.wasm",
@@ -90,7 +90,7 @@
                         if (scene) {
                             // Register a render loop to repeatedly render the scene
 
-                            engine.runRenderLoop(function () {
+                            engine.runRenderLoop(function() {
                                 if (scene.activeCamera) {
                                     scene.render();
                                 }
@@ -102,17 +102,31 @@
                         var scene = createScene();
 
                         if (scene) {
-                            // Register a render loop to repeatedly render the scene
 
-                            engine.runRenderLoop(function () {
-                                scene.render();
-                                divFps.innerHTML = engine.getFps().toFixed() + " fps";
-                            });
+                            var processCurrentScene = function(scene) {
+                                engine.runRenderLoop(function() {
+                                    scene.render();
+                                    divFps.innerHTML = engine.getFps().toFixed() + " fps";
+                                });
+                            }
+
+                            if (scene.then) {
+                                // Handle if createScene returns a promise
+                                scene.then(function(currentScene) {
+                                    processCurrentScene(currentScene);
+                                }).catch(function(e) {
+                                    console.error(e);
+                                    onError();
+                                });
+                            } else {
+                                // Register a render loop to repeatedly render the scene
+                                processCurrentScene(scene);
+                            }
                         }
                     }
 
                     // Resize
-                    window.addEventListener("resize", function () {
+                    window.addEventListener("resize", function() {
                         engine.resize();
                     });
                 }

+ 2 - 2
serializers/src/glTF/2.0/Extensions/KHR_texture_transform.ts

@@ -99,8 +99,8 @@ module BABYLON.GLTF2.Exporter.Extensions {
                 if (proceduralTexture.isReady()) {
                     proceduralTexture.render();
                     resolve(proceduralTexture);
-                }else {
-                    (proceduralTexture as any)._effect.onCompileObservable.add(() => {
+                } else {
+                    (proceduralTexture as any).getEffect().executeWhenCompiled(() => {
                         proceduralTexture.render();
                         resolve(proceduralTexture);
                     });

+ 24 - 8
src/Engine/babylon.engine.ts

@@ -1243,6 +1243,22 @@ module BABYLON {
             Effect.ResetCache();
         }
 
+        /**
+         * Gets a boolean indicating if all created effects are ready
+         * @returns true if all effects are ready
+         */
+        public areAllEffectsReady(): boolean {
+            for (var key in this._compiledEffects) {
+                let effect = <Effect>this._compiledEffects[key];
+
+                if (!effect.isReady()) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
         private _rebuildBuffers(): void {
             // Index / Vertex
             for (var scene of this.scenes) {
@@ -3373,16 +3389,16 @@ module BABYLON {
 
         /** @hidden */
         public _isProgramCompiled(shaderProgram: WebGLProgram): boolean {
-           if (!shaderProgram.isParallelCompiled) {
-               return true;
-           }
+            if (!shaderProgram.isParallelCompiled) {
+                return true;
+            }
 
-           if (this._gl.getProgramParameter(shaderProgram, this._caps.parallelShaderCompile.COMPLETION_STATUS_KHR)) {
-               this._finalizeProgram(shaderProgram);
-               return true;
-           }
+            if (this._gl.getProgramParameter(shaderProgram, this._caps.parallelShaderCompile.COMPLETION_STATUS_KHR)) {
+                this._finalizeProgram(shaderProgram);
+                return true;
+            }
 
-           return false;
+            return false;
         }
 
         /** @hidden */

+ 4 - 0
src/Engine/babylon.nullEngine.ts

@@ -435,6 +435,10 @@ module BABYLON {
 
         }
 
+        public areAllEffectsReady(): boolean {
+            return true;
+        }
+
         /**
          * @hidden
          * Get the current error code of the webGL context

+ 8 - 0
src/Materials/Textures/Procedurals/babylon.proceduralTexture.ts

@@ -122,6 +122,14 @@ module BABYLON {
         }
 
         /**
+         * The effect that is created when initializing the post process.
+         * @returns The created effect corrisponding the the postprocess.
+         */
+        public getEffect(): Effect {
+            return this._effect;
+        }
+
+        /**
          * Gets texture content (Use this function wisely as reading from a texture can be slow)
          * @returns an ArrayBufferView (Uint8Array or Float32Array)
          */

+ 23 - 3
src/Materials/babylon.effect.ts

@@ -196,6 +196,7 @@ module BABYLON {
         public uniqueId = 0;
         /**
          * Observable that will be called when the shader is compiled.
+         * It is recommended to use executeWhenCompile() or to make sure that scene.isReady() is called to get this observable raised.
          */
         public onCompileObservable = new Observable<Effect>();
         /**
@@ -468,6 +469,21 @@ module BABYLON {
             this.onCompileObservable.add((effect) => {
                 func(effect);
             });
+
+            if (!this._program || this._program.isParallelCompiled) {
+                setTimeout(() => {
+                    this._checkIsReady();
+                }, 16);
+            }
+        }
+
+        private _checkIsReady() {
+            if (this.isReady()) {
+                return;
+            }
+            setTimeout(() => {
+                this._checkIsReady();
+            }, 16);
         }
 
         /** @hidden */
@@ -827,6 +843,10 @@ module BABYLON {
                     }
                 });
 
+                if (this._program.isParallelCompiled) {
+                    this._checkIsReady();
+                }
+
             } catch (e) {
                 this._compilationError = e.message;
 
@@ -1061,7 +1081,7 @@ module BABYLON {
         public setInt(uniformName: string, value: number): Effect {
             var cache = this._valueCache[uniformName];
             if (cache !== undefined && cache === value) {
-                return this;
+                return this;
             }
 
             this._valueCache[uniformName] = value;
@@ -1292,7 +1312,7 @@ module BABYLON {
         public setFloat(uniformName: string, value: number): Effect {
             var cache = this._valueCache[uniformName];
             if (cache !== undefined && cache === value) {
-                return this;
+                return this;
             }
 
             this._valueCache[uniformName] = value;
@@ -1311,7 +1331,7 @@ module BABYLON {
         public setBool(uniformName: string, bool: boolean): Effect {
             var cache = this._valueCache[uniformName];
             if (cache !== undefined && cache === bool) {
-                return this;
+                return this;
             }
 
             this._valueCache[uniformName] = bool;

+ 10 - 5
src/babylon.scene.ts

@@ -2218,6 +2218,16 @@ module BABYLON {
             let index: number;
             let engine = this.getEngine();
 
+            // Effects
+            if (!engine.areAllEffectsReady()) {
+                return false;
+            }
+
+            // Pending data
+            if (this._pendingData.length > 0) {
+                return false;
+            }
+
             // Meshes
             for (index = 0; index < this.meshes.length; index++) {
                 var mesh = this.meshes[index];
@@ -2243,11 +2253,6 @@ module BABYLON {
                 }
             }
 
-            // Pending data
-            if (this._pendingData.length > 0) {
-                return false;
-            }
-
             // Geometries
             for (index = 0; index < this.geometries.length; index++) {
                 var geometry = this.geometries[index];