Jelajahi Sumber

[gltf] More consistent error handling.

Don McCurdy 8 tahun lalu
induk
melakukan
2887095436
1 mengubah file dengan 25 tambahan dan 9 penghapusan
  1. 25 9
      examples/js/loaders/GLTF2Loader.js

+ 25 - 9
examples/js/loaders/GLTF2Loader.js

@@ -30,7 +30,16 @@ THREE.GLTF2Loader = ( function () {
 
 
 			loader.load( url, function ( data ) {
 			loader.load( url, function ( data ) {
 
 
-				scope.parse( data, onLoad, path );
+				try {
+
+					scope.parse( data, path, onLoad, onError );
+
+				} catch ( e ) {
+
+					// For SyntaxError or TypeError, return a generic failure message.
+					onError( e.constructor === Error ? e : new Error( 'THREE.GLTF2Loader: Unable to parse model.' ) );
+
+				}
 
 
 			}, onProgress, onError );
 			}, onProgress, onError );
 
 
@@ -48,7 +57,7 @@ THREE.GLTF2Loader = ( function () {
 
 
 		},
 		},
 
 
-		parse: function ( data, callback, path ) {
+		parse: function ( data, path, onLoad, onError ) {
 
 
 			var content;
 			var content;
 			var extensions = {};
 			var extensions = {};
@@ -68,6 +77,13 @@ THREE.GLTF2Loader = ( function () {
 
 
 			var json = JSON.parse( content );
 			var json = JSON.parse( content );
 
 
+			if ( json.asset.version[0] < 2 ) {
+
+				onError( new Error( 'THREE.GLTF2Loader: Legacy glTF detected. Use THREE.GLTFLoader instead.' ) );
+				return;
+
+			}
+
 			if ( json.extensionsUsed ) {
 			if ( json.extensionsUsed ) {
 
 
 				if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_LIGHTS ) >= 0 ) {
 				if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_LIGHTS ) >= 0 ) {
@@ -116,9 +132,9 @@ THREE.GLTF2Loader = ( function () {
 					animations: animations
 					animations: animations
 				};
 				};
 
 
-				callback( glTF );
+				onLoad( glTF );
 
 
-			} );
+			}, onError );
 
 
 		}
 		}
 
 
@@ -582,7 +598,7 @@ THREE.GLTF2Loader = ( function () {
 
 
 		if ( ! materialParams.fragmentShader ) {
 		if ( ! materialParams.fragmentShader ) {
 
 
-			throw new Error( 'THREE.GLTF2Loader: Missing fragment shader definition: ', program.fragmentShader );
+			throw new Error( 'THREE.GLTF2Loader: Missing fragment shader definition: ' + program.fragmentShader );
 
 
 		}
 		}
 
 
@@ -590,7 +606,7 @@ THREE.GLTF2Loader = ( function () {
 
 
 		if ( ! vertexShader ) {
 		if ( ! vertexShader ) {
 
 
-			throw new Error( 'THREE.GLTF2Loader: Missing vertex shader definition: ', program.vertexShader );
+			throw new Error( 'THREE.GLTF2Loader: Missing vertex shader definition: ' + program.vertexShader );
 
 
 		}
 		}
 
 
@@ -1643,7 +1659,7 @@ THREE.GLTF2Loader = ( function () {
 
 
 	};
 	};
 
 
-	GLTFParser.prototype.parse = function ( callback ) {
+	GLTFParser.prototype.parse = function ( onLoad, onError ) {
 
 
 		var json = this.json;
 		var json = this.json;
 
 
@@ -1686,9 +1702,9 @@ THREE.GLTF2Loader = ( function () {
 
 
 			}
 			}
 
 
-			callback( scene, scenes, cameras, animations );
+			onLoad( scene, scenes, cameras, animations );
 
 
-		} );
+		} ).catch( onError );
 
 
 	};
 	};