@@ -13,31 +13,23 @@ class RGBELoader extends DataTextureLoader {
13
13
// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html
14
14
15
15
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 */
20
17
rgbe_read_error = 1 ,
21
18
rgbe_write_error = 2 ,
22
19
rgbe_format_error = 3 ,
23
20
rgbe_memory_error = 4 ,
24
21
rgbe_error = function ( rgbe_error_code , msg ) {
25
22
switch ( rgbe_error_code ) {
26
23
case rgbe_read_error :
27
- console . error ( 'THREE.RGBELoader Read Error: ' + ( msg || '' ) )
28
- break
24
+ throw new Error ( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) )
29
25
case rgbe_write_error :
30
- console . error ( 'THREE.RGBELoader Write Error: ' + ( msg || '' ) )
31
- break
26
+ throw new Error ( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) )
32
27
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 || '' ) )
35
29
default :
36
30
case rgbe_memory_error :
37
- console . error ( 'THREE.RGBELoader: Error: ' + ( msg || '' ) )
31
+ throw new Error ( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) )
38
32
}
39
-
40
- return RGBE_RETURN_FAILURE
41
33
} ,
42
34
/* offsets to red, green, and blue components in a data (float) pixel */
43
35
//RGBE_DATA_RED = 0,
@@ -113,12 +105,12 @@ class RGBELoader extends DataTextureLoader {
113
105
let line , match
114
106
115
107
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' )
117
109
}
118
110
119
111
/* if you want to require the magic token then uncomment the next line */
120
112
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' )
122
114
}
123
115
124
116
header . valid |= RGBE_VALID_PROGRAMTYPE
@@ -158,11 +150,11 @@ class RGBELoader extends DataTextureLoader {
158
150
}
159
151
160
152
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' )
162
154
}
163
155
164
156
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' )
166
158
}
167
159
168
160
return header
@@ -184,13 +176,13 @@ class RGBELoader extends DataTextureLoader {
184
176
}
185
177
186
178
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' )
188
180
}
189
181
190
182
const data_rgba = new Uint8Array ( 4 * w * h )
191
183
192
184
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' )
194
186
}
195
187
196
188
let offset = 0 ,
@@ -204,7 +196,7 @@ class RGBELoader extends DataTextureLoader {
204
196
// read in each successive scanline
205
197
while ( num_scanlines > 0 && pos < buffer . byteLength ) {
206
198
if ( pos + 4 > buffer . byteLength ) {
207
- return rgbe_error ( rgbe_read_error )
199
+ rgbe_error ( rgbe_read_error )
208
200
}
209
201
210
202
rgbeStart [ 0 ] = buffer [ pos ++ ]
@@ -213,7 +205,7 @@ class RGBELoader extends DataTextureLoader {
213
205
rgbeStart [ 3 ] = buffer [ pos ++ ]
214
206
215
207
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' )
217
209
}
218
210
219
211
// read each of the four channels for the scanline into the buffer
@@ -227,7 +219,7 @@ class RGBELoader extends DataTextureLoader {
227
219
if ( isEncodedRun ) count -= 128
228
220
229
221
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' )
231
223
}
232
224
233
225
if ( isEncodedRun ) {
@@ -291,58 +283,52 @@ class RGBELoader extends DataTextureLoader {
291
283
byteArray . pos = 0
292
284
const rgbe_header_info = RGBE_ReadHeader ( byteArray )
293
285
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 )
307
289
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
311
292
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 )
315
297
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
+ }
319
301
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
323
305
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 )
327
309
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 )
331
312
}
332
313
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
343
321
}
344
322
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
+ }
346
332
}
347
333
348
334
setDataType ( value ) {
0 commit comments