content/hifi-content/dave/walk-tools/walkTools/libraries/three.js/loaders/CompressedTextureLoader.js
2022-02-13 22:49:05 +01:00

126 lines
2.2 KiB
JavaScript

/**
* @author mrdoob / http://mrdoob.com/
*
* Abstract Base class to block based textures loader (dds, pvr, ...)
*/
THREE.CompressedTextureLoader = function () {
// override in sub classes
this._parser = null;
};
THREE.CompressedTextureLoader.prototype = {
constructor: THREE.CompressedTextureLoader,
load: function ( url, onLoad, onError ) {
var scope = this;
var images = [];
var texture = new THREE.CompressedTexture();
texture.image = images;
var loader = new THREE.XHRLoader();
loader.setResponseType( 'arraybuffer' );
if ( url instanceof Array ) {
var loaded = 0;
var loadTexture = function ( i ) {
loader.load( url[ i ], function ( buffer ) {
var texDatas = scope._parser( buffer, true );
images[ i ] = {
width: texDatas.width,
height: texDatas.height,
format: texDatas.format,
mipmaps: texDatas.mipmaps
};
loaded += 1;
if ( loaded === 6 ) {
if (texDatas.mipmapCount == 1)
texture.minFilter = THREE.LinearFilter;
texture.format = texDatas.format;
texture.needsUpdate = true;
if ( onLoad ) onLoad( texture );
}
} );
};
for ( var i = 0, il = url.length; i < il; ++ i ) {
loadTexture( i );
}
} else {
// compressed cubemap texture stored in a single DDS file
loader.load( url, function ( buffer ) {
var texDatas = scope._parser( buffer, true );
if ( texDatas.isCubemap ) {
var faces = texDatas.mipmaps.length / texDatas.mipmapCount;
for ( var f = 0; f < faces; f ++ ) {
images[ f ] = { mipmaps : [] };
for ( var i = 0; i < texDatas.mipmapCount; i ++ ) {
images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );
images[ f ].format = texDatas.format;
images[ f ].width = texDatas.width;
images[ f ].height = texDatas.height;
}
}
} else {
texture.image.width = texDatas.width;
texture.image.height = texDatas.height;
texture.mipmaps = texDatas.mipmaps;
}
if ( texDatas.mipmapCount === 1 ) {
texture.minFilter = THREE.LinearFilter;
}
texture.format = texDatas.format;
texture.needsUpdate = true;
if ( onLoad ) onLoad( texture );
} );
}
return texture;
}
};