| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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.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 };
|