three-stdlib 2.29.7 → 2.29.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,22 +8,18 @@ class RGBELoader extends THREE.DataTextureLoader {
8
8
  }
9
9
  // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html
10
10
  parse(buffer) {
11
- const RGBE_RETURN_FAILURE = -1, rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) {
11
+ const rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) {
12
12
  switch (rgbe_error_code) {
13
13
  case rgbe_read_error:
14
- console.error("THREE.RGBELoader Read Error: " + (msg || ""));
15
- break;
14
+ throw new Error("THREE.RGBELoader: Read Error: " + (msg || ""));
16
15
  case rgbe_write_error:
17
- console.error("THREE.RGBELoader Write Error: " + (msg || ""));
18
- break;
16
+ throw new Error("THREE.RGBELoader: Write Error: " + (msg || ""));
19
17
  case rgbe_format_error:
20
- console.error("THREE.RGBELoader Bad File Format: " + (msg || ""));
21
- break;
18
+ throw new Error("THREE.RGBELoader: Bad File Format: " + (msg || ""));
22
19
  default:
23
20
  case rgbe_memory_error:
24
- console.error("THREE.RGBELoader: Error: " + (msg || ""));
21
+ throw new Error("THREE.RGBELoader: Memory Error: " + (msg || ""));
25
22
  }
26
- return RGBE_RETURN_FAILURE;
27
23
  }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function(buffer2, lineLimit, consume) {
28
24
  const chunkSize = 128;
29
25
  lineLimit = !lineLimit ? 1024 : lineLimit;
@@ -54,10 +50,10 @@ class RGBELoader extends THREE.DataTextureLoader {
54
50
  };
55
51
  let line, match;
56
52
  if (buffer2.pos >= buffer2.byteLength || !(line = fgets(buffer2))) {
57
- return rgbe_error(rgbe_read_error, "no header found");
53
+ rgbe_error(rgbe_read_error, "no header found");
58
54
  }
59
55
  if (!(match = line.match(magic_token_re))) {
60
- return rgbe_error(rgbe_format_error, "bad initial token");
56
+ rgbe_error(rgbe_format_error, "bad initial token");
61
57
  }
62
58
  header.valid |= RGBE_VALID_PROGRAMTYPE;
63
59
  header.programtype = match[1];
@@ -90,14 +86,14 @@ class RGBELoader extends THREE.DataTextureLoader {
90
86
  break;
91
87
  }
92
88
  if (!(header.valid & RGBE_VALID_FORMAT)) {
93
- return rgbe_error(rgbe_format_error, "missing format specifier");
89
+ rgbe_error(rgbe_format_error, "missing format specifier");
94
90
  }
95
91
  if (!(header.valid & RGBE_VALID_DIMENSIONS)) {
96
- return rgbe_error(rgbe_format_error, "missing image size specifier");
92
+ rgbe_error(rgbe_format_error, "missing image size specifier");
97
93
  }
98
94
  return header;
99
- }, RGBE_ReadPixels_RLE = function(buffer2, w, h) {
100
- const scanline_width = w;
95
+ }, RGBE_ReadPixels_RLE = function(buffer2, w2, h2) {
96
+ const scanline_width = w2;
101
97
  if (
102
98
  // run length encoding is not allowed so read flat
103
99
  scanline_width < 8 || scanline_width > 32767 || // this file is not run length encoded
@@ -106,27 +102,27 @@ class RGBELoader extends THREE.DataTextureLoader {
106
102
  return new Uint8Array(buffer2);
107
103
  }
108
104
  if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) {
109
- return rgbe_error(rgbe_format_error, "wrong scanline width");
105
+ rgbe_error(rgbe_format_error, "wrong scanline width");
110
106
  }
111
- const data_rgba = new Uint8Array(4 * w * h);
107
+ const data_rgba = new Uint8Array(4 * w2 * h2);
112
108
  if (!data_rgba.length) {
113
- return rgbe_error(rgbe_memory_error, "unable to allocate buffer space");
109
+ rgbe_error(rgbe_memory_error, "unable to allocate buffer space");
114
110
  }
115
111
  let offset = 0, pos = 0;
116
112
  const ptr_end = 4 * scanline_width;
117
113
  const rgbeStart = new Uint8Array(4);
118
114
  const scanline_buffer = new Uint8Array(ptr_end);
119
- let num_scanlines = h;
115
+ let num_scanlines = h2;
120
116
  while (num_scanlines > 0 && pos < buffer2.byteLength) {
121
117
  if (pos + 4 > buffer2.byteLength) {
122
- return rgbe_error(rgbe_read_error);
118
+ rgbe_error(rgbe_read_error);
123
119
  }
124
120
  rgbeStart[0] = buffer2[pos++];
125
121
  rgbeStart[1] = buffer2[pos++];
126
122
  rgbeStart[2] = buffer2[pos++];
127
123
  rgbeStart[3] = buffer2[pos++];
128
124
  if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) {
129
- return rgbe_error(rgbe_format_error, "bad rgbe scanline format");
125
+ rgbe_error(rgbe_format_error, "bad rgbe scanline format");
130
126
  }
131
127
  let ptr = 0, count;
132
128
  while (ptr < ptr_end && pos < buffer2.byteLength) {
@@ -135,7 +131,7 @@ class RGBELoader extends THREE.DataTextureLoader {
135
131
  if (isEncodedRun)
136
132
  count -= 128;
137
133
  if (0 === count || ptr + count > ptr_end) {
138
- return rgbe_error(rgbe_format_error, "bad scanline data");
134
+ rgbe_error(rgbe_format_error, "bad scanline data");
139
135
  }
140
136
  if (isEncodedRun) {
141
137
  const byteValue = buffer2[pos++];
@@ -183,46 +179,40 @@ class RGBELoader extends THREE.DataTextureLoader {
183
179
  const byteArray = new Uint8Array(buffer);
184
180
  byteArray.pos = 0;
185
181
  const rgbe_header_info = RGBE_ReadHeader(byteArray);
186
- if (RGBE_RETURN_FAILURE !== rgbe_header_info) {
187
- const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);
188
- if (RGBE_RETURN_FAILURE !== image_rgba_data) {
189
- let data, type;
190
- let numElements;
191
- switch (this.type) {
192
- case THREE.FloatType:
193
- numElements = image_rgba_data.length / 4;
194
- const floatArray = new Float32Array(numElements * 4);
195
- for (let j = 0; j < numElements; j++) {
196
- RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);
197
- }
198
- data = floatArray;
199
- type = THREE.FloatType;
200
- break;
201
- case THREE.HalfFloatType:
202
- numElements = image_rgba_data.length / 4;
203
- const halfArray = new Uint16Array(numElements * 4);
204
- for (let j = 0; j < numElements; j++) {
205
- RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);
206
- }
207
- data = halfArray;
208
- type = THREE.HalfFloatType;
209
- break;
210
- default:
211
- console.error("THREE.RGBELoader: unsupported type: ", this.type);
212
- break;
182
+ const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);
183
+ let data, type;
184
+ let numElements;
185
+ switch (this.type) {
186
+ case THREE.FloatType:
187
+ numElements = image_rgba_data.length / 4;
188
+ const floatArray = new Float32Array(numElements * 4);
189
+ for (let j = 0; j < numElements; j++) {
190
+ RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);
213
191
  }
214
- return {
215
- width: w,
216
- height: h,
217
- data,
218
- header: rgbe_header_info.string,
219
- gamma: rgbe_header_info.gamma,
220
- exposure: rgbe_header_info.exposure,
221
- type
222
- };
223
- }
192
+ data = floatArray;
193
+ type = THREE.FloatType;
194
+ break;
195
+ case THREE.HalfFloatType:
196
+ numElements = image_rgba_data.length / 4;
197
+ const halfArray = new Uint16Array(numElements * 4);
198
+ for (let j = 0; j < numElements; j++) {
199
+ RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);
200
+ }
201
+ data = halfArray;
202
+ type = THREE.HalfFloatType;
203
+ break;
204
+ default:
205
+ throw new Error("THREE.RGBELoader: Unsupported type: " + this.type);
224
206
  }
225
- return null;
207
+ return {
208
+ width: w,
209
+ height: h,
210
+ data,
211
+ header: rgbe_header_info.string,
212
+ gamma: rgbe_header_info.gamma,
213
+ exposure: rgbe_header_info.exposure,
214
+ type
215
+ };
226
216
  }
