@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.16.8 → 3.16.10

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.
Files changed (185) hide show
  1. package/dist/RenderingEngine.d.ts +294 -294
  2. package/dist/RenderingEngine.js +987 -977
  3. package/dist/RenderingEngine.js.map +1 -1
  4. package/dist/index.d.ts +16 -16
  5. package/dist/index.js +57 -57
  6. package/dist/injectors/TextureUnifierInjector.d.ts +13 -13
  7. package/dist/injectors/TextureUnifierInjector.js +181 -171
  8. package/dist/injectors/TextureUnifierInjector.js.map +1 -1
  9. package/dist/interfaces/ILoader.d.ts +3 -3
  10. package/dist/interfaces/ILoader.js +2 -2
  11. package/dist/interfaces/IRenderingEngine.d.ts +45 -45
  12. package/dist/interfaces/IRenderingEngine.js +2 -2
  13. package/dist/loaders/EnvironmentMapLoader.d.ts +119 -119
  14. package/dist/loaders/EnvironmentMapLoader.js +512 -502
  15. package/dist/loaders/EnvironmentMapLoader.js.map +1 -1
  16. package/dist/loaders/GeometryLoader.d.ts +39 -39
  17. package/dist/loaders/GeometryLoader.d.ts.map +1 -1
  18. package/dist/loaders/GeometryLoader.js +603 -593
  19. package/dist/loaders/GeometryLoader.js.map +1 -1
  20. package/dist/loaders/HTMLElementAnchorLoader.d.ts +15 -15
  21. package/dist/loaders/HTMLElementAnchorLoader.js +98 -98
  22. package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -1
  23. package/dist/loaders/LightLoader.d.ts +19 -19
  24. package/dist/loaders/LightLoader.js +197 -187
  25. package/dist/loaders/LightLoader.js.map +1 -1
  26. package/dist/loaders/MaterialLoader.d.ts +115 -115
  27. package/dist/loaders/MaterialLoader.d.ts.map +1 -1
  28. package/dist/loaders/MaterialLoader.js +1612 -1602
  29. package/dist/loaders/MaterialLoader.js.map +1 -1
  30. package/dist/managers/ARManager.d.ts +17 -17
  31. package/dist/managers/ARManager.js +128 -128
  32. package/dist/managers/ARManager.js.map +1 -1
  33. package/dist/managers/CameraManager.d.ts +19 -19
  34. package/dist/managers/CameraManager.js +244 -234
  35. package/dist/managers/CameraManager.js.map +1 -1
  36. package/dist/managers/EnvironmentGeometryManager.d.ts +32 -32
  37. package/dist/managers/EnvironmentGeometryManager.js +114 -114
  38. package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
  39. package/dist/managers/FlagManager.d.ts +19 -19
  40. package/dist/managers/FlagManager.js +143 -143
  41. package/dist/managers/FlagManager.js.map +1 -1
  42. package/dist/managers/PostProcessingManager.d.ts +1019 -1019
  43. package/dist/managers/PostProcessingManager.js +1306 -1296
  44. package/dist/managers/PostProcessingManager.js.map +1 -1
  45. package/dist/managers/RenderingManager.d.ts +84 -84
  46. package/dist/managers/RenderingManager.d.ts.map +1 -1
  47. package/dist/managers/RenderingManager.js +679 -669
  48. package/dist/managers/RenderingManager.js.map +1 -1
  49. package/dist/managers/SceneTracingManager.d.ts +28 -28
  50. package/dist/managers/SceneTracingManager.js +160 -150
  51. package/dist/managers/SceneTracingManager.js.map +1 -1
  52. package/dist/managers/SceneTreeManager.d.ts +81 -81
  53. package/dist/managers/SceneTreeManager.d.ts.map +1 -1
  54. package/dist/managers/SceneTreeManager.js +500 -490
  55. package/dist/managers/SceneTreeManager.js.map +1 -1
  56. package/dist/managers/SettingsManager.d.ts +28 -28
  57. package/dist/managers/SettingsManager.js +284 -284
  58. package/dist/managers/SettingsManager.js.map +1 -1
  59. package/dist/managers/environmentGeometry/ContactShadow.d.ts +42 -42
  60. package/dist/managers/environmentGeometry/ContactShadow.js +295 -285
  61. package/dist/managers/environmentGeometry/ContactShadow.js.map +1 -1
  62. package/dist/managers/environmentGeometry/Grid.d.ts +20 -20
  63. package/dist/managers/environmentGeometry/Grid.js +110 -100
  64. package/dist/managers/environmentGeometry/Grid.js.map +1 -1
  65. package/dist/managers/environmentGeometry/GroundPlane.d.ts +21 -21
  66. package/dist/managers/environmentGeometry/GroundPlane.js +105 -95
  67. package/dist/managers/environmentGeometry/GroundPlane.js.map +1 -1
  68. package/dist/managers/environmentGeometry/GroundPlaneShadow.d.ts +21 -21
  69. package/dist/managers/environmentGeometry/GroundPlaneShadow.js +96 -86
  70. package/dist/managers/environmentGeometry/GroundPlaneShadow.js.map +1 -1
  71. package/dist/managers/environmentGeometry/IEnvironmentGeometry.d.ts +8 -8
  72. package/dist/managers/environmentGeometry/IEnvironmentGeometry.js +2 -2
  73. package/dist/managers/postprocessing/GodRaysManager.d.ts +12 -12
  74. package/dist/managers/postprocessing/GodRaysManager.js +73 -63
  75. package/dist/managers/postprocessing/GodRaysManager.js.map +1 -1
  76. package/dist/managers/postprocessing/OutlineManager.d.ts +15 -15
  77. package/dist/managers/postprocessing/OutlineManager.js +86 -76
  78. package/dist/managers/postprocessing/OutlineManager.js.map +1 -1
  79. package/dist/managers/postprocessing/SSAARenderPass.d.ts +53 -53
  80. package/dist/managers/postprocessing/SSAARenderPass.js +281 -281
  81. package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -1
  82. package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +14 -14
  83. package/dist/managers/postprocessing/SelectiveBloomManager.js +76 -66
  84. package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -1
  85. package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +46 -46
  86. package/dist/managers/postprocessing/ao/ao/AOEffect.js +142 -142
  87. package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -1
  88. package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +12 -12
  89. package/dist/managers/postprocessing/ao/ao/AOPass.js +108 -108
  90. package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -1
  91. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +1 -1
  92. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +4 -4
  93. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.d.ts +1 -1
  94. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.js +4 -4
  95. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +14 -14
  96. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +24 -24
  97. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +1 -1
  98. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +4 -4
  99. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +33 -33
  100. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +211 -211
  101. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -1
  102. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +1 -1
  103. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +4 -4
  104. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +14 -14
  105. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +82 -82
  106. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -1
  107. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +1 -1
  108. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +4 -4
  109. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +1 -1
  110. package/dist/managers/postprocessing/ao/utils/shader/basic.js +4 -4
  111. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +1 -1
  112. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +4 -4
  113. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.d.ts +165 -165
  114. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js +299 -299
  115. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js.map +1 -1
  116. package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.d.ts +1 -1
  117. package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.js +4 -4
  118. package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +37 -37
  119. package/dist/managers/postprocessing/utils/CopyMaterial.js +69 -69
  120. package/dist/managers/postprocessing/utils/CopyShader.d.ts +13 -13
  121. package/dist/managers/postprocessing/utils/CopyShader.js +12 -12
  122. package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +9 -9
  123. package/dist/managers/postprocessing/utils/FullScreenQuad.js +28 -28
  124. package/dist/managers/postprocessing/utils/NormalPass.d.ts +87 -87
  125. package/dist/managers/postprocessing/utils/NormalPass.js +156 -156
  126. package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -1
  127. package/dist/managers/postprocessing/utils/RenderPass.d.ts +114 -114
  128. package/dist/managers/postprocessing/utils/RenderPass.js +259 -259
  129. package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -1
  130. package/dist/managers/sceneTree/SDTFUtils.d.ts +6 -6
  131. package/dist/managers/sceneTree/SDTFUtils.d.ts.map +1 -1
  132. package/dist/managers/sceneTree/SDTFUtils.js +50 -50
  133. package/dist/managers/sceneTree/SDTFUtils.js.map +1 -1
  134. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts +7 -7
  135. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts.map +1 -1
  136. package/dist/managers/sceneTree/SceenTreeManagerUtils.js +175 -165
  137. package/dist/managers/sceneTree/SceenTreeManagerUtils.js.map +1 -1
  138. package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts +6 -6
  139. package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts.map +1 -1
  140. package/dist/managers/sceneTree/ThreeJsDataUtils.js +80 -70
  141. package/dist/managers/sceneTree/ThreeJsDataUtils.js.map +1 -1
  142. package/dist/materials/GemMaterial.d.ts +37 -37
  143. package/dist/materials/GemMaterial.js +262 -252
  144. package/dist/materials/GemMaterial.js.map +1 -1
  145. package/dist/materials/MeshUnlitMaterialParameters.d.ts +3 -3
  146. package/dist/materials/MeshUnlitMaterialParameters.js +2 -2
  147. package/dist/materials/MultiPointsMaterial.d.ts +93 -93
  148. package/dist/materials/MultiPointsMaterial.js +577 -567
  149. package/dist/materials/MultiPointsMaterial.js.map +1 -1
  150. package/dist/materials/SpecularGlossinessMaterial.d.ts +13 -13
  151. package/dist/materials/SpecularGlossinessMaterial.js +171 -161
  152. package/dist/materials/SpecularGlossinessMaterial.js.map +1 -1
  153. package/dist/objects/SDColor.d.ts +16 -16
  154. package/dist/objects/SDColor.js +52 -52
  155. package/dist/objects/SDColor.js.map +1 -1
  156. package/dist/objects/SDObject.d.ts +27 -27
  157. package/dist/objects/SDObject.js +112 -102
  158. package/dist/objects/SDObject.js.map +1 -1
  159. package/dist/shaders/PCSS.d.ts +2 -2
  160. package/dist/shaders/PCSS.js +5 -5
  161. package/dist/shaders/gem.d.ts +2 -2
  162. package/dist/shaders/gem.js +5 -5
  163. package/dist/shaders/multi_points.d.ts +2 -2
  164. package/dist/shaders/multi_points.js +5 -5
  165. package/dist/styling/viewport-css.d.ts +1 -1
  166. package/dist/styling/viewport-css.js +4 -4
  167. package/dist/three/CSS2DRenderer.d.ts +31 -31
  168. package/dist/three/CSS2DRenderer.d.ts.map +1 -1
  169. package/dist/three/CSS2DRenderer.js +152 -152
  170. package/dist/three/CSS2DRenderer.js.map +1 -1
  171. package/dist/three/geometries/TextGeometry.d.ts +21 -21
  172. package/dist/three/geometries/TextGeometry.js +45 -45
  173. package/dist/three/geometries/TextGeometry.js.map +1 -1
  174. package/dist/three/loaders/RGBELoader.d.ts +23 -23
  175. package/dist/three/loaders/RGBELoader.js +311 -311
  176. package/dist/three/loaders/RGBELoader.js.map +1 -1
  177. package/dist/types/IThreejsData.d.ts +6 -6
  178. package/dist/types/IThreejsData.js +2 -2
  179. package/dist/types/ThreejsData.d.ts +10 -10
  180. package/dist/types/ThreejsData.js +41 -41
  181. package/package.json +18 -18
  182. package/dist/managers/InstanceGroupManager.d.ts +0 -58
  183. package/dist/managers/InstanceGroupManager.d.ts.map +0 -1
  184. package/dist/managers/InstanceGroupManager.js +0 -372
  185. package/dist/managers/InstanceGroupManager.js.map +0 -1
