提交 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 = {
var scope = this;
var loader = new THREE.XHRLoader();
var loader = new THREE.XHRLoader( scope.manager );
loader.setCrossOrigin( this.crossOrigin );
loader.load( url, function ( text ) {
......
......@@ -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();
......
......@@ -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 ) {
......
......@@ -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();
......@@ -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 ) {
......
......@@ -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 ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册