69 lines
1.3 KiB
JavaScript
69 lines
1.3 KiB
JavaScript
|
/**
|
||
|
* @author mrdoob / http://mrdoob.com/
|
||
|
*/
|
||
|
|
||
|
import { RGBAFormat, RGBFormat } from '../constants.js';
|
||
|
import { ImageLoader } from './ImageLoader.js';
|
||
|
import { Texture } from '../textures/Texture.js';
|
||
|
import { DefaultLoadingManager } from './LoadingManager.js';
|
||
|
|
||
|
|
||
|
function TextureLoader( manager ) {
|
||
|
|
||
|
this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
|
||
|
|
||
|
}
|
||
|
|
||
|
Object.assign( TextureLoader.prototype, {
|
||
|
|
||
|
crossOrigin: 'anonymous',
|
||
|
|
||
|
load: function ( url, onLoad, onProgress, onError ) {
|
||
|
|
||
|
var texture = new Texture();
|
||
|
|
||
|
var loader = new ImageLoader( this.manager );
|
||
|
loader.setCrossOrigin( this.crossOrigin );
|
||
|
loader.setPath( this.path );
|
||
|
|
||
|
loader.load( url, function ( image ) {
|
||
|
|
||
|
texture.image = image;
|
||
|
|
||
|
// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.
|
||
|
var isJPEG = url.search( /\.jpe?g$/i ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0;
|
||
|
|
||
|
texture.format = isJPEG ? RGBFormat : RGBAFormat;
|
||
|
texture.needsUpdate = true;
|
||
|
|
||
|
if ( onLoad !== undefined ) {
|
||
|
|
||
|
onLoad( texture );
|
||
|
|
||
|
}
|
||
|
|
||
|
}, onProgress, onError );
|
||
|
|
||
|
return texture;
|
||
|
|
||
|
},
|
||
|
|
||
|
setCrossOrigin: function ( value ) {
|
||
|
|
||
|
this.crossOrigin = value;
|
||
|
return this;
|
||
|
|
||
|
},
|
||
|
|
||
|
setPath: function ( value ) {
|
||
|
|
||
|
this.path = value;
|
||
|
return this;
|
||
|
|
||
|
}
|
||
|
|
||
|
} );
|
||
|
|
||
|
|
||
|
export { TextureLoader };
|