three-stdlib 2.29.7 → 2.29.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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;"}