@@ -1,312 +1,312 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RGBELoader = void 0;
4
- /* eslint-disable no-case-declarations */
5
- /* eslint-disable no-cond-assign */
6
- /* eslint-disable @typescript-eslint/no-explicit-any */
7
- const three_1 = require("three");
8
- // https://github.com/mrdoob/three.js/issues/5552
9
- // http://en.wikipedia.org/wiki/RGBE_image_format
10
- class RGBELoader extends three_1.DataTextureLoader {
11
- constructor(manager) {
12
- super(manager);
13
- this.type = three_1.HalfFloatType;
14
- }
15
- // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html
16
- parse(buffer) {
17
- const /* return codes for rgbe routines */
18
- //RGBE_RETURN_SUCCESS = 0,
19
- RGBE_RETURN_FAILURE = -1,
20
- /* default error routine. change this to change error handling */
21
- rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function (rgbe_error_code, msg) {
22
- switch (rgbe_error_code) {
23
- case rgbe_read_error:
24
- console.error("THREE.RGBELoader Read Error: " + (msg || ""));
25
- break;
26
- case rgbe_write_error:
27
- console.error("THREE.RGBELoader Write Error: " + (msg || ""));
28
- break;
29
- case rgbe_format_error:
30
- console.error("THREE.RGBELoader Bad File Format: " + (msg || ""));
31
- break;
32
- default:
33
- case rgbe_memory_error:
34
- console.error("THREE.RGBELoader: Error: " + (msg || ""));
35
- }
36
- return RGBE_RETURN_FAILURE;
37
- },
38
- /* offsets to red, green, and blue components in a data (float) pixel */
39
- //RGBE_DATA_RED = 0,
40
- //RGBE_DATA_GREEN = 1,
41
- //RGBE_DATA_BLUE = 2,
42
- /* number of floats per pixel, use 4 since stored in rgba image format */
43
- //RGBE_DATA_SIZE = 4,
44
- /* flags indicating which fields in an rgbe_header_info are valid */
45
- RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function (buffer, lineLimit, consume) {
46
- const chunkSize = 128;
47
- lineLimit = !lineLimit ? 1024 : lineLimit;
48
- let p = buffer.pos, i = -1, len = 0, s = "", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)));
49
- while (0 > (i = chunk.indexOf(NEWLINE)) &&
50
- len < lineLimit &&
51
- p < buffer.byteLength) {
52
- s += chunk;
53
- len += chunk.length;
54
- p += chunkSize;
55
- chunk += String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)));
56
- }
57
- if (-1 < i) {
58
- /*for (i=l-1; i>=0; i--) {
59
- byteCode = m.charCodeAt(i);
60
- if (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;
61
- else if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;
62
- if (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate
63
- }*/
64
- if (false !== consume)
65
- buffer.pos += len + i + 1;
66
- return s + chunk.slice(0, i);
67
- }
68
- return false;
69
- },
70
- /* minimal header reading. modify if you want to parse more information */
71
- RGBE_ReadHeader = function (buffer) {
72
- // regexes to parse header info fields
73
- const magic_token_re = /^#\?(\S+)/, gamma_re = /^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/, exposure_re = /^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/, format_re = /^\s*FORMAT=(\S+)\s*$/,
74
- // eslint-disable-next-line no-useless-escape
75
- dimensions_re = /^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,
76
- // RGBE format header struct
77
- header = {
78
- valid: 0 /* indicate which fields are valid */,
79
- string: "" /* the actual header string */,
80
- comments: "" /* comments found in header */,
81
- programtype: "RGBE" /* listed at beginning of file to identify it after "#?". defaults to "RGBE" */,
82
- format: "" /* RGBE format, default 32-bit_rle_rgbe */,
83
- gamma: 1.0 /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */,
84
- exposure: 1.0 /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */,
85
- width: 0,
86
- height: 0 /* image dimensions, width/height */,
87
- };
88
- let line, match;
89
- if (buffer.pos >= buffer.byteLength ||
90
- !(line = fgets(buffer, undefined, undefined))) {
91
- return rgbe_error(rgbe_read_error, "no header found");
92
- }
93
- /* if you want to require the magic token then uncomment the next line */
94
- if (!(match = line.match(magic_token_re))) {
95
- return rgbe_error(rgbe_format_error, "bad initial token");
96
- }
97
- header.valid |= RGBE_VALID_PROGRAMTYPE;
98
- header.programtype = match[1];
99
- header.string += line + "\n";
100
- // eslint-disable-next-line no-constant-condition
101
- while (true) {
102
- line = fgets(buffer, undefined, undefined);
103
- if (false === line)
104
- break;
105
- header.string += line + "\n";
106
- if ("#" === line.charAt(0)) {
107
- header.comments += line + "\n";
108
- continue; // comment line
109
- }
110
- if ((match = line.match(gamma_re))) {
111
- header.gamma = parseFloat(match[1]);
112
- }
113
- if ((match = line.match(exposure_re))) {
114
- header.exposure = parseFloat(match[1]);
115
- }
116
- if ((match = line.match(format_re))) {
117
- header.valid |= RGBE_VALID_FORMAT;
118
- header.format = match[1]; //'32-bit_rle_rgbe';
119
- }
120
- if ((match = line.match(dimensions_re))) {
121
- header.valid |= RGBE_VALID_DIMENSIONS;
122
- header.height = parseInt(match[1], 10);
123
- header.width = parseInt(match[2], 10);
124
- }
125
- if (header.valid & RGBE_VALID_FORMAT &&
126
- header.valid & RGBE_VALID_DIMENSIONS)
127
- break;
128
- }
129
- if (!(header.valid & RGBE_VALID_FORMAT)) {
130
- return rgbe_error(rgbe_format_error, "missing format specifier");
131
- }
132
- if (!(header.valid & RGBE_VALID_DIMENSIONS)) {
133
- return rgbe_error(rgbe_format_error, "missing image size specifier");
134
- }
135
- return header;
136
- }, RGBE_ReadPixels_RLE = function (buffer, w, h) {
137
- const scanline_width = w;
138
- if (
139
- // run length encoding is not allowed so read flat
140
- scanline_width < 8 ||
141
- scanline_width > 0x7fff ||
142
- // this file is not run length encoded
143
- 2 !== buffer[0] ||
144
- 2 !== buffer[1] ||
145
- buffer[2] & 0x80) {
146
- // return the flat buffer
147
- return new Uint8Array(buffer);
148
- }
149
- if (scanline_width !== ((buffer[2] << 8) | buffer[3])) {
150
- return rgbe_error(rgbe_format_error, "wrong scanline width");
151
- }
152
- const data_rgba = new Uint8Array(4 * w * h);
153
- if (!data_rgba.length) {
154
- return rgbe_error(rgbe_memory_error, "unable to allocate buffer space");
155
- }
156
- let offset = 0, pos = 0;
157
- const ptr_end = 4 * scanline_width;
158
- const rgbeStart = new Uint8Array(4);
159
- const scanline_buffer = new Uint8Array(ptr_end);
160
- let num_scanlines = h;
161
- // read in each successive scanline
162
- while (num_scanlines > 0 && pos < buffer.byteLength) {
163
- if (pos + 4 > buffer.byteLength) {
164
- return rgbe_error(rgbe_read_error, undefined);
165
- }
166
- rgbeStart[0] = buffer[pos++];
167
- rgbeStart[1] = buffer[pos++];
168
- rgbeStart[2] = buffer[pos++];
169
- rgbeStart[3] = buffer[pos++];
170
- if (2 != rgbeStart[0] ||
171
- 2 != rgbeStart[1] ||
172
- ((rgbeStart[2] << 8) | rgbeStart[3]) != scanline_width) {
173
- return rgbe_error(rgbe_format_error, "bad rgbe scanline format");
174
- }
175
- // read each of the four channels for the scanline into the buffer
176
- // first red, then green, then blue, then exponent
177
- let ptr = 0, count;
178
- while (ptr < ptr_end && pos < buffer.byteLength) {
179
- count = buffer[pos++];
180
- const isEncodedRun = count > 128;
181
- if (isEncodedRun)
182
- count -= 128;
183
- if (0 === count || ptr + count > ptr_end) {
184
- return rgbe_error(rgbe_format_error, "bad scanline data");
185
- }
186
- if (isEncodedRun) {
187
- // a (encoded) run of the same value
188
- const byteValue = buffer[pos++];
189
- for (let i = 0; i < count; i++) {
190
- scanline_buffer[ptr++] = byteValue;
191
- }
192
- //ptr += count;
193
- }
194
- else {
195
- // a literal-run
196
- scanline_buffer.set(buffer.subarray(pos, pos + count), ptr);
197
- ptr += count;
198
- pos += count;
199
- }
200
- }
201
- // now convert data from buffer into rgba
202
- // first red, then green, then blue, then exponent (alpha)
203
- const l = scanline_width; //scanline_buffer.byteLength;
204
- for (let i = 0; i < l; i++) {
205
- let off = 0;
206
- data_rgba[offset] = scanline_buffer[i + off];
207
- off += scanline_width; //1;
208
- data_rgba[offset + 1] = scanline_buffer[i + off];
209
- off += scanline_width; //1;
210
- data_rgba[offset + 2] = scanline_buffer[i + off];
211
- off += scanline_width; //1;
212
- data_rgba[offset + 3] = scanline_buffer[i + off];
213
- offset += 4;
214
- }
215
- num_scanlines--;
216
- }
217
- return data_rgba;
218
- };
219
- const RGBEByteToRGBFloat = function (sourceArray, sourceOffset, destArray, destOffset) {
220
- const e = sourceArray[sourceOffset + 3];
221
- const scale = Math.pow(2.0, e - 128.0) / 255.0;
222
- destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale;
223
- destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale;
224
- destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale;
225
- destArray[destOffset + 3] = 1;
226
- };
227
- const RGBEByteToRGBHalf = function (sourceArray, sourceOffset, destArray, destOffset) {
228
- const e = sourceArray[sourceOffset + 3];
229
- const scale = Math.pow(2.0, e - 128.0) / 255.0;
230
- // clamping to 65504, the maximum representable value in float16
231
- destArray[destOffset + 0] = three_1.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504));
232
- destArray[destOffset + 1] = three_1.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504));
233
- destArray[destOffset + 2] = three_1.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504));
234
- destArray[destOffset + 3] = three_1.DataUtils.toHalfFloat(1);
235
- };
236
- const byteArray = new Uint8Array(buffer);
237
- byteArray.pos = 0;
238
- const rgbe_header_info = RGBE_ReadHeader(byteArray);
239
- if (RGBE_RETURN_FAILURE !== rgbe_header_info) {
240
- const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);
241
- if (RGBE_RETURN_FAILURE !== image_rgba_data) {
242
- let data, format, type;
243
- let numElements;
244
- switch (this.type) {
245
- case three_1.FloatType:
246
- numElements =
247
- image_rgba_data.length / 4;
248
- const floatArray = new Float32Array(numElements * 4);
249
- for (let j = 0; j < numElements; j++) {
250
- RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);
251
- }
252
- data = floatArray;
253
- type = three_1.FloatType;
254
- break;
255
- case three_1.HalfFloatType:
256
- numElements =
257
- image_rgba_data.length / 4;
258
- const halfArray = new Uint16Array(numElements * 4);
259
- for (let j = 0; j < numElements; j++) {
260
- RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);
261
- }
262
- data = halfArray;
263
- type = three_1.HalfFloatType;
264
- break;
265
- default:
266
- console.error("THREE.RGBELoader: unsupported type: ", this.type);
267
- break;
268
- }
269
- return {
270
- width: w,
271
- height: h,
272
- data: data,
273
- header: rgbe_header_info.string,
274
- gamma: rgbe_header_info.gamma,
275
- exposure: rgbe_header_info.exposure,
276
- format: format,
277
- type: type,
278
- };
279
- }
280
- }
281
- return null;
282
- }
283
- setDataType(value) {
284
- this.type = value;
285
- return this;
286
- }
287
- load(url, onLoad, onProgress, onError) {
288
- function onLoadCallback(texture, texData) {
289
- switch (texture.type) {
290
- case three_1.FloatType:
291
- texture.colorSpace = three_1.LinearSRGBColorSpace;
292
- texture.minFilter = three_1.LinearFilter;
293
- texture.magFilter = three_1.LinearFilter;
294
- texture.generateMipmaps = false;
295
- texture.flipY = true;
296
- break;
297
- case three_1.HalfFloatType:
298
- texture.colorSpace = three_1.LinearSRGBColorSpace;
299
- texture.minFilter = three_1.LinearFilter;
300
- texture.magFilter = three_1.LinearFilter;
301
- texture.generateMipmaps = false;
302
- texture.flipY = true;
303
- break;
304
- }
305
- if (onLoad)
306
- onLoad(texture, texData);
307
- }
308
- return super.load(url, onLoadCallback, onProgress, onError);
309
- }
310
- }
311
- exports.RGBELoader = RGBELoader;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RGBELoader = void 0;
4
+ /* eslint-disable no-case-declarations */
5
+ /* eslint-disable no-cond-assign */
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ const three_1 = require("three");
8
+ // https://github.com/mrdoob/three.js/issues/5552
9
+ // http://en.wikipedia.org/wiki/RGBE_image_format
10
+ class RGBELoader extends three_1.DataTextureLoader {
11
+ constructor(manager) {
12
+ super(manager);
13
+ this.type = three_1.HalfFloatType;
14
+ }
15
+ // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html
16
+ parse(buffer) {
17
+ const /* return codes for rgbe routines */
18
+ //RGBE_RETURN_SUCCESS = 0,
19
+ RGBE_RETURN_FAILURE = -1,
20
+ /* default error routine. change this to change error handling */
21
+ rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function (rgbe_error_code, msg) {
22
+ switch (rgbe_error_code) {
23
+ case rgbe_read_error:
24
+ console.error("THREE.RGBELoader Read Error: " + (msg || ""));
25
+ break;
26
+ case rgbe_write_error:
27
+ console.error("THREE.RGBELoader Write Error: " + (msg || ""));
28
+ break;
29
+ case rgbe_format_error:
30
+ console.error("THREE.RGBELoader Bad File Format: " + (msg || ""));
31
+ break;
32
+ default:
33
+ case rgbe_memory_error:
34
+ console.error("THREE.RGBELoader: Error: " + (msg || ""));
35
+ }
36
+ return RGBE_RETURN_FAILURE;
37
+ },
38
+ /* offsets to red, green, and blue components in a data (float) pixel */
39
+ //RGBE_DATA_RED = 0,
40
+ //RGBE_DATA_GREEN = 1,
41
+ //RGBE_DATA_BLUE = 2,
42
+ /* number of floats per pixel, use 4 since stored in rgba image format */
43
+ //RGBE_DATA_SIZE = 4,
44
+ /* flags indicating which fields in an rgbe_header_info are valid */
45
+ RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function (buffer, lineLimit, consume) {
46
+ const chunkSize = 128;
47
+ lineLimit = !lineLimit ? 1024 : lineLimit;
48
+ let p = buffer.pos, i = -1, len = 0, s = "", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)));
49
+ while (0 > (i = chunk.indexOf(NEWLINE)) &&
50
+ len < lineLimit &&
51
+ p < buffer.byteLength) {
52
+ s += chunk;
53
+ len += chunk.length;
54
+ p += chunkSize;
55
+ chunk += String.fromCharCode.apply(null, new Uint16Array(buffer.subarray(p, p + chunkSize)));
56
+ }
57
+ if (-1 < i) {
58
+ /*for (i=l-1; i>=0; i--) {
59
+ byteCode = m.charCodeAt(i);
60
+ if (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;
61
+ else if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;
62
+ if (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate
63
+ }*/
64
+ if (false !== consume)
65
+ buffer.pos += len + i + 1;
66
+ return s + chunk.slice(0, i);
67
+ }
68
+ return false;
69
+ },
70
+ /* minimal header reading. modify if you want to parse more information */
71
+ RGBE_ReadHeader = function (buffer) {
72
+ // regexes to parse header info fields
73
+ const magic_token_re = /^#\?(\S+)/, gamma_re = /^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/, exposure_re = /^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/, format_re = /^\s*FORMAT=(\S+)\s*$/,
74
+ // eslint-disable-next-line no-useless-escape
75
+ dimensions_re = /^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,
76
+ // RGBE format header struct
77
+ header = {
78
+ valid: 0 /* indicate which fields are valid */,
79
+ string: "" /* the actual header string */,
80
+ comments: "" /* comments found in header */,
81
+ programtype: "RGBE" /* listed at beginning of file to identify it after "#?". defaults to "RGBE" */,
82
+ format: "" /* RGBE format, default 32-bit_rle_rgbe */,
83
+ gamma: 1.0 /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */,
84
+ exposure: 1.0 /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */,
85
+ width: 0,
86
+ height: 0 /* image dimensions, width/height */,
87
+ };
88
+ let line, match;
89
+ if (buffer.pos >= buffer.byteLength ||
90
+ !(line = fgets(buffer, undefined, undefined))) {
91
+ return rgbe_error(rgbe_read_error, "no header found");
92
+ }
93
+ /* if you want to require the magic token then uncomment the next line */
94
+ if (!(match = line.match(magic_token_re))) {
95
+ return rgbe_error(rgbe_format_error, "bad initial token");
96
+ }
97
+ header.valid |= RGBE_VALID_PROGRAMTYPE;
98
+ header.programtype = match[1];
99
+ header.string += line + "\n";
100
+ // eslint-disable-next-line no-constant-condition
101
+ while (true) {
102
+ line = fgets(buffer, undefined, undefined);
103
+ if (false === line)
104
+ break;
105
+ header.string += line + "\n";
106
+ if ("#" === line.charAt(0)) {
107
+ header.comments += line + "\n";
108
+ continue; // comment line
109
+ }
110
+ if ((match = line.match(gamma_re))) {
111
+ header.gamma = parseFloat(match[1]);
112
+ }
113
+ if ((match = line.match(exposure_re))) {
114
+ header.exposure = parseFloat(match[1]);
115
+ }
116
+ if ((match = line.match(format_re))) {
117
+ header.valid |= RGBE_VALID_FORMAT;
118
+ header.format = match[1]; //'32-bit_rle_rgbe';
119
+ }
120
+ if ((match = line.match(dimensions_re))) {
121
+ header.valid |= RGBE_VALID_DIMENSIONS;
122
+ header.height = parseInt(match[1], 10);
123
+ header.width = parseInt(match[2], 10);
124
+ }
125
+ if (header.valid & RGBE_VALID_FORMAT &&
126
+ header.valid & RGBE_VALID_DIMENSIONS)
127
+ break;
128
+ }
129
+ if (!(header.valid & RGBE_VALID_FORMAT)) {
130
+ return rgbe_error(rgbe_format_error, "missing format specifier");
131
+ }
132
+ if (!(header.valid & RGBE_VALID_DIMENSIONS)) {
133
+ return rgbe_error(rgbe_format_error, "missing image size specifier");
134
+ }
135
+ return header;
136
+ }, RGBE_ReadPixels_RLE = function (buffer, w, h) {
137
+ const scanline_width = w;
138
+ if (
139
+ // run length encoding is not allowed so read flat
140
+ scanline_width < 8 ||
141
+ scanline_width > 0x7fff ||
142
+ // this file is not run length encoded
143
+ 2 !== buffer[0] ||
144
+ 2 !== buffer[1] ||
145
+ buffer[2] & 0x80) {
146
+ // return the flat buffer
147
+ return new Uint8Array(buffer);
148
+ }
149
+ if (scanline_width !== ((buffer[2] << 8) | buffer[3])) {
150
+ return rgbe_error(rgbe_format_error, "wrong scanline width");
151
+ }
152
+ const data_rgba = new Uint8Array(4 * w * h);
153
+ if (!data_rgba.length) {
154
+ return rgbe_error(rgbe_memory_error, "unable to allocate buffer space");
155
+ }
156
+ let offset = 0, pos = 0;
157
+ const ptr_end = 4 * scanline_width;
158
+ const rgbeStart = new Uint8Array(4);
159
+ const scanline_buffer = new Uint8Array(ptr_end);
160
+ let num_scanlines = h;
161
+ // read in each successive scanline
162
+ while (num_scanlines > 0 && pos < buffer.byteLength) {
163
+ if (pos + 4 > buffer.byteLength) {
164
+ return rgbe_error(rgbe_read_error, undefined);
165
+ }
166
+ rgbeStart[0] = buffer[pos++];
167
+ rgbeStart[1] = buffer[pos++];
168
+ rgbeStart[2] = buffer[pos++];
169
+ rgbeStart[3] = buffer[pos++];
170
+ if (2 != rgbeStart[0] ||
171
+ 2 != rgbeStart[1] ||
172
+ ((rgbeStart[2] << 8) | rgbeStart[3]) != scanline_width) {
173
+ return rgbe_error(rgbe_format_error, "bad rgbe scanline format");
174
+ }
175
+ // read each of the four channels for the scanline into the buffer
176
+ // first red, then green, then blue, then exponent
177
+ let ptr = 0, count;
178
+ while (ptr < ptr_end && pos < buffer.byteLength) {
179
+ count = buffer[pos++];
180
+ const isEncodedRun = count > 128;
181
+ if (isEncodedRun)
182
+ count -= 128;
183
+ if (0 === count || ptr + count > ptr_end) {
184
+ return rgbe_error(rgbe_format_error, "bad scanline data");
185
+ }
186
+ if (isEncodedRun) {
187
+ // a (encoded) run of the same value
188
+ const byteValue = buffer[pos++];
189
+ for (let i = 0; i < count; i++) {
190
+ scanline_buffer[ptr++] = byteValue;
191
+ }
192
+ //ptr += count;
193
+ }
194
+ else {
195
+ // a literal-run
196
+ scanline_buffer.set(buffer.subarray(pos, pos + count), ptr);
197
+ ptr += count;
198
+ pos += count;
199
+ }
200
+ }
201
+ // now convert data from buffer into rgba
202
+ // first red, then green, then blue, then exponent (alpha)
203
+ const l = scanline_width; //scanline_buffer.byteLength;
204
+ for (let i = 0; i < l; i++) {
205
+ let off = 0;
206
+ data_rgba[offset] = scanline_buffer[i + off];
207
+ off += scanline_width; //1;
208
+ data_rgba[offset + 1] = scanline_buffer[i + off];
209
+ off += scanline_width; //1;
210
+ data_rgba[offset + 2] = scanline_buffer[i + off];
211
+ off += scanline_width; //1;
212
+ data_rgba[offset + 3] = scanline_buffer[i + off];
213
+ offset += 4;
214
+ }
215
+ num_scanlines--;
216
+ }
217
+ return data_rgba;
218
+ };
219
+ const RGBEByteToRGBFloat = function (sourceArray, sourceOffset, destArray, destOffset) {
220
+ const e = sourceArray[sourceOffset + 3];
221
+ const scale = Math.pow(2.0, e - 128.0) / 255.0;
222
+ destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale;
223
+ destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale;
224
+ destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale;
225
+ destArray[destOffset + 3] = 1;
226
+ };
227
+ const RGBEByteToRGBHalf = function (sourceArray, sourceOffset, destArray, destOffset) {
228
+ const e = sourceArray[sourceOffset + 3];
229
+ const scale = Math.pow(2.0, e - 128.0) / 255.0;
230
+ // clamping to 65504, the maximum representable value in float16
231
+ destArray[destOffset + 0] = three_1.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504));
232
+ destArray[destOffset + 1] = three_1.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504));
233
+ destArray[destOffset + 2] = three_1.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504));
234
+ destArray[destOffset + 3] = three_1.DataUtils.toHalfFloat(1);
235
+ };
236
+ const byteArray = new Uint8Array(buffer);
237
+ byteArray.pos = 0;
238
+ const rgbe_header_info = RGBE_ReadHeader(byteArray);
239
+ if (RGBE_RETURN_FAILURE !== rgbe_header_info) {
240
+ const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);
241
+ if (RGBE_RETURN_FAILURE !== image_rgba_data) {
242
+ let data, format, type;
243
+ let numElements;
244
+ switch (this.type) {
245
+ case three_1.FloatType:
246
+ numElements =
247
+ image_rgba_data.length / 4;
248
+ const floatArray = new Float32Array(numElements * 4);
249
+ for (let j = 0; j < numElements; j++) {
250
+ RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);
251
+ }
252
+ data = floatArray;
253
+ type = three_1.FloatType;
254
+ break;
255
+ case three_1.HalfFloatType:
256
+ numElements =
257
+ image_rgba_data.length / 4;
258
+ const halfArray = new Uint16Array(numElements * 4);
259
+ for (let j = 0; j < numElements; j++) {
260
+ RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);
261
+ }
262
+ data = halfArray;
263
+ type = three_1.HalfFloatType;
264
+ break;
265
+ default:
266
+ console.error("THREE.RGBELoader: unsupported type: ", this.type);
267
+ break;
268
+ }
269
+ return {
270
+ width: w,
271
+ height: h,
272
+ data: data,
273
+ header: rgbe_header_info.string,
274
+ gamma: rgbe_header_info.gamma,
275
+ exposure: rgbe_header_info.exposure,
276
+ format: format,
277
+ type: type,
278
+ };
279
+ }
280
+ }
281
+ return null;
282
+ }
283
+ setDataType(value) {
284
+ this.type = value;
285
+ return this;
286
+ }
287
+ load(url, onLoad, onProgress, onError) {
288
+ function onLoadCallback(texture, texData) {
289
+ switch (texture.type) {
290
+ case three_1.FloatType:
291
+ texture.colorSpace = three_1.LinearSRGBColorSpace;
292
+ texture.minFilter = three_1.LinearFilter;
293
+ texture.magFilter = three_1.LinearFilter;
294
+ texture.generateMipmaps = false;
295
+ texture.flipY = true;
296
+ break;
297
+ case three_1.HalfFloatType:
298
+ texture.colorSpace = three_1.LinearSRGBColorSpace;
299
+ texture.minFilter = three_1.LinearFilter;
300
+ texture.magFilter = three_1.LinearFilter;
301
+ texture.generateMipmaps = false;
302
+ texture.flipY = true;
303
+ break;
304
+ }
305
+ if (onLoad)
306
+ onLoad(texture, texData);
307
+ }
308
+ return super.load(url, onLoadCallback, onProgress, onError);
309
+ }
310
+ }
311
+ exports.RGBELoader = RGBELoader;
312
312
  //# sourceMappingURL=RGBELoader.js.map