Spaces:
Running
Running
import { LinearFilter, LinearMipMapLinearFilter, ClampToEdgeWrapping } from '../constants.js'; | |
import { FileLoader } from './FileLoader.js'; | |
import { DataTexture } from '../textures/DataTexture.js'; | |
import { DefaultLoadingManager } from './LoadingManager.js'; | |
/** | |
* @author Nikos M. / https://github.com/foo123/ | |
* | |
* Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) | |
*/ | |
function DataTextureLoader( manager ) { | |
this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; | |
// override in sub classes | |
this._parser = null; | |
} | |
Object.assign( DataTextureLoader.prototype, { | |
load: function ( url, onLoad, onProgress, onError ) { | |
var scope = this; | |
var texture = new DataTexture(); | |
var loader = new FileLoader( this.manager ); | |
loader.setResponseType( 'arraybuffer' ); | |
loader.setPath( this.path ); | |
loader.load( url, function ( buffer ) { | |
var texData = scope._parser( buffer ); | |
if ( ! texData ) return; | |
if ( texData.image !== undefined ) { | |
texture.image = texData.image; | |
} else if ( texData.data !== undefined ) { | |
texture.image.width = texData.width; | |
texture.image.height = texData.height; | |
texture.image.data = texData.data; | |
} | |
texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; | |
texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; | |
texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; | |
texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearMipMapLinearFilter; | |
texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; | |
if ( texData.format !== undefined ) { | |
texture.format = texData.format; | |
} | |
if ( texData.type !== undefined ) { | |
texture.type = texData.type; | |
} | |
if ( texData.mipmaps !== undefined ) { | |
texture.mipmaps = texData.mipmaps; | |
} | |
if ( texData.mipmapCount === 1 ) { | |
texture.minFilter = LinearFilter; | |
} | |
texture.needsUpdate = true; | |
if ( onLoad ) onLoad( texture, texData ); | |
}, onProgress, onError ); | |
return texture; | |
}, | |
setPath: function ( value ) { | |
this.path = value; | |
return this; | |
} | |
} ); | |
export { DataTextureLoader }; | |