Parcourir la source

Simplify Draco configuration

Gary Hsu il y a 7 ans
Parent
commit
430eb1b552

+ 0 - 4
Playground/debug.html

@@ -33,10 +33,6 @@
     <!-- jszip -->
     <script src="js/libs/jszip.min.js"></script>
     <script src="js/libs/fileSaver.js"></script>
-    <!-- Draco -->
-    <script src="https://preview.babylonjs.com/draco_decoder.js" type="text/x-draco-decoder"></script>
-    <script src="https://preview.babylonjs.com/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-    <script src="https://preview.babylonjs.com/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
     <!-- Monaco -->
     <script src="node_modules/monaco-editor/min/vs/loader.js"></script>
     <!-- Babylon.js -->

+ 0 - 4
Playground/frame.html

@@ -24,10 +24,6 @@
     <meta name="theme-color" content="#ffffff">
 
     <script src="https://code.jquery.com/pep/0.4.2/pep.min.js"></script>
-    <!-- Draco -->
-    <script src="https://preview.babylonjs.com/draco_decoder.js" type="text/x-draco-decoder"></script>
-    <script src="https://preview.babylonjs.com/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-    <script src="https://preview.babylonjs.com/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
     <!-- Babylon.js -->
     <script src="https://preview.babylonjs.com/cannon.js"></script>
     <script src="https://preview.babylonjs.com/Oimo.js"></script>

+ 0 - 4
Playground/full.html

@@ -24,10 +24,6 @@
         <meta name="theme-color" content="#ffffff">
 
         <script src="https://code.jquery.com/pep/0.4.2/pep.min.js"></script>
-        <!-- Draco -->
-        <script src="https://preview.babylonjs.com/draco_decoder.js" type="text/x-draco-decoder"></script>
-        <script src="https://preview.babylonjs.com/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-        <script src="https://preview.babylonjs.com/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
         <!-- Babylon.js -->
         <script src="https://preview.babylonjs.com/cannon.js"></script>
         <script src="https://preview.babylonjs.com/Oimo.js"></script>

+ 9 - 6
Playground/index-local.html

@@ -17,10 +17,6 @@
         <script src="../dist/preview%20release/cannon.js"></script>
         <script src="../dist/preview%20release/Oimo.js"></script>
         <script src="../dist/preview%20release/earcut.min.js"></script>
-        <!-- Draco -->
-        <script src="../dist/preview%20release/draco_decoder.js" type="text/x-draco-decoder"></script>
-        <script src="../dist/preview%20release/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-        <script src="../dist/preview%20release/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
         <!-- Monaco -->
         <script src="node_modules/monaco-editor/min/vs/loader.js"></script>
         <!-- Babylon.js -->
@@ -470,8 +466,15 @@
         <script src="js/actions.js"></script>
         <script src="js/pbt.js"></script>
         <script>
-            BABYLONDEVTOOLS.Loader.require('js/index.js')
-                .load();
+            BABYLONDEVTOOLS.Loader
+                .require('js/index.js')
+                .load(function () {
+                    BABYLON.DracoCompression.Configuration.decoder = {
+                        wasmUrl: "../dist/preview%20release/draco_wasm_wrapper_gltf.js",
+                        wasmBinaryUrl: "../dist/preview%20release/draco_decoder_gltf.wasm",
+                        fallbackUrl: "../dist/preview%20release/draco_decoder_gltf.js"
+                    };
+                });
         </script>
     </body>
 

+ 0 - 4
Playground/index.html

@@ -37,10 +37,6 @@
         <script src="https://preview.babylonjs.com/cannon.js"></script>
         <script src="https://preview.babylonjs.com/Oimo.js"></script>
         <script src="https://preview.babylonjs.com/earcut.min.js"></script>
-        <!-- Draco -->
-        <script src="https://preview.babylonjs.com/draco_decoder.js" type="text/x-draco-decoder"></script>
-        <script src="https://preview.babylonjs.com/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-        <script src="https://preview.babylonjs.com/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
         <!-- Monaco -->
         <script src="node_modules/monaco-editor/min/vs/loader.js"></script>
         <!-- Babylon.js -->

