Browse Source

More work on LoadingManager.
Not too happy about it, but at least it's starting to be consistent. It's more of a monitor though...

Mr.doob 12 years ago
parent
commit
e4208e30da

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

@@ -16,7 +16,7 @@ THREE.OBJLoader.prototype = {
 
 		var scope = this;
 
-		var loader = new THREE.XHRLoader();
+		var loader = new THREE.XHRLoader( scope.manager );
 		loader.setCrossOrigin( this.crossOrigin );
 		loader.load( url, function ( text ) {
 

+ 3 - 11
examples/webgl_loader_obj.html

@@ -68,24 +68,16 @@
 				scene.add( ambient );
 
 				var directionalLight = new THREE.DirectionalLight( 0xffeedd );
-				directionalLight.position.set( 0, 0, 1 ).normalize();
+				directionalLight.position.set( 0, 0, 1 );
 				scene.add( directionalLight );
 
 				// texture
 
-				var manager = new THREE.LoadingManager();
-				/*
-				manager.onLoad( function () {
+				var manager = new THREE.LoadingManager( function ( item, loaded, total ) {
 
-					console.log( 'loading complete' );
+					console.log( item, loaded, total );
 
 				} );
-				manager.onProgress( function ( event ) {
-
-					console.log( 'loading', event.loaded / event.total );
-
-				} );
-				*/
 
 				var texture = new THREE.Texture();
 

+ 4 - 0
src/loaders/ImageLoader.js

@@ -14,12 +14,14 @@ THREE.ImageLoader.prototype = {
 
 	load: function ( url, onLoad, onProgress, onError ) {
 
+		var scope = this;
 		var image = document.createElement( 'img' );
 
 		if ( onLoad !== undefined ) {
 
 			image.addEventListener( 'load', function ( event ) {
 
+				scope.manager.itemEnd( url );
 				onLoad( this );
 
 			}, false );
@@ -50,6 +52,8 @@ THREE.ImageLoader.prototype = {
 
 		image.src = url;
 
+		scope.manager.itemStart( url );
+
 	},
 
 	setCrossOrigin: function ( value ) {

+ 6 - 69
src/loaders/LoadingManager.js

@@ -2,93 +2,30 @@
  * @author mrdoob / http://mrdoob.com/
  */
 
-THREE.LoadingManager = function ( onLoad, onProgress, onError ) {
+THREE.LoadingManager = function ( onItemLoad ) {
 
 	var scope = this;
 
-	var loaders = {};
-	var queue = [];
-	var cache = {};
-
 	var loaded = 0, total = 0;
 
-	var loadNext = function () {
-
-		var item = queue[ 0 ];
-
-		if ( cache[ item.url ] === undefined ) {
-
-			var loader = loaders[ item.type ];
-
-			if ( loader !== undefined ) {
-
-				loader.load( item.url, function ( event ) {
-
-					if ( item.onLoad !== undefined ) {
-
-						item.onLoad( event );
-
-					}
-
-					cache[ item.url ] = event;
-
-					onItemLoaded( item );
-
-				} );
-
-			}
-
-		} else {
-
-			if ( item.onLoad !== undefined ) {
-
-				item.onLoad( cache[ item.url ] );
-
-			}
+	this.itemStart = function ( url ) {
 
-			onLoad( item );
-
-		}
-
-		queue.shift();
+		total ++;
 
 	};
 
-	var onItemLoaded = function ( item ) {
+	this.itemEnd = function ( url ) {
 
 		loaded ++;
 
-		onProgress( item, loaded, total );
-
-		if ( queue.length > 0 ) {
-
-			loadNext();
-
-		}
-
-		if ( loaded === total ) {
+		if ( onItemLoad !== undefined ) {
 
-			onLoad();
+			onItemLoad( url, loaded, total );
 
 		}
 
 	};
 
-	this.add = function ( url, onLoad, onProgress, onError ) {
-
-		total ++;
-
-		queue.push( {
-			url: url,
-			onLoad: onLoad,
-			onProgress: onProgress,
-			onError: onError
-		} );
-
-		loadNext();
-
-	};
-
 };
 
 THREE.DefaultLoadingManager = new THREE.LoadingManager();

+ 3 - 1
src/loaders/TextureLoader.js

@@ -14,7 +14,9 @@ THREE.TextureLoader.prototype = {
 
 	load: function ( url, onLoad, onProgress, onError ) {
 
-		var loader = new THREE.ImageLoader();
+		var scope = this;
+
+		var loader = new THREE.ImageLoader( scope.manager );
 		loader.setCrossOrigin( this.crossOrigin );
 		loader.load( url, function ( image ) {
 

+ 4 - 0
src/loaders/XHRLoader.js

@@ -14,12 +14,14 @@ THREE.XHRLoader.prototype = {
 
 	load: function ( url, onLoad, onProgress, onError ) {
 
+		var scope = this;
 		var request = new XMLHttpRequest();
 
 		if ( onLoad !== undefined ) {
 
 			request.addEventListener( 'load', function ( event ) {
 
+				scope.manager.itemEnd( url );
 				onLoad( event.target.responseText );
 
 			}, false );
@@ -51,6 +53,8 @@ THREE.XHRLoader.prototype = {
 		request.open( 'GET', url, true );
 		request.send( null );
 
+		scope.manager.itemStart( url );
+
 	},
 
 	setCrossOrigin: function ( value ) {