From 288709543605a598a99e45a9c9bc1c388e0df76e Mon Sep 17 00:00:00 2001 From: Don McCurdy Date: Fri, 28 Jul 2017 23:52:05 -0700 Subject: [PATCH] [gltf] More consistent error handling. --- examples/js/loaders/GLTF2Loader.js | 34 ++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/examples/js/loaders/GLTF2Loader.js b/examples/js/loaders/GLTF2Loader.js index 2cc6849403..796083df13 100644 --- a/examples/js/loaders/GLTF2Loader.js +++ b/examples/js/loaders/GLTF2Loader.js @@ -30,7 +30,16 @@ THREE.GLTF2Loader = ( function () { 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 ); @@ -48,7 +57,7 @@ THREE.GLTF2Loader = ( function () { }, - parse: function ( data, callback, path ) { + parse: function ( data, path, onLoad, onError ) { var content; var extensions = {}; @@ -68,6 +77,13 @@ THREE.GLTF2Loader = ( function () { 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.indexOf( EXTENSIONS.KHR_LIGHTS ) >= 0 ) { @@ -116,9 +132,9 @@ THREE.GLTF2Loader = ( function () { animations: animations }; - callback( glTF ); + onLoad( glTF ); - } ); + }, onError ); } @@ -582,7 +598,7 @@ THREE.GLTF2Loader = ( function () { 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 ) { - 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; @@ -1686,9 +1702,9 @@ THREE.GLTF2Loader = ( function () { } - callback( scene, scenes, cameras, animations ); + onLoad( scene, scenes, cameras, animations ); - } ); + } ).catch( onError ); }; -- GitLab