{"mappings":"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","names":["DataTextureLoader","DataUtils","FloatType","HalfFloatType","LinearFilter","LinearSRGBColorSpace","RGBELoader","manager","buffer","rgbe_error","rgbe_error_code","msg","NEWLINE","fgets","lineLimit","consume","p","len","chunk","RGBE_ReadHeader","magic_token_re","gamma_re","exposure_re","format_re","dimensions_re","header","line","match","RGBE_ReadPixels_RLE","w","h","scanline_width","data_rgba","offset","pos","ptr_end","rgbeStart","scanline_buffer","num_scanlines","ptr","count","isEncodedRun","byteValue","i","l","off","RGBEByteToRGBFloat","sourceArray","sourceOffset","destArray","destOffset","e","scale","RGBEByteToRGBHalf","byteArray","rgbe_header_info","image_rgba_data","data","type","numElements","floatArray","j","halfArray","value","url","onLoad","onProgress","onError","onLoadCallback","texture","texData"],"sources":["../esm/npm/three@0.160.1/node_modules/three/examples/jsm/loaders/RGBELoader.js"],"sourcesContent":["import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearSRGBColorSpace\n} from 'three';\n\n// https://github.com/mrdoob/three.js/issues/5552\n// http://en.wikipedia.org/wiki/RGBE_image_format\n\nclass RGBELoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\t// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n\tparse( buffer ) {\n\n\t\tconst\n\t\t\t/* default error routine.  change this to change error handling */\n\t\t\trgbe_read_error = 1,\n\t\t\trgbe_write_error = 2,\n\t\t\trgbe_format_error = 3,\n\t\t\trgbe_memory_error = 4,\n\t\t\trgbe_error = function ( rgbe_error_code, msg ) {\n\n\t\t\t\tswitch ( rgbe_error_code ) {\n\n\t\t\t\t\tcase rgbe_read_error: throw new Error( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_write_error: throw new Error( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_format_error: throw new Error( 'THREE.RGBELoader: Bad File Format: ' + ( msg || '' ) );\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase rgbe_memory_error: throw new Error( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/* offsets to red, green, and blue components in a data (float) pixel */\n\t\t\t//RGBE_DATA_RED = 0,\n\t\t\t//RGBE_DATA_GREEN = 1,\n\t\t\t//RGBE_DATA_BLUE = 2,\n\n\t\t\t/* number of floats per pixel, use 4 since stored in rgba image format */\n\t\t\t//RGBE_DATA_SIZE = 4,\n\n\t\t\t/* flags indicating which fields in an rgbe_header_info are valid */\n\t\t\tRGBE_VALID_PROGRAMTYPE = 1,\n\t\t\tRGBE_VALID_FORMAT = 2,\n\t\t\tRGBE_VALID_DIMENSIONS = 4,\n\n\t\t\tNEWLINE = '\\n',\n\n\t\t\tfgets = function ( buffer, lineLimit, consume ) {\n\n\t\t\t\tconst chunkSize = 128;\n\n\t\t\t\tlineLimit = ! lineLimit ? 1024 : lineLimit;\n\t\t\t\tlet p = buffer.pos,\n\t\t\t\t\ti = - 1, len = 0, s = '',\n\t\t\t\t\tchunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\twhile ( ( 0 \u003e ( i = chunk.indexOf( NEWLINE ) ) ) \u0026\u0026 ( len \u003c lineLimit ) \u0026\u0026 ( p \u003c buffer.byteLength ) ) {\n\n\t\t\t\t\ts += chunk; len += chunk.length;\n\t\t\t\t\tp += chunkSize;\n\t\t\t\t\tchunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( - 1 \u003c i ) {\n\n\t\t\t\t\t/*for (i=l-1; i\u003e=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode \u003e 0x7f \u0026\u0026 byteCode \u003c= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode \u003e 0x7ff \u0026\u0026 byteCode \u003c= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode \u003e= 0xDC00 \u0026\u0026 byteCode \u003c= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n\t\t\t\t\tif ( false !== consume ) buffer.pos += len + i + 1;\n\t\t\t\t\treturn s + chunk.slice( 0, i );\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/* minimal header reading.  modify if you want to parse more information */\n\t\t\tRGBE_ReadHeader = function ( buffer ) {\n\n\n\t\t\t\t// regexes to parse header info fields\n\t\t\t\tconst magic_token_re = /^#\\?(\\S+)/,\n\t\t\t\t\tgamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\texposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\tformat_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n\t\t\t\t\tdimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n\n\t\t\t\t\t// RGBE format header struct\n\t\t\t\t\theader = {\n\n\t\t\t\t\t\tvalid: 0, /* indicate which fields are valid */\n\n\t\t\t\t\t\tstring: '', /* the actual header string */\n\n\t\t\t\t\t\tcomments: '', /* comments found in header */\n\n\t\t\t\t\t\tprogramtype: 'RGBE', /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */\n\n\t\t\t\t\t\tformat: '', /* RGBE format, default 32-bit_rle_rgbe */\n\n\t\t\t\t\t\tgamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */\n\n\t\t\t\t\t\texposure: 1.0, /* a value of 1.0 in an image corresponds to \u003cexposure\u003e watts/steradian/m^2. defaults to 1.0 */\n\n\t\t\t\t\t\twidth: 0, height: 0 /* image dimensions, width/height */\n\n\t\t\t\t\t};\n\n\t\t\t\tlet line, match;\n\n\t\t\t\tif ( buffer.pos \u003e= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_read_error, 'no header found' );\n\n\t\t\t\t}\n\n\t\t\t\t/* if you want to require the magic token then uncomment the next line */\n\t\t\t\tif ( ! ( match = line.match( magic_token_re ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'bad initial token' );\n\n\t\t\t\t}\n\n\t\t\t\theader.valid |= RGBE_VALID_PROGRAMTYPE;\n\t\t\t\theader.programtype = match[ 1 ];\n\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tline = fgets( buffer );\n\t\t\t\t\tif ( false === line ) break;\n\t\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\t\tif ( '#' === line.charAt( 0 ) ) {\n\n\t\t\t\t\t\theader.comments += line + '\\n';\n\t\t\t\t\t\tcontinue; // comment line\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( gamma_re ) ) {\n\n\t\t\t\t\t\theader.gamma = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( exposure_re ) ) {\n\n\t\t\t\t\t\theader.exposure = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( format_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_FORMAT;\n\t\t\t\t\t\theader.format = match[ 1 ];//'32-bit_rle_rgbe';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( dimensions_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_DIMENSIONS;\n\t\t\t\t\t\theader.height = parseInt( match[ 1 ], 10 );\n\t\t\t\t\t\theader.width = parseInt( match[ 2 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( header.valid \u0026 RGBE_VALID_FORMAT ) \u0026\u0026 ( header.valid \u0026 RGBE_VALID_DIMENSIONS ) ) break;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid \u0026 RGBE_VALID_FORMAT ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing format specifier' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid \u0026 RGBE_VALID_DIMENSIONS ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing image size specifier' );\n\n\t\t\t\t}\n\n\t\t\t\treturn header;\n\n\t\t\t},\n\n\t\t\tRGBE_ReadPixels_RLE = function ( buffer, w, h ) {\n\n\t\t\t\tconst scanline_width = w;\n\n\t\t\t\tif (\n\t\t\t\t\t// run length encoding is not allowed so read flat\n\t\t\t\t\t( ( scanline_width \u003c 8 ) || ( scanline_width \u003e 0x7fff ) ) ||\n\t\t\t\t\t// this file is not run length encoded\n\t\t\t\t\t( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] \u0026 0x80 ) )\n\t\t\t\t) {\n\n\t\t\t\t\t// return the flat buffer\n\t\t\t\t\treturn new Uint8Array( buffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scanline_width !== ( ( buffer[ 2 ] \u003c\u003c 8 ) | buffer[ 3 ] ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'wrong scanline width' );\n\n\t\t\t\t}\n\n\t\t\t\tconst data_rgba = new Uint8Array( 4 * w * h );\n\n\t\t\t\tif ( ! data_rgba.length ) {\n\n\t\t\t\t\trgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );\n\n\t\t\t\t}\n\n\t\t\t\tlet offset = 0, pos = 0;\n\n\t\t\t\tconst ptr_end = 4 * scanline_width;\n\t\t\t\tconst rgbeStart = new Uint8Array( 4 );\n\t\t\t\tconst scanline_buffer = new Uint8Array( ptr_end );\n\t\t\t\tlet num_scanlines = h;\n\n\t\t\t\t// read in each successive scanline\n\t\t\t\twhile ( ( num_scanlines \u003e 0 ) \u0026\u0026 ( pos \u003c buffer.byteLength ) ) {\n\n\t\t\t\t\tif ( pos + 4 \u003e buffer.byteLength ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_read_error );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trgbeStart[ 0 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 1 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 2 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 3 ] = buffer[ pos ++ ];\n\n\t\t\t\t\tif ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] \u003c\u003c 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad rgbe scanline format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// read each of the four channels for the scanline into the buffer\n\t\t\t\t\t// first red, then green, then blue, then exponent\n\t\t\t\t\tlet ptr = 0, count;\n\n\t\t\t\t\twhile ( ( ptr \u003c ptr_end ) \u0026\u0026 ( pos \u003c buffer.byteLength ) ) {\n\n\t\t\t\t\t\tcount = buffer[ pos ++ ];\n\t\t\t\t\t\tconst isEncodedRun = count \u003e 128;\n\t\t\t\t\t\tif ( isEncodedRun ) count -= 128;\n\n\t\t\t\t\t\tif ( ( 0 === count ) || ( ptr + count \u003e ptr_end ) ) {\n\n\t\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad scanline data' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isEncodedRun ) {\n\n\t\t\t\t\t\t\t// a (encoded) run of the same value\n\t\t\t\t\t\t\tconst byteValue = buffer[ pos ++ ];\n\t\t\t\t\t\t\tfor ( let i = 0; i \u003c count; i ++ ) {\n\n\t\t\t\t\t\t\t\tscanline_buffer[ ptr ++ ] = byteValue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//ptr += count;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// a literal-run\n\t\t\t\t\t\t\tscanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );\n\t\t\t\t\t\t\tptr += count; pos += count;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// now convert data from buffer into rgba\n\t\t\t\t\t// first red, then green, then blue, then exponent (alpha)\n\t\t\t\t\tconst l = scanline_width; //scanline_buffer.byteLength;\n\t\t\t\t\tfor ( let i = 0; i \u003c l; i ++ ) {\n\n\t\t\t\t\t\tlet off = 0;\n\t\t\t\t\t\tdata_rgba[ offset ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 1 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 2 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 3 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnum_scanlines --;\n\n\t\t\t\t}\n\n\t\t\t\treturn data_rgba;\n\n\t\t\t};\n\n\t\tconst RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;\n\t\t\tdestArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;\n\t\t\tdestArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;\n\t\t\tdestArray[ destOffset + 3 ] = 1;\n\n\t\t};\n\n\t\tconst RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\t// clamping to 65504, the maximum representable value in float16\n\t\t\tdestArray[ destOffset + 0 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 0 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 1 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 1 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 2 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 2 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\t\t};\n\n\t\tconst byteArray = new Uint8Array( buffer );\n\t\tbyteArray.pos = 0;\n\t\tconst rgbe_header_info = RGBE_ReadHeader( byteArray );\n\n\t\tconst w = rgbe_header_info.width,\n\t\t\th = rgbe_header_info.height,\n\t\t\timage_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );\n\n\n\t\tlet data, type;\n\t\tlet numElements;\n\n\t\tswitch ( this.type ) {\n\n\t\t\tcase FloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst floatArray = new Float32Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j \u003c numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = floatArray;\n\t\t\t\ttype = FloatType;\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst halfArray = new Uint16Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j \u003c numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = halfArray;\n\t\t\t\ttype = HalfFloatType;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthrow new Error( 'THREE.RGBELoader: Unsupported type: ' + this.type );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\treturn {\n\t\t\twidth: w, height: h,\n\t\t\tdata: data,\n\t\t\theader: rgbe_header_info.string,\n\t\t\tgamma: rgbe_header_info.gamma,\n\t\t\texposure: rgbe_header_info.exposure,\n\t\t\ttype: type\n\t\t};\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase FloatType:\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\nexport { RGBELoader };\n"],"version":3}
