@babylonjs/core 7.21.4 → 7.22.0

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 (146) hide show
  1. package/Audio/analyser.js +3 -3
  2. package/Audio/analyser.js.map +1 -1
  3. package/Audio/audioSceneComponent.js +7 -7
  4. package/Audio/audioSceneComponent.js.map +1 -1
  5. package/Audio/sound.js +55 -50
  6. package/Audio/sound.js.map +1 -1
  7. package/Audio/soundTrack.js +11 -11
  8. package/Audio/soundTrack.js.map +1 -1
  9. package/Cameras/flyCamera.js +2 -2
  10. package/Cameras/flyCamera.js.map +1 -1
  11. package/Cameras/freeCamera.js +2 -2
  12. package/Cameras/freeCamera.js.map +1 -1
  13. package/Collisions/collisionCoordinator.js +2 -2
  14. package/Collisions/collisionCoordinator.js.map +1 -1
  15. package/Debug/debugLayer.js +2 -2
  16. package/Debug/debugLayer.js.map +1 -1
  17. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +25 -28
  18. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
  19. package/Engines/abstractEngine.d.ts +18 -3
  20. package/Engines/abstractEngine.js +32 -13
  21. package/Engines/abstractEngine.js.map +1 -1
  22. package/Engines/engine.d.ts +0 -7
  23. package/Engines/engine.js +0 -13
  24. package/Engines/engine.js.map +1 -1
  25. package/Engines/nativeEngine.js +3 -9
  26. package/Engines/nativeEngine.js.map +1 -1
  27. package/Engines/thinEngine.d.ts +0 -37
  28. package/Engines/thinEngine.js +2 -40
  29. package/Engines/thinEngine.js.map +1 -1
  30. package/Engines/webgpuEngine.js +1 -2
  31. package/Engines/webgpuEngine.js.map +1 -1
  32. package/Gamepads/gamepadManager.js +2 -2
  33. package/Gamepads/gamepadManager.js.map +1 -1
  34. package/Loading/sceneLoader.d.ts +2 -2
  35. package/Loading/sceneLoader.js +3 -3
  36. package/Loading/sceneLoader.js.map +1 -1
  37. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
  38. package/Materials/Textures/Loaders/EXR/exrLoader.compression.d.ts +31 -0
  39. package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.d.ts +9 -0
  40. package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js +454 -0
  41. package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js.map +1 -0
  42. package/Materials/Textures/Loaders/EXR/exrLoader.compression.js +147 -0
  43. package/Materials/Textures/Loaders/EXR/exrLoader.compression.js.map +1 -0
  44. package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.d.ts +7 -0
  45. package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js +91 -0
  46. package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js.map +1 -0
  47. package/Materials/Textures/Loaders/EXR/exrLoader.configuration.d.ts +17 -0
  48. package/Materials/Textures/Loaders/EXR/exrLoader.configuration.js +19 -0
  49. package/Materials/Textures/Loaders/EXR/exrLoader.configuration.js.map +1 -0
  50. package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +130 -0
  51. package/Materials/Textures/Loaders/EXR/exrLoader.core.js +452 -0
  52. package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -0
  53. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.d.ts +25 -0
  54. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +284 -0
  55. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -0
  56. package/Materials/Textures/Loaders/EXR/exrLoader.header.d.ts +9 -0
  57. package/Materials/Textures/Loaders/EXR/exrLoader.header.js +112 -0
  58. package/Materials/Textures/Loaders/EXR/exrLoader.header.js.map +1 -0
  59. package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.d.ts +75 -0
  60. package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js +16 -0
  61. package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js.map +1 -0
  62. package/Materials/Textures/Loaders/EXR/index.d.ts +7 -0
  63. package/Materials/Textures/Loaders/EXR/index.js +8 -0
  64. package/Materials/Textures/Loaders/EXR/index.js.map +1 -0
  65. package/Materials/Textures/Loaders/basisTextureLoader.d.ts +1 -7
  66. package/Materials/Textures/Loaders/basisTextureLoader.js +0 -11
  67. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  68. package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +1 -7
  69. package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -11
  70. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  71. package/Materials/Textures/Loaders/envTextureLoader.d.ts +1 -7
  72. package/Materials/Textures/Loaders/envTextureLoader.js +0 -11
  73. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  74. package/Materials/Textures/Loaders/exrTextureLoader.d.ts +37 -0
  75. package/Materials/Textures/Loaders/exrTextureLoader.js +122 -0
  76. package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -0
  77. package/Materials/Textures/Loaders/hdrTextureLoader.d.ts +1 -7
  78. package/Materials/Textures/Loaders/hdrTextureLoader.js +0 -11
  79. package/Materials/Textures/Loaders/hdrTextureLoader.js.map +1 -1
  80. package/Materials/Textures/Loaders/index.d.ts +4 -0
  81. package/Materials/Textures/Loaders/index.js +5 -0
  82. package/Materials/Textures/Loaders/index.js.map +1 -1
  83. package/Materials/Textures/{internalTextureLoader.d.ts → Loaders/internalTextureLoader.d.ts} +2 -9
  84. package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -0
  85. package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +1 -8
  86. package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -13
  87. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  88. package/Materials/Textures/Loaders/textureLoaderManager.d.ts +9 -0
  89. package/Materials/Textures/Loaders/textureLoaderManager.js +32 -0
  90. package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -0
  91. package/Materials/Textures/Loaders/tgaTextureLoader.d.ts +1 -7
  92. package/Materials/Textures/Loaders/tgaTextureLoader.js +0 -11
  93. package/Materials/Textures/Loaders/tgaTextureLoader.js.map +1 -1
  94. package/Materials/Textures/Packer/packer.js +2 -2
  95. package/Materials/Textures/Packer/packer.js.map +1 -1
  96. package/Materials/Textures/index.d.ts +0 -1
  97. package/Materials/Textures/index.js +0 -1
  98. package/Materials/Textures/index.js.map +1 -1
  99. package/Materials/fresnelParameters.js +2 -2
  100. package/Materials/fresnelParameters.js.map +1 -1
  101. package/Materials/materialFlags.js +24 -24
  102. package/Materials/materialFlags.js.map +1 -1
  103. package/Meshes/Node/nodeGeometry.js +2 -2
  104. package/Meshes/Node/nodeGeometry.js.map +1 -1
  105. package/Meshes/abstractMesh.js +2 -2
  106. package/Meshes/abstractMesh.js.map +1 -1
  107. package/Misc/fileTools.d.ts +13 -0
  108. package/Misc/fileTools.js +16 -0
  109. package/Misc/fileTools.js.map +1 -1
  110. package/Offline/database.js +2 -2
  111. package/Offline/database.js.map +1 -1
  112. package/Rendering/boundingBoxRenderer.d.ts +2 -2
  113. package/Rendering/boundingBoxRenderer.js +2 -2
  114. package/Rendering/boundingBoxRenderer.js.map +1 -1
  115. package/Rendering/edgesRenderer.d.ts +7 -2
  116. package/Rendering/edgesRenderer.js +23 -6
  117. package/Rendering/edgesRenderer.js.map +1 -1
  118. package/Rendering/index.d.ts +12 -4
  119. package/Rendering/index.js +14 -4
  120. package/Rendering/index.js.map +1 -1
  121. package/Rendering/outlineRenderer.d.ts +7 -2
  122. package/Rendering/outlineRenderer.js +64 -11
  123. package/Rendering/outlineRenderer.js.map +1 -1
  124. package/ShadersWGSL/line.fragment.d.ts +9 -0
  125. package/ShadersWGSL/line.fragment.js +24 -0
  126. package/ShadersWGSL/line.fragment.js.map +1 -0
  127. package/ShadersWGSL/line.vertex.d.ts +13 -0
  128. package/ShadersWGSL/line.vertex.js +36 -0
  129. package/ShadersWGSL/line.vertex.js.map +1 -0
  130. package/ShadersWGSL/outline.fragment.d.ts +9 -0
  131. package/ShadersWGSL/outline.fragment.js +30 -0
  132. package/ShadersWGSL/outline.fragment.js.map +1 -0
  133. package/ShadersWGSL/outline.vertex.d.ts +19 -0
  134. package/ShadersWGSL/outline.vertex.js +66 -0
  135. package/ShadersWGSL/outline.vertex.js.map +1 -0
  136. package/Sprites/spriteMap.js +4 -4
  137. package/Sprites/spriteMap.js.map +1 -1
  138. package/XR/features/WebXRDepthSensing.js +2 -3
  139. package/XR/features/WebXRDepthSensing.js.map +1 -1
  140. package/XR/webXRExperienceHelper.js +2 -2
  141. package/XR/webXRExperienceHelper.js.map +1 -1
  142. package/package.json +1 -1
  143. package/scene.js +2 -3
  144. package/scene.js.map +1 -1
  145. package/Materials/Textures/internalTextureLoader.js.map +0 -1
  146. /package/Materials/Textures/{internalTextureLoader.js → Loaders/internalTextureLoader.js} +0 -0