+ 0 - 4
Playground/indexStable.html

@@ -36,10 +36,6 @@
         <!-- Physics -->
         <script src="https://cdn.babylonjs.com/cannon.js"></script>
         <script src="https://cdn.babylonjs.com/Oimo.js"></script>
-        <!-- Draco -->
-        <script src="https://cdn.babylonjs.com/draco_decoder.js" type="text/x-draco-decoder"></script>
-        <script src="https://cdn.babylonjs.com/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-        <script src="https://cdn.babylonjs.com/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
         <!-- Monaco -->
         <script src="node_modules/monaco-editor/min/vs/loader.js"></script>
         <!-- Babylon.js -->

+ 0 - 4
Playground/zipContent/index.html

@@ -5,10 +5,6 @@
 
         <title>Babylon.js sample code</title>
 
-        <!-- Draco -->
-        <script src="https://preview.babylonjs.com/draco_decoder.js" type="text/x-draco-decoder"></script>
-        <script src="https://preview.babylonjs.com/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-        <script src="https://preview.babylonjs.com/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
         <!-- Babylon.js -->
         <script src="https://www.babylonjs.com/hand.minified-1.2.js"></script>
         <script src="https://preview.babylonjs.com/babylon.js"></script>

dist/preview release/draco_decoder.js → dist/preview release/draco_decoder_gltf.js


dist/preview release/draco_decoder.wasm → dist/preview release/draco_decoder_gltf.wasm


dist/preview release/draco_wasm_wrapper.js → dist/preview release/draco_wasm_wrapper_gltf.js


+ 6 - 4
localDev/index.html

@@ -8,9 +8,6 @@
     <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.2/dat.gui.min.js"></script>
     <script src="../dist/preview%20release/cannon.js"></script>
     <script src="../dist/preview%20release/Oimo.js"></script>
-    <script src="../dist/preview%20release/draco_decoder.js" type="text/x-draco-decoder"></script>
-    <script src="../dist/preview%20release/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-    <script src="../dist/preview%20release/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
     <script src="../Tools/DevLoader/BabylonLoader.js"></script>
     <script src="src/webgl-debug.js"></script>
 
