浏览代码

Merge pull request #11864 from donmccurdy/feat-gltf-error-handling

GLTF2Loader: Improved error handling.
Mr.doob 8 年之前
父节点
当前提交
2c97a3e311
共有 1 个文件被更改,包括 25 次插入9 次删除
  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 );
 
 
 	};
 	};