From e4208e30daec37194fc2a7355495bfad0f5486cf Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Mon, 3 Jun 2013 12:39:02 +0200 Subject: [PATCH] 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... --- examples/js/loaders/OBJLoader.js | 2 +- examples/webgl_loader_obj.html | 14 ++---- src/loaders/ImageLoader.js | 4 ++ src/loaders/LoadingManager.js | 75 +++----------------------------- src/loaders/TextureLoader.js | 4 +- src/loaders/XHRLoader.js | 4 ++ 6 files changed, 21 insertions(+), 82 deletions(-) diff --git a/examples/js/loaders/OBJLoader.js b/examples/js/loaders/OBJLoader.js index 6e0cff9bd2..15ff6124aa 100644 --- a/examples/js/loaders/OBJLoader.js +++ b/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 ) { diff --git a/examples/webgl_loader_obj.html b/examples/webgl_loader_obj.html index a0c63093e5..16df685733 100644 --- a/examples/webgl_loader_obj.html +++ b/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(); diff --git a/src/loaders/ImageLoader.js b/src/loaders/ImageLoader.js index 74721e1ff6..ad695052a3 100644 --- a/src/loaders/ImageLoader.js +++ b/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 ) { diff --git a/src/loaders/LoadingManager.js b/src/loaders/LoadingManager.js index c3bd89ae73..41cda5c4cd 100644 --- a/src/loaders/LoadingManager.js +++ b/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(); diff --git a/src/loaders/TextureLoader.js b/src/loaders/TextureLoader.js index ec675204ad..9b5698e14a 100644 --- a/src/loaders/TextureLoader.js +++ b/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 ) { diff --git a/src/loaders/XHRLoader.js b/src/loaders/XHRLoader.js index fb78dccb27..4736cbdc48 100644 --- a/src/loaders/XHRLoader.js +++ b/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 ) { -- GitLab