@@ -13,31 +13,23 @@ class RGBELoader extends DataTextureLoader {
1313 // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html
1414
1515 parse ( buffer ) {
16- const /* return codes for rgbe routines */
17- //RGBE_RETURN_SUCCESS = 0,
18- RGBE_RETURN_FAILURE = - 1 ,
19- /* default error routine. change this to change error handling */
16+ const /* default error routine. change this to change error handling */
2017 rgbe_read_error = 1 ,
2118 rgbe_write_error = 2 ,
2219 rgbe_format_error = 3 ,
2320 rgbe_memory_error = 4 ,
2421 rgbe_error = function ( rgbe_error_code , msg ) {
2522 switch ( rgbe_error_code ) {
2623 case rgbe_read_error :
27- console . error ( 'THREE.RGBELoader Read Error: ' + ( msg || '' ) )
28- break
24+ throw new Error ( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) )
2925 case rgbe_write_error :
30- console . error ( 'THREE.RGBELoader Write Error: ' + ( msg || '' ) )
31- break
26+ throw new Error ( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) )
3227 case rgbe_format_error :
33- console . error ( 'THREE.RGBELoader Bad File Format: ' + ( msg || '' ) )
34- break
28+ throw new Error ( 'THREE.RGBELoader: Bad File Format: ' + ( msg || '' ) )
3529 default :
3630 case rgbe_memory_error :
37- console . error ( 'THREE.RGBELoader: Error: ' + ( msg || '' ) )
31+ throw new Error ( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) )
3832 }
39-
40- return RGBE_RETURN_FAILURE
4133 } ,
4234 /* offsets to red, green, and blue components in a data (float) pixel */
4335 //RGBE_DATA_RED = 0,
@@ -113,12 +105,12 @@ class RGBELoader extends DataTextureLoader {
113105 let line , match
114106
115107 if ( buffer . pos >= buffer . byteLength || ! ( line = fgets ( buffer ) ) ) {
116- return rgbe_error ( rgbe_read_error , 'no header found' )
108+ rgbe_error ( rgbe_read_error , 'no header found' )
117109 }
118110
119111 /* if you want to require the magic token then uncomment the next line */
120112 if ( ! ( match = line . match ( magic_token_re ) ) ) {
121- return rgbe_error ( rgbe_format_error , 'bad initial token' )
113+ rgbe_error ( rgbe_format_error , 'bad initial token' )
122114 }
123115
124116 header . valid |= RGBE_VALID_PROGRAMTYPE
@@ -158,11 +150,11 @@ class RGBELoader extends DataTextureLoader {
158150 }
159151
160152 if ( ! ( header . valid & RGBE_VALID_FORMAT ) ) {
161- return rgbe_error ( rgbe_format_error , 'missing format specifier' )
153+ rgbe_error ( rgbe_format_error , 'missing format specifier' )
162154 }
163155
164156 if ( ! ( header . valid & RGBE_VALID_DIMENSIONS ) ) {
165- return rgbe_error ( rgbe_format_error , 'missing image size specifier' )
157+ rgbe_error ( rgbe_format_error , 'missing image size specifier' )
166158 }
167159
168160 return header
@@ -184,13 +176,13 @@ class RGBELoader extends DataTextureLoader {
184176 }
185177
186178 if ( scanline_width !== ( ( buffer [ 2 ] << 8 ) | buffer [ 3 ] ) ) {
187- return rgbe_error ( rgbe_format_error , 'wrong scanline width' )
179+ rgbe_error ( rgbe_format_error , 'wrong scanline width' )
188180 }
189181
190182 const data_rgba = new Uint8Array ( 4 * w * h )
191183
192184 if ( ! data_rgba . length ) {
193- return rgbe_error ( rgbe_memory_error , 'unable to allocate buffer space' )
185+ rgbe_error ( rgbe_memory_error , 'unable to allocate buffer space' )
194186 }
195187
196188 let offset = 0 ,
@@ -204,7 +196,7 @@ class RGBELoader extends DataTextureLoader {
204196 // read in each successive scanline
205197 while ( num_scanlines > 0 && pos < buffer . byteLength ) {
206198 if ( pos + 4 > buffer . byteLength ) {
207- return rgbe_error ( rgbe_read_error )
199+ rgbe_error ( rgbe_read_error )
208200 }
209201
210202 rgbeStart [ 0 ] = buffer [ pos ++ ]
@@ -213,7 +205,7 @@ class RGBELoader extends DataTextureLoader {
213205 rgbeStart [ 3 ] = buffer [ pos ++ ]
214206
215207 if ( 2 != rgbeStart [ 0 ] || 2 != rgbeStart [ 1 ] || ( ( rgbeStart [ 2 ] << 8 ) | rgbeStart [ 3 ] ) != scanline_width ) {
216- return rgbe_error ( rgbe_format_error , 'bad rgbe scanline format' )
208+ rgbe_error ( rgbe_format_error , 'bad rgbe scanline format' )
217209 }
218210
219211 // read each of the four channels for the scanline into the buffer
@@ -227,7 +219,7 @@ class RGBELoader extends DataTextureLoader {
227219 if ( isEncodedRun ) count -= 128
228220
229221 if ( 0 === count || ptr + count > ptr_end ) {
230- return rgbe_error ( rgbe_format_error , 'bad scanline data' )
222+ rgbe_error ( rgbe_format_error , 'bad scanline data' )
231223 }
232224
233225 if ( isEncodedRun ) {
@@ -291,58 +283,52 @@ class RGBELoader extends DataTextureLoader {
291283 byteArray . pos = 0
292284 const rgbe_header_info = RGBE_ReadHeader ( byteArray )
293285
294- if ( RGBE_RETURN_FAILURE !== rgbe_header_info ) {
295- const w = rgbe_header_info . width ,
296- h = rgbe_header_info . height ,
297- image_rgba_data = RGBE_ReadPixels_RLE ( byteArray . subarray ( byteArray . pos ) , w , h )
298-
299- if ( RGBE_RETURN_FAILURE !== image_rgba_data ) {
300- let data , type
301- let numElements
302-
303- switch ( this . type ) {
304- case FloatType :
305- numElements = image_rgba_data . length / 4
306- const floatArray = new Float32Array ( numElements * 4 )
286+ const w = rgbe_header_info . width ,
287+ h = rgbe_header_info . height ,
288+ image_rgba_data = RGBE_ReadPixels_RLE ( byteArray . subarray ( byteArray . pos ) , w , h )
307289
308- for ( let j = 0 ; j < numElements ; j ++ ) {
309- RGBEByteToRGBFloat ( image_rgba_data , j * 4 , floatArray , j * 4 )
310- }
290+ let data , type
291+ let numElements
311292
312- data = floatArray
313- type = FloatType
314- break
293+ switch ( this . type ) {
294+ case FloatType :
295+ numElements = image_rgba_data . length / 4
296+ const floatArray = new Float32Array ( numElements * 4 )
315297
316- case HalfFloatType :
317- numElements = image_rgba_data . length / 4
318- const halfArray = new Uint16Array ( numElements * 4 )
298+ for ( let j = 0 ; j < numElements ; j ++ ) {
299+ RGBEByteToRGBFloat ( image_rgba_data , j * 4 , floatArray , j * 4 )
300+ }
319301
320- for ( let j = 0 ; j < numElements ; j ++ ) {
321- RGBEByteToRGBHalf ( image_rgba_data , j * 4 , halfArray , j * 4 )
322- }
302+ data = floatArray
303+ type = FloatType
304+ break
323305
324- data = halfArray
325- type = HalfFloatType
326- break
306+ case HalfFloatType :
307+ numElements = image_rgba_data . length / 4
308+ const halfArray = new Uint16Array ( numElements * 4 )
327309
328- default :
329- console . error ( 'THREE.RGBELoader: unsupported type: ' , this . type )
330- break
310+ for ( let j = 0 ; j < numElements ; j ++ ) {
311+ RGBEByteToRGBHalf ( image_rgba_data , j * 4 , halfArray , j * 4 )
331312 }
332313
333- return {
334- width : w ,
335- height : h ,
336- data : data ,
337- header : rgbe_header_info . string ,
338- gamma : rgbe_header_info . gamma ,
339- exposure : rgbe_header_info . exposure ,
340- type : type ,
341- }
342- }
314+ data = halfArray
315+ type = HalfFloatType
316+ break
317+
318+ default :
319+ throw new Error ( 'THREE.RGBELoader: Unsupported type: ' + this . type )
320+ break
343321 }
344322
345- return null
323+ return {
324+ width : w ,
325+ height : h ,
326+ data : data ,
327+ header : rgbe_header_info . string ,
328+ gamma : rgbe_header_info . gamma ,
329+ exposure : rgbe_header_info . exposure ,
330+ type : type ,
331+ }
346332 }
347333
348334 setDataType ( value ) {
0 commit comments