@@ -0,0 +1,452 @@
1
+ import { Clamp } from "../../../../Maths/math.scalar.functions.js";
2
+ import { FLOAT32_SIZE, INT16_SIZE, INT32_SIZE, INT8_SIZE, ULONG_SIZE } from "./exrLoader.interfaces.js";
3
+ /**
4
+ * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js
5
+ * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita
6
+ * implementation.
7
+ */
8
+ // /*
9
+ // Copyright (c) 2014 - 2017, Syoyo Fujita
10
+ // All rights reserved.
11
+ // Redistribution and use in source and binary forms, with or without
12
+ // modification, are permitted provided that the following conditions are met:
13
+ // * Redistributions of source code must retain the above copyright
14
+ // notice, this list of conditions and the following disclaimer.
15
+ // * Redistributions in binary form must reproduce the above copyright
16
+ // notice, this list of conditions and the following disclaimer in the
17
+ // documentation and/or other materials provided with the distribution.
18
+ // * Neither the name of the Syoyo Fujita nor the
19
+ // names of its contributors may be used to endorse or promote products
20
+ // derived from this software without specific prior written permission.
21
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
22
+ // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23
+ // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
+ // DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
25
+ // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26
+ // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27
+ // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28
+ // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
+ // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ // */
32
+ // // TinyEXR contains some OpenEXR code, which is licensed under ------------
33
+ // ///////////////////////////////////////////////////////////////////////////
34
+ // //
35
+ // // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
36
+ // // Digital Ltd. LLC
37
+ // //
38
+ // // All rights reserved.
39
+ // //
40
+ // // Redistribution and use in source and binary forms, with or without
41
+ // // modification, are permitted provided that the following conditions are
42
+ // // met:
43
+ // // * Redistributions of source code must retain the above copyright
44
+ // // notice, this list of conditions and the following disclaimer.
45
+ // // * Redistributions in binary form must reproduce the above
46
+ // // copyright notice, this list of conditions and the following disclaimer
47
+ // // in the documentation and/or other materials provided with the
48
+ // // distribution.
49
+ // // * Neither the name of Industrial Light & Magic nor the names of
50
+ // // its contributors may be used to endorse or promote products derived
51
+ // // from this software without specific prior written permission.
52
+ // //
53
+ // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
54
+ // // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
55
+ // // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
56
+ // // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
57
+ // // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
58
+ // // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
59
+ // // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
60
+ // // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
61
+ // // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
62
+ // // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
63
+ // // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
64
+ // //
65
+ // ///////////////////////////////////////////////////////////////////////////
66
+ // // End of OpenEXR license -------------------------------------------------
67
+ export var CompressionCodes;
68
+ (function (CompressionCodes) {
69
+ CompressionCodes[CompressionCodes["NO_COMPRESSION"] = 0] = "NO_COMPRESSION";
70
+ CompressionCodes[CompressionCodes["RLE_COMPRESSION"] = 1] = "RLE_COMPRESSION";
71
+ CompressionCodes[CompressionCodes["ZIPS_COMPRESSION"] = 2] = "ZIPS_COMPRESSION";
72
+ CompressionCodes[CompressionCodes["ZIP_COMPRESSION"] = 3] = "ZIP_COMPRESSION";
73
+ CompressionCodes[CompressionCodes["PIZ_COMPRESSION"] = 4] = "PIZ_COMPRESSION";
74
+ CompressionCodes[CompressionCodes["PXR24_COMPRESSION"] = 5] = "PXR24_COMPRESSION";
75
+ })(CompressionCodes || (CompressionCodes = {}));
76
+ var LineOrders;
77
+ (function (LineOrders) {
78
+ LineOrders[LineOrders["INCREASING_Y"] = 0] = "INCREASING_Y";
79
+ LineOrders[LineOrders["DECREASING_Y"] = 1] = "DECREASING_Y";
80
+ })(LineOrders || (LineOrders = {}));
81
+ const _tables = _GenerateTables();
82
+ // Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
83
+ function _GenerateTables() {
84
+ // float32 to float16 helpers
85
+ const buffer = new ArrayBuffer(4);
86
+ const floatView = new Float32Array(buffer);
87
+ const uint32View = new Uint32Array(buffer);
88
+ const baseTable = new Uint32Array(512);
89
+ const shiftTable = new Uint32Array(512);
90
+ for (let i = 0; i < 256; ++i) {
91
+ const e = i - 127;
92
+ // very small number (0, -0)
93
+ if (e < -27) {
94
+ baseTable[i] = 0x0000;
95
+ baseTable[i | 0x100] = 0x8000;
96
+ shiftTable[i] = 24;
97
+ shiftTable[i | 0x100] = 24;
98
+ // small number (denorm)
99
+ }
100
+ else if (e < -14) {
101
+ baseTable[i] = 0x0400 >> (-e - 14);
102
+ baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000;
103
+ shiftTable[i] = -e - 1;
104
+ shiftTable[i | 0x100] = -e - 1;
105
+ // normal number
106
+ }
107
+ else if (e <= 15) {
108
+ baseTable[i] = (e + 15) << 10;
109
+ baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000;
110
+ shiftTable[i] = 13;
111
+ shiftTable[i | 0x100] = 13;
112
+ // large number (Infinity, -Infinity)
113
+ }
114
+ else if (e < 128) {
115
+ baseTable[i] = 0x7c00;
116
+ baseTable[i | 0x100] = 0xfc00;
117
+ shiftTable[i] = 24;
118
+ shiftTable[i | 0x100] = 24;
119
+ // stay (NaN, Infinity, -Infinity)
120
+ }
121
+ else {
122
+ baseTable[i] = 0x7c00;
123
+ baseTable[i | 0x100] = 0xfc00;
124
+ shiftTable[i] = 13;
125
+ shiftTable[i | 0x100] = 13;
126
+ }
127
+ }
128
+ // float16 to float32 helpers
129
+ const mantissaTable = new Uint32Array(2048);
130
+ const exponentTable = new Uint32Array(64);
131
+ const offsetTable = new Uint32Array(64);
132
+ for (let i = 1; i < 1024; ++i) {
133
+ let m = i << 13; // zero pad mantissa bits
134
+ let e = 0; // zero exponent
135
+ // normalized
136
+ while ((m & 0x00800000) === 0) {
137
+ m <<= 1;
138
+ e -= 0x00800000; // decrement exponent
139
+ }
140
+ m &= ~0x00800000; // clear leading 1 bit
141
+ e += 0x38800000; // adjust bias
142
+ mantissaTable[i] = m | e;
143
+ }
144
+ for (let i = 1024; i < 2048; ++i) {
145
+ mantissaTable[i] = 0x38000000 + ((i - 1024) << 13);
146
+ }
147
+ for (let i = 1; i < 31; ++i) {
148
+ exponentTable[i] = i << 23;
149
+ }
150
+ exponentTable[31] = 0x47800000;
151
+ exponentTable[32] = 0x80000000;
152
+ for (let i = 33; i < 63; ++i) {
153
+ exponentTable[i] = 0x80000000 + ((i - 32) << 23);
154
+ }
155
+ exponentTable[63] = 0xc7800000;
156
+ for (let i = 1; i < 64; ++i) {
157
+ if (i !== 32) {
158
+ offsetTable[i] = 1024;
159
+ }
160
+ }
161
+ return {
162
+ floatView: floatView,
163
+ uint32View: uint32View,
164
+ baseTable: baseTable,
165
+ shiftTable: shiftTable,
166
+ mantissaTable: mantissaTable,
167
+ exponentTable: exponentTable,
168
+ offsetTable: offsetTable,
169
+ };
170
+ }
171
+ /**
172
+ * Parse a null terminated string from the buffer
173
+ * @param buffer buffer to read from
174
+ * @param offset current offset in the buffer
175
+ * @returns a string
176
+ */
177
+ export function ParseNullTerminatedString(buffer, offset) {
178
+ const uintBuffer = new Uint8Array(buffer);
179
+ let endOffset = 0;
180
+ while (uintBuffer[offset.value + endOffset] != 0) {
181
+ endOffset += 1;
182
+ }
183
+ const stringValue = new TextDecoder().decode(uintBuffer.slice(offset.value, offset.value + endOffset));
184
+ offset.value = offset.value + endOffset + 1;
185
+ return stringValue;
186
+ }
187
+ /**
188
+ * Parse an int32 from the buffer
189
+ * @param dataView dataview on the data
190
+ * @param offset current offset in the data view
191
+ * @returns an int32
192
+ */
193
+ export function ParseInt32(dataView, offset) {
194
+ const value = dataView.getInt32(offset.value, true);
195
+ offset.value += INT32_SIZE;
196
+ return value;
197
+ }
198
+ /**
199
+ * Parse an uint32 from the buffer
200
+ * @param dataView data view to read from
201
+ * @param offset offset in the data view
202
+ * @returns an uint32
203
+ */
204
+ export function ParseUint32(dataView, offset) {
205
+ const value = dataView.getUint32(offset.value, true);
206
+ offset.value += INT32_SIZE;
207
+ return value;
208
+ }
209
+ /**
210
+ * Parse an uint8 from the buffer
211
+ * @param dataView dataview on the data
212
+ * @param offset current offset in the data view
213
+ * @returns an uint8
214
+ */
215
+ export function ParseUint8(dataView, offset) {
216
+ const value = dataView.getUint8(offset.value);
217
+ offset.value += INT8_SIZE;
218
+ return value;
219
+ }
220
+ /**
221
+ * Parse an uint16 from the buffer
222
+ * @param dataView dataview on the data
223
+ * @param offset current offset in the data view
224
+ * @returns an uint16
225
+ */
226
+ export function ParseUint16(dataView, offset) {
227
+ const value = dataView.getUint16(offset.value, true);
228
+ offset.value += INT16_SIZE;
229
+ return value;
230
+ }
231
+ /**
232
+ * Parse an uint8 from an array buffer
233
+ * @param array array buffer
234
+ * @param offset current offset in the data view
235
+ * @returns an uint16
236
+ */
237
+ export function ParseUint8Array(array, offset) {
238
+ const value = array[offset.value];
239
+ offset.value += INT8_SIZE;
240
+ return value;
241
+ }
242
+ /**
243
+ * Parse an int64 from the buffer
244
+ * @param dataView dataview on the data
245
+ * @param offset current offset in the data view
246
+ * @returns an int64
247
+ */
248
+ export function ParseInt64(dataView, offset) {
249
+ let int;
250
+ if ("getBigInt64" in DataView.prototype) {
251
+ int = Number(dataView.getBigInt64(offset.value, true));
252
+ }
253
+ else {
254
+ int = dataView.getUint32(offset.value + 4, true) + Number(dataView.getUint32(offset.value, true) << 32);
255
+ }
256
+ offset.value += ULONG_SIZE;
257
+ return int;
258
+ }
259
+ /**
260
+ * Parse a float32 from the buffer
261
+ * @param dataView dataview on the data
262
+ * @param offset current offset in the data view
263
+ * @returns a float32
264
+ */
265
+ export function ParseFloat32(dataView, offset) {
266
+ const value = dataView.getFloat32(offset.value, true);
267
+ offset.value += FLOAT32_SIZE;
268
+ return value;
269
+ }
270
+ /**
271
+ * Parse a float16 from the buffer
272
+ * @param dataView dataview on the data
273
+ * @param offset current offset in the data view
274
+ * @returns a float16
275
+ */
276
+ export function ParseFloat16(dataView, offset) {
277
+ return DecodeFloat16(ParseUint16(dataView, offset));
278
+ }
279
+ function DecodeFloat16(binary) {
280
+ const exponent = (binary & 0x7c00) >> 10;
281
+ const fraction = binary & 0x03ff;
282
+ return ((binary >> 15 ? -1 : 1) *
283
+ (exponent ? (exponent === 0x1f ? (fraction ? NaN : Infinity) : Math.pow(2, exponent - 15) * (1 + fraction / 0x400)) : 6.103515625e-5 * (fraction / 0x400)));
284
+ }
285
+ function ToHalfFloat(value) {
286
+ if (Math.abs(value) > 65504) {
287
+ throw new Error("Value out of range.Consider using float instead of half-float.");
288
+ }
289
+ value = Clamp(value, -65504, 65504);
290
+ _tables.floatView[0] = value;
291
+ const f = _tables.uint32View[0];
292
+ const e = (f >> 23) & 0x1ff;
293
+ return _tables.baseTable[e] + ((f & 0x007fffff) >> _tables.shiftTable[e]);
294
+ }
295
+ /**
296
+ * Decode a float32 from the buffer
297
+ * @param dataView dataview on the data
298
+ * @param offset current offset in the data view
299
+ * @returns a float32
300
+ */
301
+ export function DecodeFloat32(dataView, offset) {
302
+ return ToHalfFloat(ParseFloat32(dataView, offset));
303
+ }
304
+ function ParseFixedLengthString(buffer, offset, size) {
305
+ const stringValue = new TextDecoder().decode(new Uint8Array(buffer).slice(offset.value, offset.value + size));
306
+ offset.value = offset.value + size;
307
+ return stringValue;
308
+ }
309
+ function ParseRational(dataView, offset) {
310
+ const x = ParseInt32(dataView, offset);
311
+ const y = ParseUint32(dataView, offset);
312
+ return [x, y];
313
+ }
314
+ function ParseTimecode(dataView, offset) {
315
+ const x = ParseUint32(dataView, offset);
316
+ const y = ParseUint32(dataView, offset);
317
+ return [x, y];
318
+ }
319
+ function ParseV2f(dataView, offset) {
320
+ const x = ParseFloat32(dataView, offset);
321
+ const y = ParseFloat32(dataView, offset);
322
+ return [x, y];
323
+ }
324
+ function ParseV3f(dataView, offset) {
325
+ const x = ParseFloat32(dataView, offset);
326
+ const y = ParseFloat32(dataView, offset);
327
+ const z = ParseFloat32(dataView, offset);
328
+ return [x, y, z];
329
+ }
330
+ function ParseChlist(dataView, offset, size) {
331
+ const startOffset = offset.value;
332
+ const channels = [];
333
+ while (offset.value < startOffset + size - 1) {
334
+ const name = ParseNullTerminatedString(dataView.buffer, offset);
335
+ const pixelType = ParseInt32(dataView, offset);
336
+ const pLinear = ParseUint8(dataView, offset);
337
+ offset.value += 3; // reserved, three chars
338
+ const xSampling = ParseInt32(dataView, offset);
339
+ const ySampling = ParseInt32(dataView, offset);
340
+ channels.push({
341
+ name: name,
342
+ pixelType: pixelType,
343
+ pLinear: pLinear,
344
+ xSampling: xSampling,
345
+ ySampling: ySampling,
346
+ });
347
+ }
348
+ offset.value += 1;
349
+ return channels;
350
+ }
351
+ function ParseChromaticities(dataView, offset) {
352
+ const redX = ParseFloat32(dataView, offset);
353
+ const redY = ParseFloat32(dataView, offset);
354
+ const greenX = ParseFloat32(dataView, offset);
355
+ const greenY = ParseFloat32(dataView, offset);
356
+ const blueX = ParseFloat32(dataView, offset);
357
+ const blueY = ParseFloat32(dataView, offset);
358
+ const whiteX = ParseFloat32(dataView, offset);
359
+ const whiteY = ParseFloat32(dataView, offset);
360
+ return { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };
361
+ }
362
+ function ParseCompression(dataView, offset) {
363
+ return ParseUint8(dataView, offset);
364
+ }
365
+ function ParseBox2i(dataView, offset) {
366
+ const xMin = ParseInt32(dataView, offset);
367
+ const yMin = ParseInt32(dataView, offset);
368
+ const xMax = ParseInt32(dataView, offset);
369
+ const yMax = ParseInt32(dataView, offset);
370
+ return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };
371
+ }
372
+ function ParseLineOrder(dataView, offset) {
373
+ const lineOrder = ParseUint8(dataView, offset);
374
+ return LineOrders[lineOrder];
375
+ }
376
+ /**
377
+ * Parse a value from the data view
378
+ * @param dataView defines the data view to read from
379
+ * @param offset defines the current offset in the data view
380
+ * @param type defines the type of the value to read
381
+ * @param size defines the size of the value to read
382
+ * @returns the parsed value
383
+ */
384
+ export function ParseValue(dataView, offset, type, size) {
385
+ switch (type) {
386
+ case "string":
387
+ case "stringvector":
388
+ case "iccProfile":
389
+ return ParseFixedLengthString(dataView.buffer, offset, size);
390
+ case "chlist":
391
+ return ParseChlist(dataView, offset, size);
392
+ case "chromaticities":
393
+ return ParseChromaticities(dataView, offset);
394
+ case "compression":
395
+ return ParseCompression(dataView, offset);
396
+ case "box2i":
397
+ return ParseBox2i(dataView, offset);
398
+ case "lineOrder":
399
+ return ParseLineOrder(dataView, offset);
400
+ case "float":
401
+ return ParseFloat32(dataView, offset);
402
+ case "v2f":
403
+ return ParseV2f(dataView, offset);
404
+ case "v3f":
405
+ return ParseV3f(dataView, offset);
406
+ case "int":
407
+ return ParseInt32(dataView, offset);
408
+ case "rational":
409
+ return ParseRational(dataView, offset);
410
+ case "timecode":
411
+ return ParseTimecode(dataView, offset);
412
+ case "preview":
413
+ offset.value += size;
414
+ return "skipped";
415
+ default:
416
+ offset.value += size;
417
+ return undefined;
418
+ }
419
+ }
420
+ /**
421
+ * Revert the endianness of the data
422
+ * @param source defines the source
423
+ */
424
+ export function Predictor(source) {
425
+ for (let t = 1; t < source.length; t++) {
426
+ const d = source[t - 1] + source[t] - 128;
427
+ source[t] = d;
428
+ }
429
+ }
430
+ /**
431
+ * Interleave pixels
432
+ * @param source defines the data source
433
+ * @param out defines the output
434
+ */
435
+ export function InterleaveScalar(source, out) {
436
+ let t1 = 0;
437
+ let t2 = Math.floor((source.length + 1) / 2);
438
+ let s = 0;
439
+ const stop = source.length - 1;
440
+ // eslint-disable-next-line no-constant-condition
441
+ while (true) {
442
+ if (s > stop) {
443
+ break;
444
+ }
445
+ out[s++] = source[t1++];
446
+ if (s > stop) {
447
+ break;
448
+ }
449
+ out[s++] = source[t2++];
450
+ }
451
+ }
452
+ //# sourceMappingURL=exrLoader.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exrLoader.core.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Textures/Loaders/EXR/exrLoader.core.ts"],"names":[],"mappings":"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","sourcesContent":["import { Clamp } from \"core/Maths/math.scalar.functions\";\r\nimport { FLOAT32_SIZE, INT16_SIZE, INT32_SIZE, INT8_SIZE, ULONG_SIZE } from \"./exrLoader.interfaces\";\r\n\r\n/**\r\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\r\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\r\n * implementation.\r\n */\r\n\r\n// /*\r\n// Copyright (c) 2014 - 2017, Syoyo Fujita\r\n// All rights reserved.\r\n\r\n// Redistribution and use in source and binary forms, with or without\r\n// modification, are permitted provided that the following conditions are met:\r\n// * Redistributions of source code must retain the above copyright\r\n// notice, this list of conditions and the following disclaimer.\r\n// * Redistributions in binary form must reproduce the above copyright\r\n// notice, this list of conditions and the following disclaimer in the\r\n// documentation and/or other materials provided with the distribution.\r\n// * Neither the name of the Syoyo Fujita nor the\r\n// names of its contributors may be used to endorse or promote products\r\n// derived from this software without specific prior written permission.\r\n\r\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\r\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// */\r\n\r\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\r\n\r\n// ///////////////////////////////////////////////////////////////////////////\r\n// //\r\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\r\n// // Digital Ltd. LLC\r\n// //\r\n// // All rights reserved.\r\n// //\r\n// // Redistribution and use in source and binary forms, with or without\r\n// // modification, are permitted provided that the following conditions are\r\n// // met:\r\n// // * Redistributions of source code must retain the above copyright\r\n// // notice, this list of conditions and the following disclaimer.\r\n// // * Redistributions in binary form must reproduce the above\r\n// // copyright notice, this list of conditions and the following disclaimer\r\n// // in the documentation and/or other materials provided with the\r\n// // distribution.\r\n// // * Neither the name of Industrial Light & Magic nor the names of\r\n// // its contributors may be used to endorse or promote products derived\r\n// // from this software without specific prior written permission.\r\n// //\r\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n// //\r\n// ///////////////////////////////////////////////////////////////////////////\r\n\r\n// // End of OpenEXR license -------------------------------------------------\r\n\r\nexport enum CompressionCodes {\r\n NO_COMPRESSION,\r\n RLE_COMPRESSION,\r\n ZIPS_COMPRESSION,\r\n ZIP_COMPRESSION,\r\n PIZ_COMPRESSION,\r\n PXR24_COMPRESSION,\r\n}\r\n\r\nenum LineOrders {\r\n INCREASING_Y,\r\n DECREASING_Y,\r\n}\r\n\r\n/**\r\n * Interface used to define the cursor position in the data\r\n */\r\nexport interface DataCursor {\r\n /** Curosr position */\r\n value: number;\r\n}\r\n\r\nconst _tables = _GenerateTables();\r\n\r\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\r\nfunction _GenerateTables() {\r\n // float32 to float16 helpers\r\n\r\n const buffer = new ArrayBuffer(4);\r\n const floatView = new Float32Array(buffer);\r\n const uint32View = new Uint32Array(buffer);\r\n\r\n const baseTable = new Uint32Array(512);\r\n const shiftTable = new Uint32Array(512);\r\n\r\n for (let i = 0; i < 256; ++i) {\r\n const e = i - 127;\r\n\r\n // very small number (0, -0)\r\n\r\n if (e < -27) {\r\n baseTable[i] = 0x0000;\r\n baseTable[i | 0x100] = 0x8000;\r\n shiftTable[i] = 24;\r\n shiftTable[i | 0x100] = 24;\r\n\r\n // small number (denorm)\r\n } else if (e < -14) {\r\n baseTable[i] = 0x0400 >> (-e - 14);\r\n baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000;\r\n shiftTable[i] = -e - 1;\r\n shiftTable[i | 0x100] = -e - 1;\r\n\r\n // normal number\r\n } else if (e <= 15) {\r\n baseTable[i] = (e + 15) << 10;\r\n baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000;\r\n shiftTable[i] = 13;\r\n shiftTable[i | 0x100] = 13;\r\n\r\n // large number (Infinity, -Infinity)\r\n } else if (e < 128) {\r\n baseTable[i] = 0x7c00;\r\n baseTable[i | 0x100] = 0xfc00;\r\n shiftTable[i] = 24;\r\n shiftTable[i | 0x100] = 24;\r\n\r\n // stay (NaN, Infinity, -Infinity)\r\n } else {\r\n baseTable[i] = 0x7c00;\r\n baseTable[i | 0x100] = 0xfc00;\r\n shiftTable[i] = 13;\r\n shiftTable[i | 0x100] = 13;\r\n }\r\n }\r\n\r\n // float16 to float32 helpers\r\n const mantissaTable = new Uint32Array(2048);\r\n const exponentTable = new Uint32Array(64);\r\n const offsetTable = new Uint32Array(64);\r\n\r\n for (let i = 1; i < 1024; ++i) {\r\n let m = i << 13; // zero pad mantissa bits\r\n let e = 0; // zero exponent\r\n\r\n // normalized\r\n while ((m & 0x00800000) === 0) {\r\n m <<= 1;\r\n e -= 0x00800000; // decrement exponent\r\n }\r\n\r\n m &= ~0x00800000; // clear leading 1 bit\r\n e += 0x38800000; // adjust bias\r\n\r\n mantissaTable[i] = m | e;\r\n }\r\n\r\n for (let i = 1024; i < 2048; ++i) {\r\n mantissaTable[i] = 0x38000000 + ((i - 1024) << 13);\r\n }\r\n\r\n for (let i = 1; i < 31; ++i) {\r\n exponentTable[i] = i << 23;\r\n }\r\n\r\n exponentTable[31] = 0x47800000;\r\n exponentTable[32] = 0x80000000;\r\n\r\n for (let i = 33; i < 63; ++i) {\r\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\r\n }\r\n\r\n exponentTable[63] = 0xc7800000;\r\n\r\n for (let i = 1; i < 64; ++i) {\r\n if (i !== 32) {\r\n offsetTable[i] = 1024;\r\n }\r\n }\r\n\r\n return {\r\n floatView: floatView,\r\n uint32View: uint32View,\r\n baseTable: baseTable,\r\n shiftTable: shiftTable,\r\n mantissaTable: mantissaTable,\r\n exponentTable: exponentTable,\r\n offsetTable: offsetTable,\r\n };\r\n}\r\n\r\n/**\r\n * Parse a null terminated string from the buffer\r\n * @param buffer buffer to read from\r\n * @param offset current offset in the buffer\r\n * @returns a string\r\n */\r\nexport function ParseNullTerminatedString(buffer: ArrayBuffer, offset: DataCursor) {\r\n const uintBuffer = new Uint8Array(buffer);\r\n let endOffset = 0;\r\n\r\n while (uintBuffer[offset.value + endOffset] != 0) {\r\n endOffset += 1;\r\n }\r\n\r\n const stringValue = new TextDecoder().decode(uintBuffer.slice(offset.value, offset.value + endOffset));\r\n\r\n offset.value = offset.value + endOffset + 1;\r\n\r\n return stringValue;\r\n}\r\n\r\n/**\r\n * Parse an int32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an int32\r\n */\r\nexport function ParseInt32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getInt32(offset.value, true);\r\n\r\n offset.value += INT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint32 from the buffer\r\n * @param dataView data view to read from\r\n * @param offset offset in the data view\r\n * @returns an uint32\r\n */\r\nexport function ParseUint32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint32(offset.value, true);\r\n\r\n offset.value += INT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint8 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an uint8\r\n */\r\nexport function ParseUint8(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint8(offset.value);\r\n\r\n offset.value += INT8_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint16 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an uint16\r\n */\r\nexport function ParseUint16(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getUint16(offset.value, true);\r\n\r\n offset.value += INT16_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an uint8 from an array buffer\r\n * @param array array buffer\r\n * @param offset current offset in the data view\r\n * @returns an uint16\r\n */\r\nexport function ParseUint8Array(array: Uint8Array, offset: DataCursor) {\r\n const value = array[offset.value];\r\n\r\n offset.value += INT8_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse an int64 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns an int64\r\n */\r\nexport function ParseInt64(dataView: DataView, offset: DataCursor) {\r\n let int;\r\n\r\n if (\"getBigInt64\" in DataView.prototype) {\r\n int = Number(dataView.getBigInt64(offset.value, true));\r\n } else {\r\n int = dataView.getUint32(offset.value + 4, true) + Number(dataView.getUint32(offset.value, true) << 32);\r\n }\r\n\r\n offset.value += ULONG_SIZE;\r\n\r\n return int;\r\n}\r\n\r\n/**\r\n * Parse a float32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float32\r\n */\r\nexport function ParseFloat32(dataView: DataView, offset: DataCursor) {\r\n const value = dataView.getFloat32(offset.value, true);\r\n\r\n offset.value += FLOAT32_SIZE;\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Parse a float16 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float16\r\n */\r\nexport function ParseFloat16(dataView: DataView, offset: DataCursor) {\r\n return DecodeFloat16(ParseUint16(dataView, offset));\r\n}\r\n\r\nfunction DecodeFloat16(binary: number) {\r\n const exponent = (binary & 0x7c00) >> 10;\r\n const fraction = binary & 0x03ff;\r\n\r\n return (\r\n (binary >> 15 ? -1 : 1) *\r\n (exponent ? (exponent === 0x1f ? (fraction ? NaN : Infinity) : Math.pow(2, exponent - 15) * (1 + fraction / 0x400)) : 6.103515625e-5 * (fraction / 0x400))\r\n );\r\n}\r\n\r\nfunction ToHalfFloat(value: number) {\r\n if (Math.abs(value) > 65504) {\r\n throw new Error(\"Value out of range.Consider using float instead of half-float.\");\r\n }\r\n\r\n value = Clamp(value, -65504, 65504);\r\n\r\n _tables.floatView[0] = value;\r\n const f = _tables.uint32View[0];\r\n const e = (f >> 23) & 0x1ff;\r\n return _tables.baseTable[e] + ((f & 0x007fffff) >> _tables.shiftTable[e]);\r\n}\r\n\r\n/**\r\n * Decode a float32 from the buffer\r\n * @param dataView dataview on the data\r\n * @param offset current offset in the data view\r\n * @returns a float32\r\n */\r\nexport function DecodeFloat32(dataView: DataView, offset: DataCursor) {\r\n return ToHalfFloat(ParseFloat32(dataView, offset));\r\n}\r\n\r\nfunction ParseFixedLengthString(buffer: ArrayBuffer, offset: DataCursor, size: number) {\r\n const stringValue = new TextDecoder().decode(new Uint8Array(buffer).slice(offset.value, offset.value + size));\r\n\r\n offset.value = offset.value + size;\r\n\r\n return stringValue;\r\n}\r\n\r\nfunction ParseRational(dataView: DataView, offset: DataCursor) {\r\n const x = ParseInt32(dataView, offset);\r\n const y = ParseUint32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseTimecode(dataView: DataView, offset: DataCursor) {\r\n const x = ParseUint32(dataView, offset);\r\n const y = ParseUint32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseV2f(dataView: DataView, offset: DataCursor) {\r\n const x = ParseFloat32(dataView, offset);\r\n const y = ParseFloat32(dataView, offset);\r\n\r\n return [x, y];\r\n}\r\n\r\nfunction ParseV3f(dataView: DataView, offset: DataCursor) {\r\n const x = ParseFloat32(dataView, offset);\r\n const y = ParseFloat32(dataView, offset);\r\n const z = ParseFloat32(dataView, offset);\r\n\r\n return [x, y, z];\r\n}\r\n\r\nfunction ParseChlist(dataView: DataView, offset: DataCursor, size: number) {\r\n const startOffset = offset.value;\r\n const channels = [];\r\n\r\n while (offset.value < startOffset + size - 1) {\r\n const name = ParseNullTerminatedString(dataView.buffer, offset);\r\n const pixelType = ParseInt32(dataView, offset);\r\n const pLinear = ParseUint8(dataView, offset);\r\n offset.value += 3; // reserved, three chars\r\n const xSampling = ParseInt32(dataView, offset);\r\n const ySampling = ParseInt32(dataView, offset);\r\n\r\n channels.push({\r\n name: name,\r\n pixelType: pixelType,\r\n pLinear: pLinear,\r\n xSampling: xSampling,\r\n ySampling: ySampling,\r\n });\r\n }\r\n\r\n offset.value += 1;\r\n\r\n return channels;\r\n}\r\n\r\nfunction ParseChromaticities(dataView: DataView, offset: DataCursor) {\r\n const redX = ParseFloat32(dataView, offset);\r\n const redY = ParseFloat32(dataView, offset);\r\n const greenX = ParseFloat32(dataView, offset);\r\n const greenY = ParseFloat32(dataView, offset);\r\n const blueX = ParseFloat32(dataView, offset);\r\n const blueY = ParseFloat32(dataView, offset);\r\n const whiteX = ParseFloat32(dataView, offset);\r\n const whiteY = ParseFloat32(dataView, offset);\r\n\r\n return { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };\r\n}\r\n\r\nfunction ParseCompression(dataView: DataView, offset: DataCursor) {\r\n return ParseUint8(dataView, offset);\r\n}\r\n\r\nfunction ParseBox2i(dataView: DataView, offset: DataCursor) {\r\n const xMin = ParseInt32(dataView, offset);\r\n const yMin = ParseInt32(dataView, offset);\r\n const xMax = ParseInt32(dataView, offset);\r\n const yMax = ParseInt32(dataView, offset);\r\n\r\n return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };\r\n}\r\n\r\nfunction ParseLineOrder(dataView: DataView, offset: DataCursor) {\r\n const lineOrder = ParseUint8(dataView, offset);\r\n\r\n return LineOrders[lineOrder];\r\n}\r\n\r\n/**\r\n * Parse a value from the data view\r\n * @param dataView defines the data view to read from\r\n * @param offset defines the current offset in the data view\r\n * @param type defines the type of the value to read\r\n * @param size defines the size of the value to read\r\n * @returns the parsed value\r\n */\r\nexport function ParseValue(dataView: DataView, offset: DataCursor, type: string, size: number) {\r\n switch (type) {\r\n case \"string\":\r\n case \"stringvector\":\r\n case \"iccProfile\":\r\n return ParseFixedLengthString(dataView.buffer, offset, size);\r\n case \"chlist\":\r\n return ParseChlist(dataView, offset, size);\r\n case \"chromaticities\":\r\n return ParseChromaticities(dataView, offset);\r\n case \"compression\":\r\n return ParseCompression(dataView, offset);\r\n case \"box2i\":\r\n return ParseBox2i(dataView, offset);\r\n case \"lineOrder\":\r\n return ParseLineOrder(dataView, offset);\r\n case \"float\":\r\n return ParseFloat32(dataView, offset);\r\n case \"v2f\":\r\n return ParseV2f(dataView, offset);\r\n case \"v3f\":\r\n return ParseV3f(dataView, offset);\r\n case \"int\":\r\n return ParseInt32(dataView, offset);\r\n case \"rational\":\r\n return ParseRational(dataView, offset);\r\n case \"timecode\":\r\n return ParseTimecode(dataView, offset);\r\n case \"preview\":\r\n offset.value += size;\r\n return \"skipped\";\r\n default:\r\n offset.value += size;\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Revert the endianness of the data\r\n * @param source defines the source\r\n */\r\nexport function Predictor(source: Uint8Array) {\r\n for (let t = 1; t < source.length; t++) {\r\n const d = source[t - 1] + source[t] - 128;\r\n source[t] = d;\r\n }\r\n}\r\n\r\n/**\r\n * Interleave pixels\r\n * @param source defines the data source\r\n * @param out defines the output\r\n */\r\nexport function InterleaveScalar(source: Uint8Array, out: Uint8Array) {\r\n let t1 = 0;\r\n let t2 = Math.floor((source.length + 1) / 2);\r\n let s = 0;\r\n const stop = source.length - 1;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n if (s > stop) {\r\n break;\r\n }\r\n out[s++] = source[t1++];\r\n\r\n if (s > stop) {\r\n break;\r\n }\r\n out[s++] = source[t2++];\r\n }\r\n}\r\n"]}
@@ -0,0 +1,25 @@
1
+ import type { DataCursor } from "./exrLoader.core";
2
+ import { type IEXRDecoder, type IEXRHeader } from "./exrLoader.interfaces";
3
+ import { EXROutputType } from "./exrLoader.configuration";
4
+ /**
5
+ * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js
6
+ * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita
7
+ * implementation.
8
+ */
9
+ /**
10
+ * Create a decoder for the exr file
11
+ * @param header header of the exr file
12
+ * @param dataView dataview of the exr file
13
+ * @param offset current offset
14
+ * @param outputType expected output type (float or half float)
15
+ * @returns a promise that resolves with the decoder
16
+ */
17
+ export declare function CreateDecoderAsync(header: IEXRHeader, dataView: DataView, offset: DataCursor, outputType: EXROutputType): Promise<IEXRDecoder>;
18
+ /**
19
+ * Scan the data of the exr file
20
+ * @param decoder decoder to use
21
+ * @param header header of the exr file
22
+ * @param dataView dataview of the exr file
23
+ * @param offset current offset
24
+ */
25
+ export declare function ScanData(decoder: IEXRDecoder, header: IEXRHeader, dataView: DataView, offset: DataCursor): void;