浏览代码

Revert "Fixes for direct load of glTF"

David Catuhe 4 年之前
父节点
当前提交
bf91a529f6
共有 3 个文件被更改,包括 27 次插入34 次删除
  1. 0 1
      dist/preview release/what's new.md
  2. 10 9
      loaders/src/glTF/2.0/glTFLoader.ts
  3. 17 24
      src/Loading/sceneLoader.ts

+ 0 - 1
dist/preview release/what's new.md

@@ -37,7 +37,6 @@
 
 - Fix issue with the Promise polyfill where a return value was expected from resolve() ([Deltakosh](https://github.com/deltakosh))
 - Fix an issue with keyboard control (re)attachment. ([#9411](https://github.com/BabylonJS/Babylon.js/issues/9411)) ([RaananW](https://github.com/RaananW))
-- Fix direct loading of a glTF string that has base64-encoded URI. ([bghgary](https://github.com/bghgary))
 
 ## Breaking changes
 

+ 10 - 9
loaders/src/glTF/2.0/glTFLoader.ts

@@ -35,7 +35,6 @@ import { Logger } from 'babylonjs/Misc/logger';
 import { Light } from 'babylonjs/Lights/light';
 import { TmpVectors } from 'babylonjs/Maths/math.vector';
 import { BoundingInfo } from 'babylonjs/Culling/boundingInfo';
-import { StringTools } from 'babylonjs/Misc/stringTools';
 
 interface TypedArrayLike extends ArrayBufferView {
     readonly length: number;
@@ -225,9 +224,11 @@ export class GLTFLoader implements IGLTFLoader {
     }
 
     /** @hidden */
-    public importMeshAsync(meshesNames: any, scene: Scene, forAssetContainer: boolean, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName = ""): Promise<ISceneLoaderAsyncResult> {
+    public importMeshAsync(meshesNames: any, scene: Scene, forAssetContainer: boolean, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<ISceneLoaderAsyncResult> {
         return Promise.resolve().then(() => {
             this._babylonScene = scene;
+            this._rootUrl = rootUrl;
+            this._fileName = fileName || "scene";
             this._forAssetContainer = forAssetContainer;
             this._loadData(data);
 
@@ -254,7 +255,7 @@ export class GLTFLoader implements IGLTFLoader {
                 });
             }
 
-            return this._loadAsync(rootUrl, fileName, nodes, () => {
+            return this._loadAsync(nodes, () => {
                 return {
                     meshes: this._getMeshes(),
                     particleSystems: [],
@@ -269,19 +270,19 @@ export class GLTFLoader implements IGLTFLoader {
     }
 
     /** @hidden */
-    public loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName = ""): Promise<void> {
+    public loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<void> {
         return Promise.resolve().then(() => {
             this._babylonScene = scene;
+            this._rootUrl = rootUrl;
+            this._fileName = fileName || "scene";
             this._loadData(data);
-            return this._loadAsync(rootUrl, fileName, null, () => undefined);
+            return this._loadAsync(null, () => undefined);
         });
     }
 
-    private _loadAsync<T>(rootUrl: string, fileName: string, nodes: Nullable<Array<number>>, resultFunc: () => T): Promise<T> {
+    private _loadAsync<T>(nodes: Nullable<Array<number>>, resultFunc: () => T): Promise<T> {
         return Promise.resolve().then(() => {
-            this._rootUrl = rootUrl;
-            this._uniqueRootUrl = (!StringTools.StartsWith(rootUrl, "file:") && fileName) ? rootUrl : `${rootUrl}${Date.now()}/`;
-            this._fileName = fileName;
+            this._uniqueRootUrl = (this._rootUrl.indexOf("file:") === -1 && this._fileName) ? this._rootUrl : `${this._rootUrl}${Date.now()}/`;
 
             this._loadExtensions();
             this._checkExtensions();

+ 17 - 24
src/Loading/sceneLoader.ts

@@ -19,7 +19,6 @@ import { RequestFileError, ReadFileError } from '../Misc/fileTools';
 import { TransformNode } from '../Meshes/transformNode';
 import { Geometry } from '../Meshes/geometry';
 import { Light } from '../Lights/light';
-import { StringTools } from '../Misc/stringTools';
 
 /**
  * Type used for the success callback of ImportMesh
@@ -462,8 +461,8 @@ export class SceneLoader {
     }
 
     private static _LoadData(fileInfo: IFileInfo, scene: Scene, onSuccess: (plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync, data: any, responseURL?: string) => void, onProgress: ((event: ISceneLoaderProgressEvent) => void) | undefined, onError: (message: string, exception?: any) => void, onDispose: () => void, pluginExtension: Nullable<string>): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {
-        const directLoad = SceneLoader._GetDirectLoad(fileInfo.url);
-        const registeredPlugin = pluginExtension ? SceneLoader._GetPluginForExtension(pluginExtension) : (directLoad ? SceneLoader._GetPluginForDirectLoad(fileInfo.url) : SceneLoader._GetPluginForFilename(fileInfo.url));
+        const directLoad = SceneLoader._GetDirectLoad(fileInfo.name);
+        const registeredPlugin = pluginExtension ? SceneLoader._GetPluginForExtension(pluginExtension) : (directLoad ? SceneLoader._GetPluginForDirectLoad(fileInfo.name) : SceneLoader._GetPluginForFilename(fileInfo.name));
 
         let plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync;
         if ((registeredPlugin.plugin as ISceneLoaderPluginFactory).createPlugin !== undefined) {
@@ -543,20 +542,9 @@ export class SceneLoader {
                 : scene._requestFile(fileInfo.url, successCallback, onProgress, true, useArrayBuffer, errorCallback);
         };
 
-        if (StringTools.StartsWith(fileInfo.url, "file:")) {
-            // Loading file from disk via input file or drag'n'drop
-            if (fileInfo.file) {
-                const errorCallback = (error: ReadFileError) => {
-                    onError(error.message, error);
-                };
+        const file = fileInfo.file || FilesInputStore.FilesToLoad[fileInfo.name.toLowerCase()];
 
-                request = plugin.readFile
-                    ? plugin.readFile(scene, fileInfo.file, dataCallback, onProgress, useArrayBuffer, errorCallback)
-                    : scene._readFile(fileInfo.file, dataCallback, onProgress, useArrayBuffer, errorCallback);
-            } else {
-                onError("Unable to find file named " + fileInfo.name);
-            }
-        } else {
+        if (fileInfo.rootUrl.indexOf("file:") === -1 || (fileInfo.rootUrl.indexOf("file:") !== -1 && !file)) {
             const engine = scene.getEngine();
             let canUseOfflineSupport = engine.enableOfflineSupport;
             if (canUseOfflineSupport) {
@@ -580,7 +568,20 @@ export class SceneLoader {
                 manifestChecked();
             }
         }
+        // Loading file from disk via input file or drag'n'drop
+        else {
+            if (file) {
+                const errorCallback = (error: ReadFileError) => {
+                    onError(error.message, error);
+                };
 
+                request = plugin.readFile
+                    ? plugin.readFile(scene, file, dataCallback, onProgress, useArrayBuffer, errorCallback)
+                    : scene._readFile(file, dataCallback, onProgress, useArrayBuffer, errorCallback);
+            } else {
+                onError("Unable to find file named " + fileInfo.name);
+            }
+        }
         return plugin;
     }
 
@@ -600,10 +601,6 @@ export class SceneLoader {
             name = sceneFile.name;
             file = sceneFile;
         }
-        else if (typeof sceneFilename === "string" && Tools.IsBase64(sceneFilename)) {
-            url = rootUrl + sceneFilename;
-            name = "";
-        }
         else {
             const filename = sceneFilename as string;
             if (filename.substr(0, 1) === "/") {
@@ -615,10 +612,6 @@ export class SceneLoader {
             name = filename;
         }
 
-        if (StringTools.StartsWith(url, "file:") && name) {
-            file = FilesInputStore.FilesToLoad[name.toLowerCase()];
-        }
-
         return {
             url: url,
             rootUrl: rootUrl,