Explorar el Código

LoaderUtils: Create utils from static Loader methods.

Don McCurdy hace 7 años
padre
commit
b66ff8007a

+ 2 - 2
examples/js/loaders/3MFLoader.js

@@ -89,7 +89,7 @@ THREE.ThreeMFLoader.prototype = {
 			}
 
 			var relsView = new Uint8Array( zip.file( relsName ).asArrayBuffer() );
-			var relsFileText = THREE.Loader.decodeText( relsView );
+			var relsFileText = THREE.LoaderUtils.decodeText( relsView );
 			rels = parseRelsXml( relsFileText );
 
 			for ( var i = 0; i < modelPartNames.length; i ++ ) {
@@ -97,7 +97,7 @@ THREE.ThreeMFLoader.prototype = {
 				var modelPart = modelPartNames[ i ];
 				var view = new Uint8Array( zip.file( modelPart ).asArrayBuffer() );
 
-				var fileText = THREE.Loader.decodeText( view );
+				var fileText = THREE.LoaderUtils.decodeText( view );
 				var xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );
 
 				if ( xmlData.documentElement.nodeName.toLowerCase() !== 'model' ) {

+ 1 - 1
examples/js/loaders/AMFLoader.js

@@ -86,7 +86,7 @@ THREE.AMFLoader.prototype = {
 
 			}
 
-			var fileText = THREE.Loader.decodeText( view );
+			var fileText = THREE.LoaderUtils.decodeText( view );
 			var xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );
 
 			if ( xmlData.documentElement.nodeName.toLowerCase() !== 'amf' ) {

+ 1 - 1
examples/js/loaders/AssimpJSONLoader.js

@@ -27,7 +27,7 @@ THREE.AssimpJSONLoader.prototype = {
 
 		var scope = this;
 
-		var path = THREE.Loader.prototype.extractUrlBase( url );
+		var path = THREE.LoaderUtils.extractUrlBase( url );
 
 		var loader = new THREE.FileLoader( this.manager );
 		loader.load( url, function ( text ) {

+ 1 - 1
examples/js/loaders/AssimpLoader.js

@@ -18,7 +18,7 @@ THREE.AssimpLoader.prototype = {
 
 		var scope = this;
 
-		var path = THREE.Loader.prototype.extractUrlBase( url );
+		var path = THREE.LoaderUtils.extractUrlBase( url );
 
 		var loader = new THREE.FileLoader( this.manager );
 		loader.setResponseType( 'arraybuffer' );

+ 3 - 3
examples/js/loaders/BinaryLoader.js

@@ -32,8 +32,8 @@ THREE.BinaryLoader.prototype = {
 
 		// todo: unify load API to for easier SceneLoader use
 
-		var texturePath = this.texturePath || THREE.Loader.prototype.extractUrlBase( url );
-		var binaryPath = this.binaryPath || THREE.Loader.prototype.extractUrlBase( url );
+		var texturePath = this.texturePath || THREE.LoaderUtils.extractUrlBase( url );
+		var binaryPath = this.binaryPath || THREE.LoaderUtils.extractUrlBase( url );
 
 		// #1 load JS part via web worker
 
@@ -245,7 +245,7 @@ THREE.BinaryLoader.prototype = {
 
 			function parseString( data, offset, length ) {
 
-				return THREE.Loader.decodeText( new Uint8Array( data, offset, length ) );
+				return THREE.LoaderUtils.decodeText( new Uint8Array( data, offset, length ) );
 
 			}
 

+ 1 - 1
examples/js/loaders/ColladaLoader.js

@@ -19,7 +19,7 @@ THREE.ColladaLoader.prototype = {
 
 		var scope = this;
 
-		var path = scope.path === undefined ? THREE.Loader.prototype.extractUrlBase( url ) : scope.path;
+		var path = scope.path === undefined ? THREE.LoaderUtils.extractUrlBase( url ) : scope.path;
 
 		var loader = new THREE.FileLoader( scope.manager );
 		loader.load( url, function ( text ) {

+ 3 - 3
examples/js/loaders/FBXLoader.js

@@ -42,7 +42,7 @@
 
 			var self = this;
 
-			var resourceDirectory = THREE.Loader.prototype.extractUrlBase( url );
+			var resourceDirectory = THREE.LoaderUtils.extractUrlBase( url );
 
 			var loader = new THREE.FileLoader( this.manager );
 			loader.setResponseType( 'arraybuffer' );
@@ -3630,7 +3630,7 @@
 
 		getString: function ( size ) {
 
-			var s = THREE.Loader.decodeText( this.getUint8Array( size ) );
+			var s = THREE.LoaderUtils.decodeText( this.getUint8Array( size ) );
 
 			this.skip( size );
 
@@ -3748,7 +3748,7 @@
 		if ( from === undefined ) from = 0;
 		if ( to === undefined ) to = buffer.byteLength;
 
-		return THREE.Loader.decodeText( new Uint8Array( buffer, from, to ) );
+		return THREE.LoaderUtils.decodeText( new Uint8Array( buffer, from, to ) );
 
 	}
 

+ 5 - 5
examples/js/loaders/GLTFLoader.js

@@ -24,7 +24,7 @@ THREE.GLTFLoader = ( function () {
 
 			var scope = this;
 
-			var path = this.path !== undefined ? this.path : THREE.Loader.prototype.extractUrlBase( url );
+			var path = this.path !== undefined ? this.path : THREE.LoaderUtils.extractUrlBase( url );
 
 			var loader = new THREE.FileLoader( scope.manager );
 
@@ -77,7 +77,7 @@ THREE.GLTFLoader = ( function () {
 
 			} else {
 
-				var magic = THREE.Loader.decodeText( new Uint8Array( data, 0, 4 ) );
+				var magic = THREE.LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );
 
 				if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {
 
@@ -96,7 +96,7 @@ THREE.GLTFLoader = ( function () {
 
 				} else {
 
-					content = THREE.Loader.decodeText( new Uint8Array( data ) );
+					content = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
 
 				}
 
@@ -410,7 +410,7 @@ THREE.GLTFLoader = ( function () {
 		var headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );
 
 		this.header = {
-			magic: THREE.Loader.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),
+			magic: THREE.LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),
 			version: headerView.getUint32( 4, true ),
 			length: headerView.getUint32( 8, true )
 		};
@@ -439,7 +439,7 @@ THREE.GLTFLoader = ( function () {
 			if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {
 
 				var contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );
-				this.content = THREE.Loader.decodeText( contentArray );
+				this.content = THREE.LoaderUtils.decodeText( contentArray );
 
 			} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {
 

+ 1 - 1
examples/js/loaders/MMDLoader.js

@@ -101,7 +101,7 @@ THREE.MMDLoader.prototype.loadModel = function ( url, callback, onProgress, onEr
 
 	var scope = this;
 
-	var texturePath = this.extractUrlBase( url );
+	var texturePath = THREE.LoaderUtils.extractUrlBase( url );
 	var modelExtension = this.extractExtension( url );
 
 	this.loadFileAsBuffer( url, function ( buffer ) {

+ 1 - 1
examples/js/loaders/PCDLoader.js

@@ -145,7 +145,7 @@ THREE.PCDLoader.prototype = {
 
 		}
 
-		var textData = THREE.Loader.decodeText( data );
+		var textData = THREE.LoaderUtils.decodeText( data );
 
 		// parse header (always ascii format)
 

+ 1 - 1
examples/js/loaders/PLYLoader.js

@@ -461,7 +461,7 @@ THREE.PLYLoader.prototype = {
 
 		if ( data instanceof ArrayBuffer ) {
 
-			var text = THREE.Loader.decodeText( new Uint8Array( data ) );
+			var text = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
 			var header = parseHeader( text );
 
 			geometry = header.format === 'ascii' ? parseASCII( text, header ) : parseBinary( data, header );

+ 1 - 1
examples/js/loaders/STLLoader.js

@@ -278,7 +278,7 @@ THREE.STLLoader.prototype = {
 
 			if ( typeof buffer !== 'string' ) {
 
-				return THREE.Loader.decodeText( new Uint8Array( buffer ) );
+				return THREE.LoaderUtils.decodeText( new Uint8Array( buffer ) );
 
 			}
 

+ 1 - 1
examples/js/loaders/VTKLoader.js

@@ -1186,7 +1186,7 @@ Object.assign( THREE.VTKLoader.prototype, THREE.EventDispatcher.prototype, {
 		}
 
 		// get the 5 first lines of the files to check if there is the key word binary
-		var meta = THREE.Loader.decodeText( new Uint8Array( data, 0, 250 ) ).split( '\n' );
+		var meta = THREE.LoaderUtils.decodeText( new Uint8Array( data, 0, 250 ) ).split( '\n' );
 
 		if ( meta[ 0 ].indexOf( 'xml' ) !== - 1 ) {
 

+ 2 - 2
examples/js/loaders/XLoader.js

@@ -370,7 +370,7 @@
 
 				if ( typeof buf !== "string" ) {
 
-					return THREE.Loader.decodeText( new Uint8Array( buf ) );
+					return THREE.LoaderUtils.decodeText( new Uint8Array( buf ) );
 
 				} else {
 
@@ -393,7 +393,7 @@
 			key: '_parseBinary',
 			value: function _parseBinary( data ) {
 
-				return this._parseASCII( THREE.Loader.decodeText( new Uint8Array( data ) ) );
+				return this._parseASCII( THREE.LoaderUtils.decodeText( new Uint8Array( data ) ) );
 
 			}
 		}, {

+ 1 - 1
examples/js/loaders/ctm/CTMLoader.js

@@ -27,7 +27,7 @@ THREE.CTMLoader.prototype.loadParts = function ( url, callback, parameters ) {
 
 	var xhr = new XMLHttpRequest();
 
-	var basePath = parameters.basePath ? parameters.basePath : this.extractUrlBase( url );
+	var basePath = parameters.basePath ? parameters.basePath : THREE.LoaderUtils.extractUrlBase( url );
 
 	xhr.onreadystatechange = function () {
 

+ 7 - 7
examples/js/loaders/deprecated/LegacyGLTFLoader.js

@@ -23,7 +23,7 @@ THREE.LegacyGLTFLoader = ( function () {
 
 			var scope = this;
 
-			var path = this.path && ( typeof this.path === "string" ) ? this.path : THREE.Loader.prototype.extractUrlBase( url );
+			var path = this.path && ( typeof this.path === "string" ) ? this.path : THREE.LoaderUtils.extractUrlBase( url );
 
 			var loader = new THREE.FileLoader( scope.manager );
 
@@ -54,7 +54,7 @@ THREE.LegacyGLTFLoader = ( function () {
 			var content;
 			var extensions = {};
 
-			var magic = THREE.Loader.decodeText( new Uint8Array( data, 0, 4 ) );
+			var magic = THREE.LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );
 
 			if ( magic === BINARY_EXTENSION_HEADER_DEFAULTS.magic ) {
 
@@ -63,7 +63,7 @@ THREE.LegacyGLTFLoader = ( function () {
 
 			} else {
 
-				content = THREE.Loader.decodeText( new Uint8Array( data ) );
+				content = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
 
 			}
 
@@ -358,7 +358,7 @@ THREE.LegacyGLTFLoader = ( function () {
 		var headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );
 
 		var header = {
-			magic: THREE.Loader.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),
+			magic: THREE.LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),
 			version: headerView.getUint32( 4, true ),
 			length: headerView.getUint32( 8, true ),
 			contentLength: headerView.getUint32( 12, true ),
@@ -380,7 +380,7 @@ THREE.LegacyGLTFLoader = ( function () {
 		var contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH, header.contentLength );
 
 		this.header = header;
-		this.content = THREE.Loader.decodeText( contentArray );
+		this.content = THREE.LoaderUtils.decodeText( contentArray );
 		this.body = data.slice( BINARY_EXTENSION_HEADER_LENGTH + header.contentLength, header.length );
 
 	}
@@ -390,7 +390,7 @@ THREE.LegacyGLTFLoader = ( function () {
 		var bufferView = bufferViews[ shader.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].bufferView ];
 		var array = new Uint8Array( bufferView );
 
-		return THREE.Loader.decodeText( array );
+		return THREE.LoaderUtils.decodeText( array );
 
 	};
 
@@ -398,7 +398,7 @@ THREE.LegacyGLTFLoader = ( function () {
 
 		var metadata = source.extensions[ EXTENSIONS.KHR_BINARY_GLTF ];
 		var bufferView = bufferViews[ metadata.bufferView ];
-		var stringData = THREE.Loader.decodeText( new Uint8Array( bufferView ) );
+		var stringData = THREE.LoaderUtils.decodeText( new Uint8Array( bufferView ) );
 
 		return 'data:' + metadata.mimeType + ';base64,' + btoa( stringData );
 

+ 1 - 1
examples/js/loaders/sea3d/SEA3D.js

@@ -277,7 +277,7 @@ SEA3D.Stream.prototype.readMatrix = function () {
 
 SEA3D.Stream.prototype.readUTF8 = function ( len ) {
 
-	return THREE.Loader.decodeText( new Uint8Array( this.readBytes( len ) ) );
+	return THREE.LoaderUtils.decodeText( new Uint8Array( this.readBytes( len ) ) );
 
 };
 

+ 1 - 0
src/Three.js

@@ -46,6 +46,7 @@ export { ImageBitmapLoader } from './loaders/ImageBitmapLoader.js';
 export { FontLoader } from './loaders/FontLoader.js';
 export { FileLoader } from './loaders/FileLoader.js';
 export { Loader } from './loaders/Loader.js';
+export { LoaderUtils } from './loaders/LoaderUtils.js';
 export { Cache } from './loaders/Cache.js';
 export { AudioLoader } from './loaders/AudioLoader.js';
 export { SpotLightShadow } from './lights/SpotLightShadow.js';

+ 0 - 36
src/loaders/Loader.js

@@ -69,18 +69,6 @@ Object.assign( Loader.prototype, {
 
 	crossOrigin: undefined,
 
-	extractUrlBase: function ( url ) {
-
-		var parts = url.split( '/' );
-
-		if ( parts.length === 1 ) return './';
-
-		parts.pop();
-
-		return parts.join( '/' ) + '/';
-
-	},
-
 	initMaterials: function ( materials, texturePath, crossOrigin ) {
 
 		var array = [];
@@ -351,28 +339,4 @@ Object.assign( Loader.prototype, {
 
 } );
 
-Loader.decodeText = function ( array ) {
-
-	if ( typeof TextDecoder !== 'undefined' ) {
-
-		return new TextDecoder().decode( array );
-
-	}
-
-	// Avoid the String.fromCharCode.apply(null, array) shortcut, which
-	// throws a "maximum call stack size exceeded" error for large arrays.
-
-	var s = '';
-
-	for ( var i = 0, il = array.length; i < il; i ++ ) {
-
-		// Implicitly assumes little-endian.
-		s += String.fromCharCode( array[ i ] );
-
-	}
-
-	return s;
-
-};
-
 export { Loader };

+ 42 - 0
src/loaders/LoaderUtils.js

@@ -0,0 +1,42 @@
+var LoaderUtils = {
+
+  decodeText: function ( array ) {
+
+    if ( typeof TextDecoder !== 'undefined' ) {
+
+      return new TextDecoder().decode( array );
+
+    }
+
+    // Avoid the String.fromCharCode.apply(null, array) shortcut, which
+    // throws a "maximum call stack size exceeded" error for large arrays.
+
+    var s = '';
+
+    for ( var i = 0, il = array.length; i < il; i ++ ) {
+
+      // Implicitly assumes little-endian.
+      s += String.fromCharCode( array[ i ] );
+
+    }
+
+    return s;
+
+  },
+
+  extractUrlBase: function ( url ) {
+
+    var parts = url.split( '/' );
+
+    if ( parts.length === 1 ) return './';
+
+    parts.pop();
+
+    return parts.join( '/' ) + '/';
+
+  }
+
+};
+
+export { LoaderUtils };
+