227
217
  setDataType(value) {
228
218
  this.type = value;
@@ -1 +1 @@
1
- {"version":3,"file":"RGBELoader.cjs","sources":["../../src/loaders/RGBELoader.js"],"sourcesContent":["import { DataTextureLoader, DataUtils, FloatType, HalfFloatType, LinearFilter } 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 constructor(manager) {\n super(manager)\n\n this.type = HalfFloatType\n }\n\n // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n parse(buffer) {\n const /* return codes for rgbe routines */\n //RGBE_RETURN_SUCCESS = 0,\n RGBE_RETURN_FAILURE = -1,\n /* default error routine. change this to change error handling */\n rgbe_read_error = 1,\n rgbe_write_error = 2,\n rgbe_format_error = 3,\n rgbe_memory_error = 4,\n rgbe_error = function (rgbe_error_code, msg) {\n switch (rgbe_error_code) {\n case rgbe_read_error:\n console.error('THREE.RGBELoader Read Error: ' + (msg || ''))\n break\n case rgbe_write_error:\n console.error('THREE.RGBELoader Write Error: ' + (msg || ''))\n break\n case rgbe_format_error:\n console.error('THREE.RGBELoader Bad File Format: ' + (msg || ''))\n break\n default:\n case rgbe_memory_error:\n console.error('THREE.RGBELoader: Error: ' + (msg || ''))\n }\n\n return RGBE_RETURN_FAILURE\n },\n /* offsets to red, green, and blue components in a data (float) pixel */\n //RGBE_DATA_RED = 0,\n //RGBE_DATA_GREEN = 1,\n //RGBE_DATA_BLUE = 2,\n\n /* number of floats per pixel, use 4 since stored in rgba image format */\n //RGBE_DATA_SIZE = 4,\n\n /* flags indicating which fields in an rgbe_header_info are valid */\n RGBE_VALID_PROGRAMTYPE = 1,\n RGBE_VALID_FORMAT = 2,\n RGBE_VALID_DIMENSIONS = 4,\n NEWLINE = '\\n',\n fgets = function (buffer, lineLimit, consume) {\n const chunkSize = 128\n\n lineLimit = !lineLimit ? 1024 : lineLimit\n let p = buffer.pos,\n i = -1,\n len = 0,\n s = '',\n chunk = String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)))\n\n while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer.byteLength) {\n s += chunk\n len += chunk.length\n p += chunkSize\n chunk += String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)))\n }\n\n if (-1 < i) {\n /*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n if (false !== consume) buffer.pos += len + i + 1\n return s + chunk.slice(0, i)\n }\n\n return false\n },\n /* minimal header reading. modify if you want to parse more information */\n RGBE_ReadHeader = function (buffer) {\n // regexes to parse header info fields\n const magic_token_re = /^#\\?(\\S+)/,\n gamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n exposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n format_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n dimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n // RGBE format header struct\n header = {\n valid: 0 /* indicate which fields are valid */,\n\n string: '' /* the actual header string */,\n\n comments: '' /* comments found in header */,\n\n programtype: 'RGBE' /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */,\n\n format: '' /* RGBE format, default 32-bit_rle_rgbe */,\n\n gamma: 1.0 /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */,\n\n exposure: 1.0 /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */,\n\n width: 0,\n height: 0 /* image dimensions, width/height */,\n }\n\n let line, match\n\n if (buffer.pos >= buffer.byteLength || !(line = fgets(buffer))) {\n return rgbe_error(rgbe_read_error, 'no header found')\n }\n\n /* if you want to require the magic token then uncomment the next line */\n if (!(match = line.match(magic_token_re))) {\n return rgbe_error(rgbe_format_error, 'bad initial token')\n }\n\n header.valid |= RGBE_VALID_PROGRAMTYPE\n header.programtype = match[1]\n header.string += line + '\\n'\n\n while (true) {\n line = fgets(buffer)\n if (false === line) break\n header.string += line + '\\n'\n\n if ('#' === line.charAt(0)) {\n header.comments += line + '\\n'\n continue // comment line\n }\n\n if ((match = line.match(gamma_re))) {\n header.gamma = parseFloat(match[1])\n }\n\n if ((match = line.match(exposure_re))) {\n header.exposure = parseFloat(match[1])\n }\n\n if ((match = line.match(format_re))) {\n header.valid |= RGBE_VALID_FORMAT\n header.format = match[1] //'32-bit_rle_rgbe';\n }\n\n if ((match = line.match(dimensions_re))) {\n header.valid |= RGBE_VALID_DIMENSIONS\n header.height = parseInt(match[1], 10)\n header.width = parseInt(match[2], 10)\n }\n\n if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS) break\n }\n\n if (!(header.valid & RGBE_VALID_FORMAT)) {\n return rgbe_error(rgbe_format_error, 'missing format specifier')\n }\n\n if (!(header.valid & RGBE_VALID_DIMENSIONS)) {\n return rgbe_error(rgbe_format_error, 'missing image size specifier')\n }\n\n return header\n },\n RGBE_ReadPixels_RLE = function (buffer, w, h) {\n const scanline_width = w\n\n if (\n // run length encoding is not allowed so read flat\n scanline_width < 8 ||\n scanline_width > 0x7fff ||\n // this file is not run length encoded\n 2 !== buffer[0] ||\n 2 !== buffer[1] ||\n buffer[2] & 0x80\n ) {\n // return the flat buffer\n return new Uint8Array(buffer)\n }\n\n if (scanline_width !== ((buffer[2] << 8) | buffer[3])) {\n return rgbe_error(rgbe_format_error, 'wrong scanline width')\n }\n\n const data_rgba = new Uint8Array(4 * w * h)\n\n if (!data_rgba.length) {\n return rgbe_error(rgbe_memory_error, 'unable to allocate buffer space')\n }\n\n let offset = 0,\n pos = 0\n\n const ptr_end = 4 * scanline_width\n const rgbeStart = new Uint8Array(4)\n const scanline_buffer = new Uint8Array(ptr_end)\n let num_scanlines = h\n\n // read in each successive scanline\n while (num_scanlines > 0 && pos < buffer.byteLength) {\n if (pos + 4 > buffer.byteLength) {\n return rgbe_error(rgbe_read_error)\n }\n\n rgbeStart[0] = buffer[pos++]\n rgbeStart[1] = buffer[pos++]\n rgbeStart[2] = buffer[pos++]\n rgbeStart[3] = buffer[pos++]\n\n if (2 != rgbeStart[0] || 2 != rgbeStart[1] || ((rgbeStart[2] << 8) | rgbeStart[3]) != scanline_width) {\n return rgbe_error(rgbe_format_error, 'bad rgbe scanline format')\n }\n\n // read each of the four channels for the scanline into the buffer\n // first red, then green, then blue, then exponent\n let ptr = 0,\n count\n\n while (ptr < ptr_end && pos < buffer.byteLength) {\n count = buffer[pos++]\n const isEncodedRun = count > 128\n if (isEncodedRun) count -= 128\n\n if (0 === count || ptr + count > ptr_end) {\n return rgbe_error(rgbe_format_error, 'bad scanline data')\n }\n\n if (isEncodedRun) {\n // a (encoded) run of the same value\n const byteValue = buffer[pos++]\n for (let i = 0; i < count; i++) {\n scanline_buffer[ptr++] = byteValue\n }\n //ptr += count;\n } else {\n // a literal-run\n scanline_buffer.set(buffer.subarray(pos, pos + count), ptr)\n ptr += count\n pos += count\n }\n }\n\n // now convert data from buffer into rgba\n // first red, then green, then blue, then exponent (alpha)\n const l = scanline_width //scanline_buffer.byteLength;\n for (let i = 0; i < l; i++) {\n let off = 0\n data_rgba[offset] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 1] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 2] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 3] = scanline_buffer[i + off]\n offset += 4\n }\n\n num_scanlines--\n }\n\n return data_rgba\n }\n\n const RGBEByteToRGBFloat = function (sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3]\n const scale = Math.pow(2.0, e - 128.0) / 255.0\n\n destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale\n destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale\n destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale\n destArray[destOffset + 3] = 1\n }\n\n const RGBEByteToRGBHalf = function (sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3]\n const scale = Math.pow(2.0, e - 128.0) / 255.0\n\n // clamping to 65504, the maximum representable value in float16\n destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504))\n destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504))\n destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504))\n destArray[destOffset + 3] = DataUtils.toHalfFloat(1)\n }\n\n const byteArray = new Uint8Array(buffer)\n byteArray.pos = 0\n const rgbe_header_info = RGBE_ReadHeader(byteArray)\n\n if (RGBE_RETURN_FAILURE !== rgbe_header_info) {\n const w = rgbe_header_info.width,\n h = rgbe_header_info.height,\n image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h)\n\n if (RGBE_RETURN_FAILURE !== image_rgba_data) {\n let data, type\n let numElements\n\n switch (this.type) {\n case FloatType:\n numElements = image_rgba_data.length / 4\n const floatArray = new Float32Array(numElements * 4)\n\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4)\n }\n\n data = floatArray\n type = FloatType\n break\n\n case HalfFloatType:\n numElements = image_rgba_data.length / 4\n const halfArray = new Uint16Array(numElements * 4)\n\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4)\n }\n\n data = halfArray\n type = HalfFloatType\n break\n\n default:\n console.error('THREE.RGBELoader: unsupported type: ', this.type)\n break\n }\n\n return {\n width: w,\n height: h,\n data: data,\n header: rgbe_header_info.string,\n gamma: rgbe_header_info.gamma,\n exposure: rgbe_header_info.exposure,\n type: type,\n }\n }\n }\n\n return null\n }\n\n setDataType(value) {\n this.type = value\n return this\n }\n\n load(url, onLoad, onProgress, onError) {\n function onLoadCallback(texture, texData) {\n switch (texture.type) {\n case FloatType:\n case HalfFloatType:\n if ('colorSpace' in texture) texture.colorSpace = 'srgb-linear'\n else texture.encoding = 3000 // LinearEncoding\n texture.minFilter = LinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.flipY = true\n\n break\n }\n\n if (onLoad) onLoad(texture, texData)\n }\n\n return super.load(url, onLoadCallback, onProgress, onError)\n }\n}\n\nexport { RGBELoader }\n"],"names":["DataTextureLoader","HalfFloatType","buffer","DataUtils","FloatType","LinearFilter"],"mappings":"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"}
1
+ {"version":3,"file":"RGBELoader.cjs","sources":["../../src/loaders/RGBELoader.js"],"sourcesContent":["import { DataTextureLoader, DataUtils, FloatType, HalfFloatType, LinearFilter } 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 constructor(manager) {\n super(manager)\n\n this.type = HalfFloatType\n }\n\n // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n parse(buffer) {\n const /* default error routine. change this to change error handling */\n rgbe_read_error = 1,\n rgbe_write_error = 2,\n rgbe_format_error = 3,\n rgbe_memory_error = 4,\n rgbe_error = function (rgbe_error_code, msg) {\n switch (rgbe_error_code) {\n case rgbe_read_error:\n throw new Error('THREE.RGBELoader: Read Error: ' + (msg || ''))\n case rgbe_write_error:\n throw new Error('THREE.RGBELoader: Write Error: ' + (msg || ''))\n case rgbe_format_error:\n throw new Error('THREE.RGBELoader: Bad File Format: ' + (msg || ''))\n default:\n case rgbe_memory_error:\n throw new Error('THREE.RGBELoader: Memory Error: ' + (msg || ''))\n }\n },\n /* offsets to red, green, and blue components in a data (float) pixel */\n //RGBE_DATA_RED = 0,\n //RGBE_DATA_GREEN = 1,\n //RGBE_DATA_BLUE = 2,\n\n /* number of floats per pixel, use 4 since stored in rgba image format */\n //RGBE_DATA_SIZE = 4,\n\n /* flags indicating which fields in an rgbe_header_info are valid */\n RGBE_VALID_PROGRAMTYPE = 1,\n RGBE_VALID_FORMAT = 2,\n RGBE_VALID_DIMENSIONS = 4,\n NEWLINE = '\\n',\n fgets = function (buffer, lineLimit, consume) {\n const chunkSize = 128\n\n lineLimit = !lineLimit ? 1024 : lineLimit\n let p = buffer.pos,\n i = -1,\n len = 0,\n s = '',\n chunk = String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)))\n\n while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer.byteLength) {\n s += chunk\n len += chunk.length\n p += chunkSize\n chunk += String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)))\n }\n\n if (-1 < i) {\n /*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n if (false !== consume) buffer.pos += len + i + 1\n return s + chunk.slice(0, i)\n }\n\n return false\n },\n /* minimal header reading. modify if you want to parse more information */\n RGBE_ReadHeader = function (buffer) {\n // regexes to parse header info fields\n const magic_token_re = /^#\\?(\\S+)/,\n gamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n exposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n format_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n dimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n // RGBE format header struct\n header = {\n valid: 0 /* indicate which fields are valid */,\n\n string: '' /* the actual header string */,\n\n comments: '' /* comments found in header */,\n\n programtype: 'RGBE' /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */,\n\n format: '' /* RGBE format, default 32-bit_rle_rgbe */,\n\n gamma: 1.0 /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */,\n\n exposure: 1.0 /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */,\n\n width: 0,\n height: 0 /* image dimensions, width/height */,\n }\n\n let line, match\n\n if (buffer.pos >= buffer.byteLength || !(line = fgets(buffer))) {\n rgbe_error(rgbe_read_error, 'no header found')\n }\n\n /* if you want to require the magic token then uncomment the next line */\n if (!(match = line.match(magic_token_re))) {\n rgbe_error(rgbe_format_error, 'bad initial token')\n }\n\n header.valid |= RGBE_VALID_PROGRAMTYPE\n header.programtype = match[1]\n header.string += line + '\\n'\n\n while (true) {\n line = fgets(buffer)\n if (false === line) break\n header.string += line + '\\n'\n\n if ('#' === line.charAt(0)) {\n header.comments += line + '\\n'\n continue // comment line\n }\n\n if ((match = line.match(gamma_re))) {\n header.gamma = parseFloat(match[1])\n }\n\n if ((match = line.match(exposure_re))) {\n header.exposure = parseFloat(match[1])\n }\n\n if ((match = line.match(format_re))) {\n header.valid |= RGBE_VALID_FORMAT\n header.format = match[1] //'32-bit_rle_rgbe';\n }\n\n if ((match = line.match(dimensions_re))) {\n header.valid |= RGBE_VALID_DIMENSIONS\n header.height = parseInt(match[1], 10)\n header.width = parseInt(match[2], 10)\n }\n\n if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS) break\n }\n\n if (!(header.valid & RGBE_VALID_FORMAT)) {\n rgbe_error(rgbe_format_error, 'missing format specifier')\n }\n\n if (!(header.valid & RGBE_VALID_DIMENSIONS)) {\n rgbe_error(rgbe_format_error, 'missing image size specifier')\n }\n\n return header\n },\n RGBE_ReadPixels_RLE = function (buffer, w, h) {\n const scanline_width = w\n\n if (\n // run length encoding is not allowed so read flat\n scanline_width < 8 ||\n scanline_width > 0x7fff ||\n // this file is not run length encoded\n 2 !== buffer[0] ||\n 2 !== buffer[1] ||\n buffer[2] & 0x80\n ) {\n // return the flat buffer\n return new Uint8Array(buffer)\n }\n\n if (scanline_width !== ((buffer[2] << 8) | buffer[3])) {\n rgbe_error(rgbe_format_error, 'wrong scanline width')\n }\n\n const data_rgba = new Uint8Array(4 * w * h)\n\n if (!data_rgba.length) {\n rgbe_error(rgbe_memory_error, 'unable to allocate buffer space')\n }\n\n let offset = 0,\n pos = 0\n\n const ptr_end = 4 * scanline_width\n const rgbeStart = new Uint8Array(4)\n const scanline_buffer = new Uint8Array(ptr_end)\n let num_scanlines = h\n\n // read in each successive scanline\n while (num_scanlines > 0 && pos < buffer.byteLength) {\n if (pos + 4 > buffer.byteLength) {\n rgbe_error(rgbe_read_error)\n }\n\n rgbeStart[0] = buffer[pos++]\n rgbeStart[1] = buffer[pos++]\n rgbeStart[2] = buffer[pos++]\n rgbeStart[3] = buffer[pos++]\n\n if (2 != rgbeStart[0] || 2 != rgbeStart[1] || ((rgbeStart[2] << 8) | rgbeStart[3]) != scanline_width) {\n rgbe_error(rgbe_format_error, 'bad rgbe scanline format')\n }\n\n // read each of the four channels for the scanline into the buffer\n // first red, then green, then blue, then exponent\n let ptr = 0,\n count\n\n while (ptr < ptr_end && pos < buffer.byteLength) {\n count = buffer[pos++]\n const isEncodedRun = count > 128\n if (isEncodedRun) count -= 128\n\n if (0 === count || ptr + count > ptr_end) {\n rgbe_error(rgbe_format_error, 'bad scanline data')\n }\n\n if (isEncodedRun) {\n // a (encoded) run of the same value\n const byteValue = buffer[pos++]\n for (let i = 0; i < count; i++) {\n scanline_buffer[ptr++] = byteValue\n }\n //ptr += count;\n } else {\n // a literal-run\n scanline_buffer.set(buffer.subarray(pos, pos + count), ptr)\n ptr += count\n pos += count\n }\n }\n\n // now convert data from buffer into rgba\n // first red, then green, then blue, then exponent (alpha)\n const l = scanline_width //scanline_buffer.byteLength;\n for (let i = 0; i < l; i++) {\n let off = 0\n data_rgba[offset] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 1] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 2] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 3] = scanline_buffer[i + off]\n offset += 4\n }\n\n num_scanlines--\n }\n\n return data_rgba\n }\n\n const RGBEByteToRGBFloat = function (sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3]\n const scale = Math.pow(2.0, e - 128.0) / 255.0\n\n destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale\n destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale\n destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale\n destArray[destOffset + 3] = 1\n }\n\n const RGBEByteToRGBHalf = function (sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3]\n const scale = Math.pow(2.0, e - 128.0) / 255.0\n\n // clamping to 65504, the maximum representable value in float16\n destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504))\n destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504))\n destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504))\n destArray[destOffset + 3] = DataUtils.toHalfFloat(1)\n }\n\n const byteArray = new Uint8Array(buffer)\n byteArray.pos = 0\n const rgbe_header_info = RGBE_ReadHeader(byteArray)\n\n const w = rgbe_header_info.width,\n h = rgbe_header_info.height,\n image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h)\n\n let data, type\n let numElements\n\n switch (this.type) {\n case FloatType:\n numElements = image_rgba_data.length / 4\n const floatArray = new Float32Array(numElements * 4)\n\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4)\n }\n\n data = floatArray\n type = FloatType\n break\n\n case HalfFloatType:\n numElements = image_rgba_data.length / 4\n const halfArray = new Uint16Array(numElements * 4)\n\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4)\n }\n\n data = halfArray\n type = HalfFloatType\n break\n\n default:\n throw new Error('THREE.RGBELoader: Unsupported type: ' + this.type)\n break\n }\n\n return {\n width: w,\n height: h,\n data: data,\n header: rgbe_header_info.string,\n gamma: rgbe_header_info.gamma,\n exposure: rgbe_header_info.exposure,\n type: type,\n }\n }\n\n setDataType(value) {\n this.type = value\n return this\n }\n\n load(url, onLoad, onProgress, onError) {\n function onLoadCallback(texture, texData) {\n switch (texture.type) {\n case FloatType:\n case HalfFloatType:\n if ('colorSpace' in texture) texture.colorSpace = 'srgb-linear'\n else texture.encoding = 3000 // LinearEncoding\n texture.minFilter = LinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.flipY = true\n\n break\n }\n\n if (onLoad) onLoad(texture, texData)\n }\n\n return super.load(url, onLoadCallback, onProgress, onError)\n }\n}\n\nexport { RGBELoader }\n"],"names":["DataTextureLoader","HalfFloatType","buffer","w","h","DataUtils","FloatType","LinearFilter"],"mappings":"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"}
@@ -6,22 +6,18 @@ class RGBELoader extends DataTextureLoader {
6
6
  }
7
7
  // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html
8
8
  parse(buffer) {
9
- const RGBE_RETURN_FAILURE = -1, rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) {
9
+ const rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) {
10
10
  switch (rgbe_error_code) {
11
11
  case rgbe_read_error:
12
- console.error("THREE.RGBELoader Read Error: " + (msg || ""));
13
- break;
12
+ throw new Error("THREE.RGBELoader: Read Error: " + (msg || ""));
14
13
  case rgbe_write_error:
15
- console.error("THREE.RGBELoader Write Error: " + (msg || ""));
16
- break;
14
+ throw new Error("THREE.RGBELoader: Write Error: " + (msg || ""));
17
15
  case rgbe_format_error:
18
- console.error("THREE.RGBELoader Bad File Format: " + (msg || ""));
19
- break;
16
+ throw new Error("THREE.RGBELoader: Bad File Format: " + (msg || ""));
20
17
  default:
21
18
  case rgbe_memory_error:
22
- console.error("THREE.RGBELoader: Error: " + (msg || ""));
19
+ throw new Error("THREE.RGBELoader: Memory Error: " + (msg || ""));
23
20
  }
24
- return RGBE_RETURN_FAILURE;
25
21
  }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function(buffer2, lineLimit, consume) {
26
22
  const chunkSize = 128;
27
23
  lineLimit = !lineLimit ? 1024 : lineLimit;
@@ -52,10 +48,10 @@ class RGBELoader extends DataTextureLoader {
52
48
  };
53
49
  let line, match;
54
50
  if (buffer2.pos >= buffer2.byteLength || !(line = fgets(buffer2))) {
55
- return rgbe_error(rgbe_read_error, "no header found");
51
+ rgbe_error(rgbe_read_error, "no header found");
56
52
  }
57
53
  if (!(match = line.match(magic_token_re))) {
58
- return rgbe_error(rgbe_format_error, "bad initial token");
54
+ rgbe_error(rgbe_format_error, "bad initial token");
59
55
  }
60
56
  header.valid |= RGBE_VALID_PROGRAMTYPE;
61
57
  header.programtype = match[1];
@@ -88,14 +84,14 @@ class RGBELoader extends DataTextureLoader {
88
84
  break;
89
85
  }
90
86
  if (!(header.valid & RGBE_VALID_FORMAT)) {
91
- return rgbe_error(rgbe_format_error, "missing format specifier");
87
+ rgbe_error(rgbe_format_error, "missing format specifier");
92
88
  }
93
89
  if (!(header.valid & RGBE_VALID_DIMENSIONS)) {
94
- return rgbe_error(rgbe_format_error, "missing image size specifier");
90
+ rgbe_error(rgbe_format_error, "missing image size specifier");
95
91
  }
96
92
  return header;
97
- }, RGBE_ReadPixels_RLE = function(buffer2, w, h) {
98
- const scanline_width = w;
93
+ }, RGBE_ReadPixels_RLE = function(buffer2, w2, h2) {
94
+ const scanline_width = w2;
99
95
  if (
100
96
  // run length encoding is not allowed so read flat
101
97
  scanline_width < 8 || scanline_width > 32767 || // this file is not run length encoded
@@ -104,27 +100,27 @@ class RGBELoader extends DataTextureLoader {
104
100
  return new Uint8Array(buffer2);
105
101
  }
106
102
  if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) {
107
- return rgbe_error(rgbe_format_error, "wrong scanline width");
103
+ rgbe_error(rgbe_format_error, "wrong scanline width");
108
104
  }
109
- const data_rgba = new Uint8Array(4 * w * h);
105
+ const data_rgba = new Uint8Array(4 * w2 * h2);
110
106
  if (!data_rgba.length) {
111
- return rgbe_error(rgbe_memory_error, "unable to allocate buffer space");
107
+ rgbe_error(rgbe_memory_error, "unable to allocate buffer space");
112
108
  }
113
109
  let offset = 0, pos = 0;
114
110
  const ptr_end = 4 * scanline_width;
115
111
  const rgbeStart = new Uint8Array(4);
116
112
  const scanline_buffer = new Uint8Array(ptr_end);
117
- let num_scanlines = h;
113
+ let num_scanlines = h2;
118
114
  while (num_scanlines > 0 && pos < buffer2.byteLength) {
119
115
  if (pos + 4 > buffer2.byteLength) {
120
- return rgbe_error(rgbe_read_error);
116
+ rgbe_error(rgbe_read_error);
121
117
  }
122
118
  rgbeStart[0] = buffer2[pos++];
123
119
  rgbeStart[1] = buffer2[pos++];
124
120
  rgbeStart[2] = buffer2[pos++];
125
121
  rgbeStart[3] = buffer2[pos++];
126
122
  if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) {
127
- return rgbe_error(rgbe_format_error, "bad rgbe scanline format");
123
+ rgbe_error(rgbe_format_error, "bad rgbe scanline format");
128
124
  }
129
125
  let ptr = 0, count;
130
126
  while (ptr < ptr_end && pos < buffer2.byteLength) {
@@ -133,7 +129,7 @@ class RGBELoader extends DataTextureLoader {
133
129
  if (isEncodedRun)
134
130
  count -= 128;
135
131
  if (0 === count || ptr + count > ptr_end) {
136
- return rgbe_error(rgbe_format_error, "bad scanline data");
132
+ rgbe_error(rgbe_format_error, "bad scanline data");
137
133
  }
138
134
  if (isEncodedRun) {
139
135
  const byteValue = buffer2[pos++];
@@ -181,46 +177,40 @@ class RGBELoader extends DataTextureLoader {
181
177
  const byteArray = new Uint8Array(buffer);
182
178
  byteArray.pos = 0;
183
179
  const rgbe_header_info = RGBE_ReadHeader(byteArray);
184
- if (RGBE_RETURN_FAILURE !== rgbe_header_info) {
185
- const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);
186
- if (RGBE_RETURN_FAILURE !== image_rgba_data) {
187
- let data, type;
188
- let numElements;
189
- switch (this.type) {
190
- case FloatType:
191
- numElements = image_rgba_data.length / 4;
192
- const floatArray = new Float32Array(numElements * 4);
193
- for (let j = 0; j < numElements; j++) {
194
- RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);
195
- }
196
- data = floatArray;
197
- type = FloatType;
198
- break;
199
- case HalfFloatType:
200
- numElements = image_rgba_data.length / 4;
201
- const halfArray = new Uint16Array(numElements * 4);
202
- for (let j = 0; j < numElements; j++) {
203
- RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);
204
- }
205
- data = halfArray;
206
- type = HalfFloatType;
207
- break;
208
- default:
209
- console.error("THREE.RGBELoader: unsupported type: ", this.type);
210
- break;
180
+ const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);
181
+ let data, type;
182
+ let numElements;
183
+ switch (this.type) {
184
+ case FloatType:
185
+ numElements = image_rgba_data.length / 4;
186
+ const floatArray = new Float32Array(numElements * 4);
187
+ for (let j = 0; j < numElements; j++) {
188
+ RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);
211
189
  }
212
- return {
213
- width: w,
214
- height: h,
215
- data,
216
- header: rgbe_header_info.string,
217
- gamma: rgbe_header_info.gamma,
218
- exposure: rgbe_header_info.exposure,
219
- type
220
- };
221
- }
190
+ data = floatArray;
191
+ type = FloatType;
192
+ break;
193
+ case HalfFloatType:
194
+ numElements = image_rgba_data.length / 4;
195
+ const halfArray = new Uint16Array(numElements * 4);
196
+ for (let j = 0; j < numElements; j++) {
197
+ RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);
198
+ }
199
+ data = halfArray;
200
+ type = HalfFloatType;
201
+ break;
202
+ default:
203
+ throw new Error("THREE.RGBELoader: Unsupported type: " + this.type);
222
204
  }
223
- return null;
205
+ return {
206
+ width: w,
207
+ height: h,
208
+ data,
209
+ header: rgbe_header_info.string,
210
+ gamma: rgbe_header_info.gamma,
211
+ exposure: rgbe_header_info.exposure,
212
+ type
213
+ };
224
214
  }
225
215
  setDataType(value) {
226
216
  this.type = value;
@@ -1 +1 @@
1
- {"version":3,"file":"RGBELoader.js","sources":["../../src/loaders/RGBELoader.js"],"sourcesContent":["import { DataTextureLoader, DataUtils, FloatType, HalfFloatType, LinearFilter } 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 constructor(manager) {\n super(manager)\n\n this.type = HalfFloatType\n }\n\n // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n parse(buffer) {\n const /* return codes for rgbe routines */\n //RGBE_RETURN_SUCCESS = 0,\n RGBE_RETURN_FAILURE = -1,\n /* default error routine. change this to change error handling */\n rgbe_read_error = 1,\n rgbe_write_error = 2,\n rgbe_format_error = 3,\n rgbe_memory_error = 4,\n rgbe_error = function (rgbe_error_code, msg) {\n switch (rgbe_error_code) {\n case rgbe_read_error:\n console.error('THREE.RGBELoader Read Error: ' + (msg || ''))\n break\n case rgbe_write_error:\n console.error('THREE.RGBELoader Write Error: ' + (msg || ''))\n break\n case rgbe_format_error:\n console.error('THREE.RGBELoader Bad File Format: ' + (msg || ''))\n break\n default:\n case rgbe_memory_error:\n console.error('THREE.RGBELoader: Error: ' + (msg || ''))\n }\n\n return RGBE_RETURN_FAILURE\n },\n /* offsets to red, green, and blue components in a data (float) pixel */\n //RGBE_DATA_RED = 0,\n //RGBE_DATA_GREEN = 1,\n //RGBE_DATA_BLUE = 2,\n\n /* number of floats per pixel, use 4 since stored in rgba image format */\n //RGBE_DATA_SIZE = 4,\n\n /* flags indicating which fields in an rgbe_header_info are valid */\n RGBE_VALID_PROGRAMTYPE = 1,\n RGBE_VALID_FORMAT = 2,\n RGBE_VALID_DIMENSIONS = 4,\n NEWLINE = '\\n',\n fgets = function (buffer, lineLimit, consume) {\n const chunkSize = 128\n\n lineLimit = !lineLimit ? 1024 : lineLimit\n let p = buffer.pos,\n i = -1,\n len = 0,\n s = '',\n chunk = String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)))\n\n while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer.byteLength) {\n s += chunk\n len += chunk.length\n p += chunkSize\n chunk += String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)))\n }\n\n if (-1 < i) {\n /*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n if (false !== consume) buffer.pos += len + i + 1\n return s + chunk.slice(0, i)\n }\n\n return false\n },\n /* minimal header reading. modify if you want to parse more information */\n RGBE_ReadHeader = function (buffer) {\n // regexes to parse header info fields\n const magic_token_re = /^#\\?(\\S+)/,\n gamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n exposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n format_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n dimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n // RGBE format header struct\n header = {\n valid: 0 /* indicate which fields are valid */,\n\n string: '' /* the actual header string */,\n\n comments: '' /* comments found in header */,\n\n programtype: 'RGBE' /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */,\n\n format: '' /* RGBE format, default 32-bit_rle_rgbe */,\n\n gamma: 1.0 /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */,\n\n exposure: 1.0 /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */,\n\n width: 0,\n height: 0 /* image dimensions, width/height */,\n }\n\n let line, match\n\n if (buffer.pos >= buffer.byteLength || !(line = fgets(buffer))) {\n return rgbe_error(rgbe_read_error, 'no header found')\n }\n\n /* if you want to require the magic token then uncomment the next line */\n if (!(match = line.match(magic_token_re))) {\n return rgbe_error(rgbe_format_error, 'bad initial token')\n }\n\n header.valid |= RGBE_VALID_PROGRAMTYPE\n header.programtype = match[1]\n header.string += line + '\\n'\n\n while (true) {\n line = fgets(buffer)\n if (false === line) break\n header.string += line + '\\n'\n\n if ('#' === line.charAt(0)) {\n header.comments += line + '\\n'\n continue // comment line\n }\n\n if ((match = line.match(gamma_re))) {\n header.gamma = parseFloat(match[1])\n }\n\n if ((match = line.match(exposure_re))) {\n header.exposure = parseFloat(match[1])\n }\n\n if ((match = line.match(format_re))) {\n header.valid |= RGBE_VALID_FORMAT\n header.format = match[1] //'32-bit_rle_rgbe';\n }\n\n if ((match = line.match(dimensions_re))) {\n header.valid |= RGBE_VALID_DIMENSIONS\n header.height = parseInt(match[1], 10)\n header.width = parseInt(match[2], 10)\n }\n\n if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS) break\n }\n\n if (!(header.valid & RGBE_VALID_FORMAT)) {\n return rgbe_error(rgbe_format_error, 'missing format specifier')\n }\n\n if (!(header.valid & RGBE_VALID_DIMENSIONS)) {\n return rgbe_error(rgbe_format_error, 'missing image size specifier')\n }\n\n return header\n },\n RGBE_ReadPixels_RLE = function (buffer, w, h) {\n const scanline_width = w\n\n if (\n // run length encoding is not allowed so read flat\n scanline_width < 8 ||\n scanline_width > 0x7fff ||\n // this file is not run length encoded\n 2 !== buffer[0] ||\n 2 !== buffer[1] ||\n buffer[2] & 0x80\n ) {\n // return the flat buffer\n return new Uint8Array(buffer)\n }\n\n if (scanline_width !== ((buffer[2] << 8) | buffer[3])) {\n return rgbe_error(rgbe_format_error, 'wrong scanline width')\n }\n\n const data_rgba = new Uint8Array(4 * w * h)\n\n if (!data_rgba.length) {\n return rgbe_error(rgbe_memory_error, 'unable to allocate buffer space')\n }\n\n let offset = 0,\n pos = 0\n\n const ptr_end = 4 * scanline_width\n const rgbeStart = new Uint8Array(4)\n const scanline_buffer = new Uint8Array(ptr_end)\n let num_scanlines = h\n\n // read in each successive scanline\n while (num_scanlines > 0 && pos < buffer.byteLength) {\n if (pos + 4 > buffer.byteLength) {\n return rgbe_error(rgbe_read_error)\n }\n\n rgbeStart[0] = buffer[pos++]\n rgbeStart[1] = buffer[pos++]\n rgbeStart[2] = buffer[pos++]\n rgbeStart[3] = buffer[pos++]\n\n if (2 != rgbeStart[0] || 2 != rgbeStart[1] || ((rgbeStart[2] << 8) | rgbeStart[3]) != scanline_width) {\n return rgbe_error(rgbe_format_error, 'bad rgbe scanline format')\n }\n\n // read each of the four channels for the scanline into the buffer\n // first red, then green, then blue, then exponent\n let ptr = 0,\n count\n\n while (ptr < ptr_end && pos < buffer.byteLength) {\n count = buffer[pos++]\n const isEncodedRun = count > 128\n if (isEncodedRun) count -= 128\n\n if (0 === count || ptr + count > ptr_end) {\n return rgbe_error(rgbe_format_error, 'bad scanline data')\n }\n\n if (isEncodedRun) {\n // a (encoded) run of the same value\n const byteValue = buffer[pos++]\n for (let i = 0; i < count; i++) {\n scanline_buffer[ptr++] = byteValue\n }\n //ptr += count;\n } else {\n // a literal-run\n scanline_buffer.set(buffer.subarray(pos, pos + count), ptr)\n ptr += count\n pos += count\n }\n }\n\n // now convert data from buffer into rgba\n // first red, then green, then blue, then exponent (alpha)\n const l = scanline_width //scanline_buffer.byteLength;\n for (let i = 0; i < l; i++) {\n let off = 0\n data_rgba[offset] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 1] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 2] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 3] = scanline_buffer[i + off]\n offset += 4\n }\n\n num_scanlines--\n }\n\n return data_rgba\n }\n\n const RGBEByteToRGBFloat = function (sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3]\n const scale = Math.pow(2.0, e - 128.0) / 255.0\n\n destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale\n destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale\n destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale\n destArray[destOffset + 3] = 1\n }\n\n const RGBEByteToRGBHalf = function (sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3]\n const scale = Math.pow(2.0, e - 128.0) / 255.0\n\n // clamping to 65504, the maximum representable value in float16\n destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504))\n destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504))\n destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504))\n destArray[destOffset + 3] = DataUtils.toHalfFloat(1)\n }\n\n const byteArray = new Uint8Array(buffer)\n byteArray.pos = 0\n const rgbe_header_info = RGBE_ReadHeader(byteArray)\n\n if (RGBE_RETURN_FAILURE !== rgbe_header_info) {\n const w = rgbe_header_info.width,\n h = rgbe_header_info.height,\n image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h)\n\n if (RGBE_RETURN_FAILURE !== image_rgba_data) {\n let data, type\n let numElements\n\n switch (this.type) {\n case FloatType:\n numElements = image_rgba_data.length / 4\n const floatArray = new Float32Array(numElements * 4)\n\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4)\n }\n\n data = floatArray\n type = FloatType\n break\n\n case HalfFloatType:\n numElements = image_rgba_data.length / 4\n const halfArray = new Uint16Array(numElements * 4)\n\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4)\n }\n\n data = halfArray\n type = HalfFloatType\n break\n\n default:\n console.error('THREE.RGBELoader: unsupported type: ', this.type)\n break\n }\n\n return {\n width: w,\n height: h,\n data: data,\n header: rgbe_header_info.string,\n gamma: rgbe_header_info.gamma,\n exposure: rgbe_header_info.exposure,\n type: type,\n }\n }\n }\n\n return null\n }\n\n setDataType(value) {\n this.type = value\n return this\n }\n\n load(url, onLoad, onProgress, onError) {\n function onLoadCallback(texture, texData) {\n switch (texture.type) {\n case FloatType:\n case HalfFloatType:\n if ('colorSpace' in texture) texture.colorSpace = 'srgb-linear'\n else texture.encoding = 3000 // LinearEncoding\n texture.minFilter = LinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.flipY = true\n\n break\n }\n\n if (onLoad) onLoad(texture, texData)\n }\n\n return super.load(url, onLoadCallback, onProgress, onError)\n }\n}\n\nexport { RGBELoader }\n"],"names":["buffer"],"mappings":"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"}
1
+ {"version":3,"file":"RGBELoader.js","sources":["../../src/loaders/RGBELoader.js"],"sourcesContent":["import { DataTextureLoader, DataUtils, FloatType, HalfFloatType, LinearFilter } 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 constructor(manager) {\n super(manager)\n\n this.type = HalfFloatType\n }\n\n // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n parse(buffer) {\n const /* default error routine. change this to change error handling */\n rgbe_read_error = 1,\n rgbe_write_error = 2,\n rgbe_format_error = 3,\n rgbe_memory_error = 4,\n rgbe_error = function (rgbe_error_code, msg) {\n switch (rgbe_error_code) {\n case rgbe_read_error:\n throw new Error('THREE.RGBELoader: Read Error: ' + (msg || ''))\n case rgbe_write_error:\n throw new Error('THREE.RGBELoader: Write Error: ' + (msg || ''))\n case rgbe_format_error:\n throw new Error('THREE.RGBELoader: Bad File Format: ' + (msg || ''))\n default:\n case rgbe_memory_error:\n throw new Error('THREE.RGBELoader: Memory Error: ' + (msg || ''))\n }\n },\n /* offsets to red, green, and blue components in a data (float) pixel */\n //RGBE_DATA_RED = 0,\n //RGBE_DATA_GREEN = 1,\n //RGBE_DATA_BLUE = 2,\n\n /* number of floats per pixel, use 4 since stored in rgba image format */\n //RGBE_DATA_SIZE = 4,\n\n /* flags indicating which fields in an rgbe_header_info are valid */\n RGBE_VALID_PROGRAMTYPE = 1,\n RGBE_VALID_FORMAT = 2,\n RGBE_VALID_DIMENSIONS = 4,\n NEWLINE = '\\n',\n fgets = function (buffer, lineLimit, consume) {\n const chunkSize = 128\n\n lineLimit = !lineLimit ? 1024 : lineLimit\n let p = buffer.pos,\n i = -1,\n len = 0,\n s = '',\n chunk = String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)))\n\n while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer.byteLength) {\n s += chunk\n len += chunk.length\n p += chunkSize\n chunk += String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)))\n }\n\n if (-1 < i) {\n /*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n if (false !== consume) buffer.pos += len + i + 1\n return s + chunk.slice(0, i)\n }\n\n return false\n },\n /* minimal header reading. modify if you want to parse more information */\n RGBE_ReadHeader = function (buffer) {\n // regexes to parse header info fields\n const magic_token_re = /^#\\?(\\S+)/,\n gamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n exposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n format_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n dimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n // RGBE format header struct\n header = {\n valid: 0 /* indicate which fields are valid */,\n\n string: '' /* the actual header string */,\n\n comments: '' /* comments found in header */,\n\n programtype: 'RGBE' /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */,\n\n format: '' /* RGBE format, default 32-bit_rle_rgbe */,\n\n gamma: 1.0 /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */,\n\n exposure: 1.0 /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */,\n\n width: 0,\n height: 0 /* image dimensions, width/height */,\n }\n\n let line, match\n\n if (buffer.pos >= buffer.byteLength || !(line = fgets(buffer))) {\n rgbe_error(rgbe_read_error, 'no header found')\n }\n\n /* if you want to require the magic token then uncomment the next line */\n if (!(match = line.match(magic_token_re))) {\n rgbe_error(rgbe_format_error, 'bad initial token')\n }\n\n header.valid |= RGBE_VALID_PROGRAMTYPE\n header.programtype = match[1]\n header.string += line + '\\n'\n\n while (true) {\n line = fgets(buffer)\n if (false === line) break\n header.string += line + '\\n'\n\n if ('#' === line.charAt(0)) {\n header.comments += line + '\\n'\n continue // comment line\n }\n\n if ((match = line.match(gamma_re))) {\n header.gamma = parseFloat(match[1])\n }\n\n if ((match = line.match(exposure_re))) {\n header.exposure = parseFloat(match[1])\n }\n\n if ((match = line.match(format_re))) {\n header.valid |= RGBE_VALID_FORMAT\n header.format = match[1] //'32-bit_rle_rgbe';\n }\n\n if ((match = line.match(dimensions_re))) {\n header.valid |= RGBE_VALID_DIMENSIONS\n header.height = parseInt(match[1], 10)\n header.width = parseInt(match[2], 10)\n }\n\n if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS) break\n }\n\n if (!(header.valid & RGBE_VALID_FORMAT)) {\n rgbe_error(rgbe_format_error, 'missing format specifier')\n }\n\n if (!(header.valid & RGBE_VALID_DIMENSIONS)) {\n rgbe_error(rgbe_format_error, 'missing image size specifier')\n }\n\n return header\n },\n RGBE_ReadPixels_RLE = function (buffer, w, h) {\n const scanline_width = w\n\n if (\n // run length encoding is not allowed so read flat\n scanline_width < 8 ||\n scanline_width > 0x7fff ||\n // this file is not run length encoded\n 2 !== buffer[0] ||\n 2 !== buffer[1] ||\n buffer[2] & 0x80\n ) {\n // return the flat buffer\n return new Uint8Array(buffer)\n }\n\n if (scanline_width !== ((buffer[2] << 8) | buffer[3])) {\n rgbe_error(rgbe_format_error, 'wrong scanline width')\n }\n\n const data_rgba = new Uint8Array(4 * w * h)\n\n if (!data_rgba.length) {\n rgbe_error(rgbe_memory_error, 'unable to allocate buffer space')\n }\n\n let offset = 0,\n pos = 0\n\n const ptr_end = 4 * scanline_width\n const rgbeStart = new Uint8Array(4)\n const scanline_buffer = new Uint8Array(ptr_end)\n let num_scanlines = h\n\n // read in each successive scanline\n while (num_scanlines > 0 && pos < buffer.byteLength) {\n if (pos + 4 > buffer.byteLength) {\n rgbe_error(rgbe_read_error)\n }\n\n rgbeStart[0] = buffer[pos++]\n rgbeStart[1] = buffer[pos++]\n rgbeStart[2] = buffer[pos++]\n rgbeStart[3] = buffer[pos++]\n\n if (2 != rgbeStart[0] || 2 != rgbeStart[1] || ((rgbeStart[2] << 8) | rgbeStart[3]) != scanline_width) {\n rgbe_error(rgbe_format_error, 'bad rgbe scanline format')\n }\n\n // read each of the four channels for the scanline into the buffer\n // first red, then green, then blue, then exponent\n let ptr = 0,\n count\n\n while (ptr < ptr_end && pos < buffer.byteLength) {\n count = buffer[pos++]\n const isEncodedRun = count > 128\n if (isEncodedRun) count -= 128\n\n if (0 === count || ptr + count > ptr_end) {\n rgbe_error(rgbe_format_error, 'bad scanline data')\n }\n\n if (isEncodedRun) {\n // a (encoded) run of the same value\n const byteValue = buffer[pos++]\n for (let i = 0; i < count; i++) {\n scanline_buffer[ptr++] = byteValue\n }\n //ptr += count;\n } else {\n // a literal-run\n scanline_buffer.set(buffer.subarray(pos, pos + count), ptr)\n ptr += count\n pos += count\n }\n }\n\n // now convert data from buffer into rgba\n // first red, then green, then blue, then exponent (alpha)\n const l = scanline_width //scanline_buffer.byteLength;\n for (let i = 0; i < l; i++) {\n let off = 0\n data_rgba[offset] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 1] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 2] = scanline_buffer[i + off]\n off += scanline_width //1;\n data_rgba[offset + 3] = scanline_buffer[i + off]\n offset += 4\n }\n\n num_scanlines--\n }\n\n return data_rgba\n }\n\n const RGBEByteToRGBFloat = function (sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3]\n const scale = Math.pow(2.0, e - 128.0) / 255.0\n\n destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale\n destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale\n destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale\n destArray[destOffset + 3] = 1\n }\n\n const RGBEByteToRGBHalf = function (sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3]\n const scale = Math.pow(2.0, e - 128.0) / 255.0\n\n // clamping to 65504, the maximum representable value in float16\n destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504))\n destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504))\n destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504))\n destArray[destOffset + 3] = DataUtils.toHalfFloat(1)\n }\n\n const byteArray = new Uint8Array(buffer)\n byteArray.pos = 0\n const rgbe_header_info = RGBE_ReadHeader(byteArray)\n\n const w = rgbe_header_info.width,\n h = rgbe_header_info.height,\n image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h)\n\n let data, type\n let numElements\n\n switch (this.type) {\n case FloatType:\n numElements = image_rgba_data.length / 4\n const floatArray = new Float32Array(numElements * 4)\n\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4)\n }\n\n data = floatArray\n type = FloatType\n break\n\n case HalfFloatType:\n numElements = image_rgba_data.length / 4\n const halfArray = new Uint16Array(numElements * 4)\n\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4)\n }\n\n data = halfArray\n type = HalfFloatType\n break\n\n default:\n throw new Error('THREE.RGBELoader: Unsupported type: ' + this.type)\n break\n }\n\n return {\n width: w,\n height: h,\n data: data,\n header: rgbe_header_info.string,\n gamma: rgbe_header_info.gamma,\n exposure: rgbe_header_info.exposure,\n type: type,\n }\n }\n\n setDataType(value) {\n this.type = value\n return this\n }\n\n load(url, onLoad, onProgress, onError) {\n function onLoadCallback(texture, texData) {\n switch (texture.type) {\n case FloatType:\n case HalfFloatType:\n if ('colorSpace' in texture) texture.colorSpace = 'srgb-linear'\n else texture.encoding = 3000 // LinearEncoding\n texture.minFilter = LinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.flipY = true\n\n break\n }\n\n if (onLoad) onLoad(texture, texData)\n }\n\n return super.load(url, onLoadCallback, onProgress, onError)\n }\n}\n\nexport { RGBELoader }\n"],"names":["buffer","w","h"],"mappings":";AAKA,MAAM,mBAAmB,kBAAkB;AAAA,EACzC,YAAY,SAAS;AACnB,UAAM,OAAO;AAEb,SAAK,OAAO;AAAA,EACb;AAAA;AAAA,EAID,MAAM,QAAQ;AACZ,UACE,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,GACpB,aAAa,SAAU,iBAAiB,KAAK;AAC3C,cAAQ,iBAAe;AAAA,QACrB,KAAK;AACH,gBAAM,IAAI,MAAM,oCAAoC,OAAO,GAAG;AAAA,QAChE,KAAK;AACH,gBAAM,IAAI,MAAM,qCAAqC,OAAO,GAAG;AAAA,QACjE,KAAK;AACH,gBAAM,IAAI,MAAM,yCAAyC,OAAO,GAAG;AAAA,QACrE;AAAA,QACA,KAAK;AACH,gBAAM,IAAI,MAAM,sCAAsC,OAAO,GAAG;AAAA,MACnE;AAAA,IACF,GAUD,yBAAyB,GACzB,oBAAoB,GACpB,wBAAwB,GACxB,UAAU,MACV,QAAQ,SAAUA,SAAQ,WAAW,SAAS;AAC5C,YAAM,YAAY;AAElB,kBAAY,CAAC,YAAY,OAAO;AAChC,UAAI,IAAIA,QAAO,KACb,IAAI,IACJ,MAAM,GACN,IAAI,IACJ,QAAQ,OAAO,aAAa,MAAM,MAAM,IAAI,YAAYA,QAAO,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;AAE5F,aAAO,KAAK,IAAI,MAAM,QAAQ,OAAO,MAAM,MAAM,aAAa,IAAIA,QAAO,YAAY;AACnF,aAAK;AACL,eAAO,MAAM;AACb,aAAK;AACL,iBAAS,OAAO,aAAa,MAAM,MAAM,IAAI,YAAYA,QAAO,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;AAAA,MAC5F;AAED,UAAI,KAAK,GAAG;AAOV,YAAI,UAAU;AAAS,UAAAA,QAAO,OAAO,MAAM,IAAI;AAC/C,eAAO,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,MAC5B;AAED,aAAO;AAAA,IACR,GAED,kBAAkB,SAAUA,SAAQ;AAElC,YAAM,iBAAiB,aACrB,WAAW,qCACX,cAAc,wCACd,YAAY,wBACZ,gBAAgB,qCAEhB,SAAS;AAAA,QACP,OAAO;AAAA,QAEP,QAAQ;AAAA,QAER,UAAU;AAAA,QAEV,aAAa;AAAA,QAEb,QAAQ;AAAA,QAER,OAAO;AAAA,QAEP,UAAU;AAAA,QAEV,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAEH,UAAI,MAAM;AAEV,UAAIA,QAAO,OAAOA,QAAO,cAAc,EAAE,OAAO,MAAMA,OAAM,IAAI;AAC9D,mBAAW,iBAAiB,iBAAiB;AAAA,MAC9C;AAGD,UAAI,EAAE,QAAQ,KAAK,MAAM,cAAc,IAAI;AACzC,mBAAW,mBAAmB,mBAAmB;AAAA,MAClD;AAED,aAAO,SAAS;AAChB,aAAO,cAAc,MAAM,CAAC;AAC5B,aAAO,UAAU,OAAO;AAExB,aAAO,MAAM;AACX,eAAO,MAAMA,OAAM;AACnB,YAAI,UAAU;AAAM;AACpB,eAAO,UAAU,OAAO;AAExB,YAAI,QAAQ,KAAK,OAAO,CAAC,GAAG;AAC1B,iBAAO,YAAY,OAAO;AAC1B;AAAA,QACD;AAED,YAAK,QAAQ,KAAK,MAAM,QAAQ,GAAI;AAClC,iBAAO,QAAQ,WAAW,MAAM,CAAC,CAAC;AAAA,QACnC;AAED,YAAK,QAAQ,KAAK,MAAM,WAAW,GAAI;AACrC,iBAAO,WAAW,WAAW,MAAM,CAAC,CAAC;AAAA,QACtC;AAED,YAAK,QAAQ,KAAK,MAAM,SAAS,GAAI;AACnC,iBAAO,SAAS;AAChB,iBAAO,SAAS,MAAM,CAAC;AAAA,QACxB;AAED,YAAK,QAAQ,KAAK,MAAM,aAAa,GAAI;AACvC,iBAAO,SAAS;AAChB,iBAAO,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AACrC,iBAAO,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA,QACrC;AAED,YAAI,OAAO,QAAQ,qBAAqB,OAAO,QAAQ;AAAuB;AAAA,MAC/E;AAED,UAAI,EAAE,OAAO,QAAQ,oBAAoB;AACvC,mBAAW,mBAAmB,0BAA0B;AAAA,MACzD;AAED,UAAI,EAAE,OAAO,QAAQ,wBAAwB;AAC3C,mBAAW,mBAAmB,8BAA8B;AAAA,MAC7D;AAED,aAAO;AAAA,IACR,GACD,sBAAsB,SAAUA,SAAQC,IAAGC,IAAG;AAC5C,YAAM,iBAAiBD;AAEvB;AAAA;AAAA,QAEE,iBAAiB,KACjB,iBAAiB;AAAA,QAEjB,MAAMD,QAAO,CAAC,KACd,MAAMA,QAAO,CAAC,KACdA,QAAO,CAAC,IAAI;AAAA,QACZ;AAEA,eAAO,IAAI,WAAWA,OAAM;AAAA,MAC7B;AAED,UAAI,oBAAqBA,QAAO,CAAC,KAAK,IAAKA,QAAO,CAAC,IAAI;AACrD,mBAAW,mBAAmB,sBAAsB;AAAA,MACrD;AAED,YAAM,YAAY,IAAI,WAAW,IAAIC,KAAIC,EAAC;AAE1C,UAAI,CAAC,UAAU,QAAQ;AACrB,mBAAW,mBAAmB,iCAAiC;AAAA,MAChE;AAED,UAAI,SAAS,GACX,MAAM;AAER,YAAM,UAAU,IAAI;AACpB,YAAM,YAAY,IAAI,WAAW,CAAC;AAClC,YAAM,kBAAkB,IAAI,WAAW,OAAO;AAC9C,UAAI,gBAAgBA;AAGpB,aAAO,gBAAgB,KAAK,MAAMF,QAAO,YAAY;AACnD,YAAI,MAAM,IAAIA,QAAO,YAAY;AAC/B,qBAAW,eAAe;AAAA,QAC3B;AAED,kBAAU,CAAC,IAAIA,QAAO,KAAK;AAC3B,kBAAU,CAAC,IAAIA,QAAO,KAAK;AAC3B,kBAAU,CAAC,IAAIA,QAAO,KAAK;AAC3B,kBAAU,CAAC,IAAIA,QAAO,KAAK;AAE3B,YAAI,KAAK,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,MAAO,UAAU,CAAC,KAAK,IAAK,UAAU,CAAC,MAAM,gBAAgB;AACpG,qBAAW,mBAAmB,0BAA0B;AAAA,QACzD;AAID,YAAI,MAAM,GACR;AAEF,eAAO,MAAM,WAAW,MAAMA,QAAO,YAAY;AAC/C,kBAAQA,QAAO,KAAK;AACpB,gBAAM,eAAe,QAAQ;AAC7B,cAAI;AAAc,qBAAS;AAE3B,cAAI,MAAM,SAAS,MAAM,QAAQ,SAAS;AACxC,uBAAW,mBAAmB,mBAAmB;AAAA,UAClD;AAED,cAAI,cAAc;AAEhB,kBAAM,YAAYA,QAAO,KAAK;AAC9B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,8BAAgB,KAAK,IAAI;AAAA,YAC1B;AAAA,UAEf,OAAmB;AAEL,4BAAgB,IAAIA,QAAO,SAAS,KAAK,MAAM,KAAK,GAAG,GAAG;AAC1D,mBAAO;AACP,mBAAO;AAAA,UACR;AAAA,QACF;AAID,cAAM,IAAI;AACV,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAI,MAAM;AACV,oBAAU,MAAM,IAAI,gBAAgB,IAAI,GAAG;AAC3C,iBAAO;AACP,oBAAU,SAAS,CAAC,IAAI,gBAAgB,IAAI,GAAG;AAC/C,iBAAO;AACP,oBAAU,SAAS,CAAC,IAAI,gBAAgB,IAAI,GAAG;AAC/C,iBAAO;AACP,oBAAU,SAAS,CAAC,IAAI,gBAAgB,IAAI,GAAG;AAC/C,oBAAU;AAAA,QACX;AAED;AAAA,MACD;AAED,aAAO;AAAA,IACR;AAEH,UAAM,qBAAqB,SAAU,aAAa,cAAc,WAAW,YAAY;AACrF,YAAM,IAAI,YAAY,eAAe,CAAC;AACtC,YAAM,QAAQ,KAAK,IAAI,GAAK,IAAI,GAAK,IAAI;AAEzC,gBAAU,aAAa,CAAC,IAAI,YAAY,eAAe,CAAC,IAAI;AAC5D,gBAAU,aAAa,CAAC,IAAI,YAAY,eAAe,CAAC,IAAI;AAC5D,gBAAU,aAAa,CAAC,IAAI,YAAY,eAAe,CAAC,IAAI;AAC5D,gBAAU,aAAa,CAAC,IAAI;AAAA,IAC7B;AAED,UAAM,oBAAoB,SAAU,aAAa,cAAc,WAAW,YAAY;AACpF,YAAM,IAAI,YAAY,eAAe,CAAC;AACtC,YAAM,QAAQ,KAAK,IAAI,GAAK,IAAI,GAAK,IAAI;AAGzC,gBAAU,aAAa,CAAC,IAAI,UAAU,YAAY,KAAK,IAAI,YAAY,eAAe,CAAC,IAAI,OAAO,KAAK,CAAC;AACxG,gBAAU,aAAa,CAAC,IAAI,UAAU,YAAY,KAAK,IAAI,YAAY,eAAe,CAAC,IAAI,OAAO,KAAK,CAAC;AACxG,gBAAU,aAAa,CAAC,IAAI,UAAU,YAAY,KAAK,IAAI,YAAY,eAAe,CAAC,IAAI,OAAO,KAAK,CAAC;AACxG,gBAAU,aAAa,CAAC,IAAI,UAAU,YAAY,CAAC;AAAA,IACpD;AAED,UAAM,YAAY,IAAI,WAAW,MAAM;AACvC,cAAU,MAAM;AAChB,UAAM,mBAAmB,gBAAgB,SAAS;AAElD,UAAM,IAAI,iBAAiB,OACzB,IAAI,iBAAiB,QACrB,kBAAkB,oBAAoB,UAAU,SAAS,UAAU,GAAG,GAAG,GAAG,CAAC;AAE/E,QAAI,MAAM;AACV,QAAI;AAEJ,YAAQ,KAAK,MAAI;AAAA,MACf,KAAK;AACH,sBAAc,gBAAgB,SAAS;AACvC,cAAM,aAAa,IAAI,aAAa,cAAc,CAAC;AAEnD,iBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,6BAAmB,iBAAiB,IAAI,GAAG,YAAY,IAAI,CAAC;AAAA,QAC7D;AAED,eAAO;AACP,eAAO;AACP;AAAA,MAEF,KAAK;AACH,sBAAc,gBAAgB,SAAS;AACvC,cAAM,YAAY,IAAI,YAAY,cAAc,CAAC;AAEjD,iBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,4BAAkB,iBAAiB,IAAI,GAAG,WAAW,IAAI,CAAC;AAAA,QAC3D;AAED,eAAO;AACP,eAAO;AACP;AAAA,MAEF;AACE,cAAM,IAAI,MAAM,yCAAyC,KAAK,IAAI;AAAA,IAErE;AAED,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ,iBAAiB;AAAA,MACzB,OAAO,iBAAiB;AAAA,MACxB,UAAU,iBAAiB;AAAA,MAC3B;AAAA,IACD;AAAA,EACF;AAAA,EAED,YAAY,OAAO;AACjB,SAAK,OAAO;AACZ,WAAO;AAAA,EACR;AAAA,EAED,KAAK,KAAK,QAAQ,YAAY,SAAS;AACrC,aAAS,eAAe,SAAS,SAAS;AACxC,cAAQ,QAAQ,MAAI;AAAA,QAClB,KAAK;AAAA,QACL,KAAK;AACH,cAAI,gBAAgB;AAAS,oBAAQ,aAAa;AAAA;AAC7C,oBAAQ,WAAW;AACxB,kBAAQ,YAAY;AACpB,kBAAQ,YAAY;AACpB,kBAAQ,kBAAkB;AAC1B,kBAAQ,QAAQ;AAEhB;AAAA,MACH;AAED,UAAI;AAAQ,eAAO,SAAS,OAAO;AAAA,IACpC;AAED,WAAO,MAAM,KAAK,KAAK,gBAAgB,YAAY,OAAO;AAAA,EAC3D;AACH;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-stdlib",
3
- "version": "2.29.7",
3
+ "version": "2.29.8",
4
4
  "description": "stand-alone library of threejs examples",
5
5
  "keywords": [
6
6
  "three",