提交 e4208e30 编写于 作者: M Mr.doob

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...
上级 9a9d0ca7
...@@ -16,7 +16,7 @@ THREE.OBJLoader.prototype = { ...@@ -16,7 +16,7 @@ THREE.OBJLoader.prototype = {
var scope = this; var scope = this;
var loader = new THREE.XHRLoader(); var loader = new THREE.XHRLoader( scope.manager );
loader.setCrossOrigin( this.crossOrigin ); loader.setCrossOrigin( this.crossOrigin );
loader.load( url, function ( text ) { loader.load( url, function ( text ) {
......
...@@ -68,24 +68,16 @@ ...@@ -68,24 +68,16 @@
scene.add( ambient ); scene.add( ambient );
var directionalLight = new THREE.DirectionalLight( 0xffeedd ); var directionalLight = new THREE.DirectionalLight( 0xffeedd );
directionalLight.position.set( 0, 0, 1 ).normalize(); directionalLight.position.set( 0, 0, 1 );
scene.add( directionalLight ); scene.add( directionalLight );
// texture // texture
var manager = new THREE.LoadingManager(); var manager = new THREE.LoadingManager( function ( item, loaded, total ) {
/*
manager.onLoad( function () {
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(); var texture = new THREE.Texture();
......
...@@ -14,12 +14,14 @@ THREE.ImageLoader.prototype = { ...@@ -14,12 +14,14 @@ THREE.ImageLoader.prototype = {
load: function ( url, onLoad, onProgress, onError ) { load: function ( url, onLoad, onProgress, onError ) {
var scope = this;
var image = document.createElement( 'img' ); var image = document.createElement( 'img' );
if ( onLoad !== undefined ) { if ( onLoad !== undefined ) {
image.addEventListener( 'load', function ( event ) { image.addEventListener( 'load', function ( event ) {
scope.manager.itemEnd( url );
onLoad( this ); onLoad( this );
}, false ); }, false );
...@@ -50,6 +52,8 @@ THREE.ImageLoader.prototype = { ...@@ -50,6 +52,8 @@ THREE.ImageLoader.prototype = {
image.src = url; image.src = url;
scope.manager.itemStart( url );
}, },
setCrossOrigin: function ( value ) { setCrossOrigin: function ( value ) {
......
...@@ -2,93 +2,30 @@ ...@@ -2,93 +2,30 @@
* @author mrdoob / http://mrdoob.com/ * @author mrdoob / http://mrdoob.com/
*/ */
THREE.LoadingManager = function ( onLoad, onProgress, onError ) { THREE.LoadingManager = function ( onItemLoad ) {
var scope = this; var scope = this;
var loaders = {};
var queue = [];
var cache = {};
var loaded = 0, total = 0; var loaded = 0, total = 0;
var loadNext = function () { this.itemStart = function ( url ) {
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 ] );
}
onLoad( item ); total ++;
}
queue.shift();
}; };
var onItemLoaded = function ( item ) { this.itemEnd = function ( url ) {
loaded ++; loaded ++;
onProgress( item, loaded, total ); if ( onItemLoad !== undefined ) {
if ( queue.length > 0 ) {
loadNext();
}
if ( loaded === total ) {
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(); THREE.DefaultLoadingManager = new THREE.LoadingManager();
...@@ -14,7 +14,9 @@ THREE.TextureLoader.prototype = { ...@@ -14,7 +14,9 @@ THREE.TextureLoader.prototype = {
load: function ( url, onLoad, onProgress, onError ) { 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.setCrossOrigin( this.crossOrigin );
loader.load( url, function ( image ) { loader.load( url, function ( image ) {
......
...@@ -14,12 +14,14 @@ THREE.XHRLoader.prototype = { ...@@ -14,12 +14,14 @@ THREE.XHRLoader.prototype = {
load: function ( url, onLoad, onProgress, onError ) { load: function ( url, onLoad, onProgress, onError ) {
var scope = this;
var request = new XMLHttpRequest(); var request = new XMLHttpRequest();
if ( onLoad !== undefined ) { if ( onLoad !== undefined ) {
request.addEventListener( 'load', function ( event ) { request.addEventListener( 'load', function ( event ) {
scope.manager.itemEnd( url );
onLoad( event.target.responseText ); onLoad( event.target.responseText );
}, false ); }, false );
...@@ -51,6 +53,8 @@ THREE.XHRLoader.prototype = { ...@@ -51,6 +53,8 @@ THREE.XHRLoader.prototype = {
request.open( 'GET', url, true ); request.open( 'GET', url, true );
request.send( null ); request.send( null );
scope.manager.itemStart( url );
}, },
setCrossOrigin: function ( value ) { setCrossOrigin: function ( value ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册