Browse Source

GLTFLoader: Suppress unknown extension warning

Takahiro 5 years ago
parent
commit
f96383799a
2 changed files with 64 additions and 42 deletions
  1. 32 21
      examples/js/loaders/GLTFLoader.js
  2. 32 21
      examples/jsm/loaders/GLTFLoader.js

+ 32 - 21
examples/js/loaders/GLTFLoader.js

@@ -141,6 +141,7 @@ THREE.GLTFLoader = ( function () {
 
 			var content;
 			var extensions = {};
+			var plugins = {};
 
 			if ( typeof data === 'string' ) {
 
@@ -182,6 +183,27 @@ THREE.GLTFLoader = ( function () {
 
 			}
 
+			var parser = new GLTFParser( json, {
+
+				path: path || this.resourcePath || '',
+				crossOrigin: this.crossOrigin,
+				manager: this.manager
+
+			} );
+
+			for ( var i = 0; i < this.pluginCallbacks.length; i ++ ) {
+
+				var plugin = this.pluginCallbacks[ i ]( parser );
+				plugins[ plugin.name ] = plugin;
+
+				// Workaround to avoid determining as unknown extension
+				// in addUnknownExtensionsToUserData().
+				// Remove this workaround if we move all the existing
+				// extension handlers to plugin system
+				extensions[ plugin.name ] = true;
+
+			}
+
 			if ( json.extensionsUsed ) {
 
 				for ( var i = 0; i < json.extensionsUsed.length; ++ i ) {
@@ -221,7 +243,7 @@ THREE.GLTFLoader = ( function () {
 
 						default:
 
-							if ( extensionsRequired.indexOf( extensionName ) >= 0 ) {
+							if ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {
 
 								console.warn( 'THREE.GLTFLoader: Unknown extension "' + extensionName + '".' );
 
@@ -233,14 +255,8 @@ THREE.GLTFLoader = ( function () {
 
 			}
 
-			var parser = new GLTFParser( json, extensions, {
-
-				path: path || this.resourcePath || '',
-				crossOrigin: this.crossOrigin,
-				manager: this.manager
-
-			} );
-			parser.setPluginCallbacks( this.pluginCallbacks );
+			parser.setExtensions( extensions );
+			parser.setPlugins( plugins );
 			parser.parse( onLoad, onError );
 
 		}
@@ -1428,10 +1444,10 @@ THREE.GLTFLoader = ( function () {
 
 	/* GLTF PARSER */
 
-	function GLTFParser( json, extensions, options ) {
+	function GLTFParser( json, options ) {
 
 		this.json = json || {};
-		this.extensions = extensions || {};
+		this.extensions = {};
 		this.plugins = {};
 		this.options = options || {};
 
@@ -1455,20 +1471,15 @@ THREE.GLTFLoader = ( function () {
 
 	}
 
-	GLTFParser.prototype.setPluginCallbacks = function ( pluginCallbacks ) {
+	GLTFParser.prototype.setExtensions = function ( extensions ) {
 
-		for ( var i = 0; i < pluginCallbacks.length; i ++ ) {
+		this.extensions = extensions;
 
-			var plugin = pluginCallbacks[ i ]( this );
-			this.plugins[ plugin.name ] = plugin;
+	};
 
-			// Workaround to avoid determining as unknown extension
-			// in addUnknownExtensionsToUserData().
-			// Remove this workaround if we move all the existing
-			// extension handlers to plugin system
-			this.extensions[ plugin.name ] = true;
+	GLTFParser.prototype.setPlugins = function ( plugins ) {
 
-		}
+		this.plugins = plugins;
 
 	};
 

+ 32 - 21
examples/jsm/loaders/GLTFLoader.js

@@ -205,6 +205,7 @@ var GLTFLoader = ( function () {
 
 			var content;
 			var extensions = {};
+			var plugins = {};
 
 			if ( typeof data === 'string' ) {
 
@@ -246,6 +247,27 @@ var GLTFLoader = ( function () {
 
 			}
 
+			var parser = new GLTFParser( json, {
+
+				path: path || this.resourcePath || '',
+				crossOrigin: this.crossOrigin,
+				manager: this.manager
+
+			} );
+
+			for ( var i = 0; i < this.pluginCallbacks.length; i ++ ) {
+
+				var plugin = this.pluginCallbacks[ i ]( parser );
+				plugins[ plugin.name ] = plugin;
+
+				// Workaround to avoid determining as unknown extension
+				// in addUnknownExtensionsToUserData().
+				// Remove this workaround if we move all the existing
+				// extension handlers to plugin system
+				extensions[ plugin.name ] = true;
+
+			}
+
 			if ( json.extensionsUsed ) {
 
 				for ( var i = 0; i < json.extensionsUsed.length; ++ i ) {
@@ -285,7 +307,7 @@ var GLTFLoader = ( function () {
 
 						default:
 
-							if ( extensionsRequired.indexOf( extensionName ) >= 0 ) {
+							if ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {
 
 								console.warn( 'THREE.GLTFLoader: Unknown extension "' + extensionName + '".' );
 
@@ -297,14 +319,8 @@ var GLTFLoader = ( function () {
 
 			}
 
-			var parser = new GLTFParser( json, extensions, {
-
-				path: path || this.resourcePath || '',
-				crossOrigin: this.crossOrigin,
-				manager: this.manager
-
-			} );
-			parser.setPluginCallbacks( this.pluginCallbacks );
+			parser.setExtensions( extensions );
+			parser.setPlugins( plugins );
 			parser.parse( onLoad, onError );
 
 		}
@@ -1492,10 +1508,10 @@ var GLTFLoader = ( function () {
 
 	/* GLTF PARSER */
 
-	function GLTFParser( json, extensions, options ) {
+	function GLTFParser( json, options ) {
 
 		this.json = json || {};
-		this.extensions = extensions || {};
+		this.extensions = {};
 		this.plugins = {};
 		this.options = options || {};
 
@@ -1519,20 +1535,15 @@ var GLTFLoader = ( function () {
 
 	}
 
-	GLTFParser.prototype.setPluginCallbacks = function ( pluginCallbacks ) {
+	GLTFParser.prototype.setExtensions = function ( extensions ) {
 
-		for ( var i = 0; i < pluginCallbacks.length; i ++ ) {
+		this.extensions = extensions;
 
-			var plugin = pluginCallbacks[ i ]( this );
-			this.plugins[ plugin.name ] = plugin;
+	};
 
-			// Workaround to avoid determining as unknown extension
-			// in addUnknownExtensionsToUserData().
-			// Remove this workaround if we move all the existing
-			// extension handlers to plugin system
-			this.extensions[ plugin.name ] = true;
+	GLTFParser.prototype.setPlugins = function ( plugins ) {
 
-		}
+		this.plugins = plugins;
 
 	};