fireball/lib/loaders/ImageBitmapLoader.js

111 lines
1.7 KiB
JavaScript
Raw Permalink Normal View History

2018-12-25 13:59:22 +00:00
/**
* @author thespite / http://clicktorelease.com/
*/
import { Cache } from './Cache.js';
import { DefaultLoadingManager } from './LoadingManager.js';
function ImageBitmapLoader( manager ) {
if ( typeof createImageBitmap === 'undefined' ) {
console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );
}
if ( typeof fetch === 'undefined' ) {
console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );
}
this.manager = manager !== undefined ? manager : DefaultLoadingManager;
this.options = undefined;
}
ImageBitmapLoader.prototype = {
constructor: ImageBitmapLoader,
setOptions: function setOptions( options ) {
this.options = options;
return this;
},
load: function ( url, onLoad, onProgress, onError ) {
if ( url === undefined ) url = '';
if ( this.path !== undefined ) url = this.path + url;
url = this.manager.resolveURL( url );
var scope = this;
var cached = Cache.get( url );
if ( cached !== undefined ) {
scope.manager.itemStart( url );
setTimeout( function () {
if ( onLoad ) onLoad( cached );
scope.manager.itemEnd( url );
}, 0 );
return cached;
}
fetch( url ).then( function ( res ) {
return res.blob();
} ).then( function ( blob ) {
return createImageBitmap( blob, scope.options );
} ).then( function ( imageBitmap ) {
Cache.add( url, imageBitmap );
if ( onLoad ) onLoad( imageBitmap );
scope.manager.itemEnd( url );
} ).catch( function ( e ) {
if ( onError ) onError( e );
scope.manager.itemEnd( url );
scope.manager.itemError( url );
} );
},
setCrossOrigin: function ( /* value */ ) {
return this;
},
setPath: function ( value ) {
this.path = value;
return this;
}
};
export { ImageBitmapLoader };