@@ -70,6 +67,12 @@
         BABYLONDEVTOOLS.Loader
             .require(indexjs)
             .load(function () {
+                BABYLON.DracoCompression.Configuration.decoder = {
+                    wasmUrl: "../dist/preview%20release/draco_wasm_wrapper_gltf.js",
+                    wasmBinaryUrl: "../dist/preview%20release/draco_decoder_gltf.wasm",
+                    fallbackUrl: "../dist/preview%20release/draco_decoder_gltf.js"
+                };
+
                 if (BABYLON.Engine.isSupported()) {
                     if (typeof createEngine !== "undefined") {
                         engine = createEngine();
@@ -111,7 +114,6 @@
                     window.addEventListener("resize", function () {
                         engine.resize();
                     });
-
                 }
                 else {
                     alert('BabylonJS is not supported.')

+ 9 - 5
sandbox/index-local.html

@@ -5,9 +5,6 @@
     <link href="index.css" rel="stylesheet" />
     <script src="../dist/preview%20release/cannon.js"></script>
     <script src="../dist/preview%20release/Oimo.js"></script>
-    <script src="../dist/preview%20release/draco_decoder.js" type="text/x-draco-decoder"></script>
-    <script src="../dist/preview%20release/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-    <script src="../dist/preview%20release/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
     <script src="../Tools/DevLoader/BabylonLoader.js"></script>
 </head>
 <body>
@@ -43,8 +40,15 @@
     </div>
     <div id="errorZone"></div>
     <script>
-        BABYLONDEVTOOLS.Loader.require('index.js')
-            .load();
+        BABYLONDEVTOOLS.Loader
+            .require('index.js')
+            .load(function () {
+                BABYLON.DracoCompression.Configuration.decoder = {
+                    wasmUrl: "../dist/preview%20release/draco_wasm_wrapper_gltf.js",
+                    wasmBinaryUrl: "../dist/preview%20release/draco_decoder_gltf.wasm",
+                    fallbackUrl: "../dist/preview%20release/draco_decoder_gltf.js"
+                };
+            });
     </script>
 </body>
 </html>

+ 0 - 5
sandbox/index.html

@@ -26,11 +26,6 @@
     <link href="index.css" rel="stylesheet" />
     <script src="https://code.jquery.com/pep/0.4.2/pep.min.js"></script>
 
-    <!-- Draco -->
-    <script src="https://preview.babylonjs.com/draco_decoder.js" type="text/x-draco-decoder"></script>
-    <script src="https://preview.babylonjs.com/draco_decoder.wasm" type="text/x-draco-decoder-wasm-binary"></script>
-    <script src="https://preview.babylonjs.com/draco_wasm_wrapper.js" type="text/x-draco-decoder-wasm-wrapper"></script>
-
     <script src="https://preview.babylonjs.com/cannon.js"></script>
     <script src="https://preview.babylonjs.com/Oimo.js"></script>
     <script src="https://preview.babylonjs.com/babylon.js"></script>

+ 60 - 79
src/Mesh/Compression/babylon.dracoCompression.ts

@@ -7,19 +7,24 @@ module BABYLON {
      */
     export interface IDracoCompressionConfiguration {
         /**
-         * Configuration for the JavaScript decoder or null if not available.
+         * Configuration for the decoder.
          */
-        decoder: Nullable<{
-            url: string;
-        }>;
-
-        /**
-         * Configuration for the WebAssembly decoder or null if not available.
-         */
-        decoderWasm: Nullable<{
-            binaryUrl: string;
-            wrapperUrl: string;
-        }>;
+        decoder?: {
+            /**
+             * The url to the WebAssembly module.
+             */
+            wasmUrl?: string;
+
+            /**
+             * The url to the WebAssembly binary.
+             */
+            wasmBinaryUrl?: string;
+
+            /**
+             * The url to the fallback JavaScript module.
+             */
+            fallbackUrl?: string;
+        };
     }
 
     /**
@@ -29,19 +34,36 @@ module BABYLON {
         private static _DecoderModulePromise: Promise<any>;
 
         /**
-         * Gets the configuration.
+         * The configuration.
          */
-        public static Configuration = DracoCompression._GetDefaultConfig();
+        public static Configuration: IDracoCompressionConfiguration = {
+            decoder: {
+                wasmUrl: "https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js",
+                wasmBinaryUrl: "https://preview.babylonjs.com/draco_decoder_gltf.wasm",
+                fallbackUrl: "https://preview.babylonjs.com/draco_decoder_gltf.js"
+            }
+        };
 
         /**
          * Returns true if the decoder is available.
          */
         public static get DecoderAvailable(): boolean {
-            return (
-                typeof DracoDecoderModule !== "undefined" ||
-                (typeof WebAssembly === "object" && !!DracoCompression.Configuration.decoderWasm) ||
-                !!DracoCompression.Configuration.decoder
-            );
+            if (typeof DracoDecoderModule !== "undefined") {
+                return true;
+            }
+
+            const decoder = DracoCompression.Configuration.decoder;
+            if (decoder) {
+                if (decoder.wasmUrl && decoder.wasmBinaryUrl && typeof WebAssembly === "object") {
+                    return true;
+                }
+
+                if (decoder.fallbackUrl) {
+                    return true;
+                }
+            }
+
+            return false;
         }
 
         /**
@@ -146,25 +168,31 @@ module BABYLON {
 
         private static _GetDecoderModule(): Promise<any> {
             if (!DracoCompression._DecoderModulePromise) {
-                let promise: Promise<any>;
+                let promise: Nullable<Promise<any>> = null;
                 let config: any = {};
 
                 if (typeof DracoDecoderModule !== "undefined") {
                     promise = Promise.resolve();
                 }
-                else if (typeof WebAssembly === "object" && DracoCompression.Configuration.decoderWasm) {
-                    promise = Promise.all([
-                        DracoCompression._LoadScriptAsync(DracoCompression.Configuration.decoderWasm.wrapperUrl),
-                        DracoCompression._LoadFileAsync(DracoCompression.Configuration.decoderWasm.binaryUrl).then(data => {
-                            config.wasmBinary = data;
-                        })
-                    ]);
-                }
-                else if (DracoCompression.Configuration.decoder) {
-                    promise = DracoCompression._LoadScriptAsync(DracoCompression.Configuration.decoder.url);
-                }
                 else {
-                    throw new Error("Invalid decoder configuration");
+                    const decoder = DracoCompression.Configuration.decoder;
+                    if (decoder) {
+                        if (decoder.wasmUrl && decoder.wasmBinaryUrl && typeof WebAssembly === "object") {
+                            promise = Promise.all([
+                                DracoCompression._LoadScriptAsync(decoder.wasmUrl),
+                                DracoCompression._LoadFileAsync(decoder.wasmBinaryUrl).then(data => {
+                                    config.wasmBinary = data;
+                                })
+                            ]);
+                        }
+                        else if (decoder.fallbackUrl) {
+                            promise = DracoCompression._LoadScriptAsync(decoder.fallbackUrl);
+                        }
+                    }
+                }
+
+                if (!promise) {
+                    throw new Error("Draco decoder module is not available");
                 }
 
                 DracoCompression._DecoderModulePromise = promise.then(() => {
@@ -201,52 +229,5 @@ module BABYLON {
                 });
             });
         }
-
-        private static _GetDefaultConfig(): IDracoCompressionConfiguration {
-            const configuration: IDracoCompressionConfiguration = {
-                decoder: null,
-                decoderWasm: null
-            };
-
-            if (Tools.IsWindowObjectExist()) {
-                let decoderUrl: Nullable<string> = null;
-                let decoderWasmBinaryUrl: Nullable<string> = null;
-                let decoderWasmWrapperUrl: Nullable<string> = null;
-
-                for (let i = 0; i < document.scripts.length; i++) {
-                    const type = document.scripts[i].type;
-                    const src = document.scripts[i].src;
-                    switch (type) {
-                        case "text/x-draco-decoder": {
-                            decoderUrl = src;
-                            break;
-                        }
-                        case "text/x-draco-decoder-wasm-binary": {
-                            decoderWasmBinaryUrl = src;
-                            break;
-                        }
-                        case "text/x-draco-decoder-wasm-wrapper": {
-                            decoderWasmWrapperUrl = src;
-                            break;
-                        }
-                    }
-                }
-
-                if (decoderUrl) {
-                    configuration.decoder = {
-                        url: decoderUrl
-                    };
-                }
-
-                if (decoderWasmWrapperUrl && decoderWasmBinaryUrl) {
-                    configuration.decoderWasm = {
-                        binaryUrl: decoderWasmBinaryUrl,
-                        wrapperUrl: decoderWasmWrapperUrl
-                    };
-                }
-            }
-
-            return configuration;
-        }
     }
 }

+ 4 - 8
tests/validation/validation.js

@@ -315,14 +315,10 @@ function init() {
 
     // Draco configuration
     var baseUrl = BABYLON.Tools.GetFolderPath(document.location.href);
-    BABYLON.DracoCompression.Configuration = {
-        decoder: {
-            url: baseUrl + "../../dist/preview%20release/draco_decoder.js"
-        },
-        decoderWasm: {
-            binaryUrl: baseUrl + "../../dist/preview%20release/draco_decoder.wasm",
-            wrapperUrl: baseUrl + "../../dist/preview%20release/draco_wasm_wrapper.js"
-        }
+    BABYLON.DracoCompression.Configuration.decoder = {
+        wasmUrl: baseUrl + "../../dist/preview%20release/draco_wasm_wrapper_gltf.js",
+        wasmBinaryUrl: baseUrl + "../../dist/preview%20release/draco_decoder_gltf.wasm",
+        fallbackUrl: baseUrl + "../../dist/preview%20release/draco_decoder_gltf.js"
     };
 
     canvas = document.createElement("canvas");