| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | import {	CubeTexture,	DataTexture,	FileLoader,	FloatType,	HalfFloatType,	LinearEncoding,	LinearFilter,	Loader,	NearestFilter,	RGBAFormat,	RGBEEncoding,	RGBFormat,	UnsignedByteType} from '../../../build/three.module.js';import { RGBELoader } from '../loaders/RGBELoader.js';class HDRCubeTextureLoader extends Loader {	constructor( manager ) {		super( manager );		this.hdrLoader = new RGBELoader();		this.type = HalfFloatType;	}	load( urls, onLoad, onProgress, onError ) {		if ( ! Array.isArray( urls ) ) {			console.warn( 'THREE.HDRCubeTextureLoader signature has changed. Use .setDataType() instead.' );			this.setDataType( urls );			urls = onLoad;			onLoad = onProgress;			onProgress = onError;			onError = arguments[ 4 ];		}		const texture = new CubeTexture();		texture.type = this.type;		switch ( texture.type ) {			case UnsignedByteType:				texture.encoding = RGBEEncoding;				texture.format = RGBAFormat;				texture.minFilter = NearestFilter;				texture.magFilter = NearestFilter;				texture.generateMipmaps = false;				break;			case FloatType:				texture.encoding = LinearEncoding;				texture.format = RGBFormat;				texture.minFilter = LinearFilter;				texture.magFilter = LinearFilter;				texture.generateMipmaps = false;				break;			case HalfFloatType:				texture.encoding = LinearEncoding;				texture.format = RGBFormat;				texture.minFilter = LinearFilter;				texture.magFilter = LinearFilter;				texture.generateMipmaps = false;				break;		}		const scope = this;		let loaded = 0;		function loadHDRData( i, onLoad, onProgress, onError ) {			new FileLoader( scope.manager )				.setPath( scope.path )				.setResponseType( 'arraybuffer' )				.setWithCredentials( scope.withCredentials )				.load( urls[ i ], function ( buffer ) {					loaded ++;					const texData = scope.hdrLoader.parse( buffer );					if ( ! texData ) return;					if ( texData.data !== undefined ) {						const dataTexture = new DataTexture( texData.data, texData.width, texData.height );						dataTexture.type = texture.type;						dataTexture.encoding = texture.encoding;						dataTexture.format = texture.format;						dataTexture.minFilter = texture.minFilter;						dataTexture.magFilter = texture.magFilter;						dataTexture.generateMipmaps = texture.generateMipmaps;						texture.images[ i ] = dataTexture;					}					if ( loaded === 6 ) {						texture.needsUpdate = true;						if ( onLoad ) onLoad( texture );					}				}, onProgress, onError );		}		for ( let i = 0; i < urls.length; i ++ ) {			loadHDRData( i, onLoad, onProgress, onError );		}		return texture;	}	setDataType( value ) {		this.type = value;		this.hdrLoader.setDataType( value );		return this;	}}export { HDRCubeTextureLoader };
 |