File: //var/www/aspa/three/textures/Source.js
import { ImageUtils } from '../extras/ImageUtils.js';
import * as MathUtils from '../math/MathUtils.js';
let _sourceId = 0;
class Source {
	constructor( data = null ) {
		this.isSource = true;
		Object.defineProperty( this, 'id', { value: _sourceId ++ } );
		this.uuid = MathUtils.generateUUID();
		this.data = data;
		this.dataReady = true;
		this.version = 0;
	}
	set needsUpdate( value ) {
		if ( value === true ) this.version ++;
	}
	toJSON( meta ) {
		const isRootObject = ( meta === undefined || typeof meta === 'string' );
		if ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {
			return meta.images[ this.uuid ];
		}
		const output = {
			uuid: this.uuid,
			url: ''
		};
		const data = this.data;
		if ( data !== null ) {
			let url;
			if ( Array.isArray( data ) ) {
				// cube texture
				url = [];
				for ( let i = 0, l = data.length; i < l; i ++ ) {
					if ( data[ i ].isDataTexture ) {
						url.push( serializeImage( data[ i ].image ) );
					} else {
						url.push( serializeImage( data[ i ] ) );
					}
				}
			} else {
				// texture
				url = serializeImage( data );
			}
			output.url = url;
		}
		if ( ! isRootObject ) {
			meta.images[ this.uuid ] = output;
		}
		return output;
	}
}
function serializeImage( image ) {
	if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
		( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
		( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {
		// default images
		return ImageUtils.getDataURL( image );
	} else {
		if ( image.data ) {
			// images of DataTexture
			return {
				data: Array.from( image.data ),
				width: image.width,
				height: image.height,
				type: image.data.constructor.name
			};
		} else {
			console.warn( 'THREE.Texture: Unable to serialize Texture.' );
			return {};
		}
	}
}
export { Source };