import { ImageLoader } from './ImageLoader.js';
import * as THREE from 'three';
/**
* @module TextureLoader
* @description Texture loader based on {@link https://github.com/mrdoob/three.js/blob/master/src/loaders/TextureLoader.js}
*/
const TextureLoader = {
/**
* Load image texture
* @example PANOLENS.TextureLoader.load( IMAGE_URL )
* @method load
* @param {string} url - An image url
* @param {function} onLoad - On load callback
* @param {function} onProgress - In progress callback
* @param {function} onError - On error callback
* @return {THREE.Texture} - Image texture
*/
load: function ( url, onLoad = () => {}, onProgress, onError ) {
const texture = new THREE.Texture();
ImageLoader.load( url, function ( image ) {
texture.image = image;
// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.
const isJPEG = url.search( /\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0;
texture.format = isJPEG ? THREE.RGBFormat : THREE.RGBAFormat;
texture.needsUpdate = true;
onLoad( texture );
}, onProgress, onError );
return texture;
}
};
export { TextureLoader };