@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.
- package/Audio/analyser.js +3 -3
- package/Audio/analyser.js.map +1 -1
- package/Audio/audioSceneComponent.js +7 -7
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +55 -50
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.js +11 -11
- package/Audio/soundTrack.js.map +1 -1
- package/Cameras/flyCamera.js +2 -2
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/freeCamera.js +2 -2
- package/Cameras/freeCamera.js.map +1 -1
- package/Collisions/collisionCoordinator.js +2 -2
- package/Collisions/collisionCoordinator.js.map +1 -1
- package/Debug/debugLayer.js +2 -2
- package/Debug/debugLayer.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +25 -28
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/abstractEngine.d.ts +18 -3
- package/Engines/abstractEngine.js +32 -13
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.d.ts +0 -7
- package/Engines/engine.js +0 -13
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +3 -9
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +0 -37
- package/Engines/thinEngine.js +2 -40
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +1 -2
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gamepads/gamepadManager.js +2 -2
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Loading/sceneLoader.d.ts +2 -2
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.d.ts +31 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.d.ts +9 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js +454 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.js +147 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.d.ts +7 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js +91 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.configuration.d.ts +17 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.configuration.js +19 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.configuration.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +130 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js +452 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.d.ts +25 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +284 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.header.d.ts +9 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.header.js +112 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.header.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.d.ts +75 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js +16 -0
- package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js.map +1 -0
- package/Materials/Textures/Loaders/EXR/index.d.ts +7 -0
- package/Materials/Textures/Loaders/EXR/index.js +8 -0
- package/Materials/Textures/Loaders/EXR/index.js.map +1 -0
- package/Materials/Textures/Loaders/basisTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/basisTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/ddsTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/envTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/exrTextureLoader.d.ts +37 -0
- package/Materials/Textures/Loaders/exrTextureLoader.js +122 -0
- package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -0
- package/Materials/Textures/Loaders/hdrTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/hdrTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/hdrTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/index.d.ts +4 -0
- package/Materials/Textures/Loaders/index.js +5 -0
- package/Materials/Textures/Loaders/index.js.map +1 -1
- package/Materials/Textures/{internalTextureLoader.d.ts → Loaders/internalTextureLoader.d.ts} +2 -9
- package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -0
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +1 -8
- package/Materials/Textures/Loaders/ktxTextureLoader.js +0 -13
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/textureLoaderManager.d.ts +9 -0
- package/Materials/Textures/Loaders/textureLoaderManager.js +32 -0
- package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -0
- package/Materials/Textures/Loaders/tgaTextureLoader.d.ts +1 -7
- package/Materials/Textures/Loaders/tgaTextureLoader.js +0 -11
- package/Materials/Textures/Loaders/tgaTextureLoader.js.map +1 -1
- package/Materials/Textures/Packer/packer.js +2 -2
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/index.d.ts +0 -1
- package/Materials/Textures/index.js +0 -1
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/fresnelParameters.js +2 -2
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/materialFlags.js +24 -24
- package/Materials/materialFlags.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +2 -2
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/abstractMesh.js +2 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Misc/fileTools.d.ts +13 -0
- package/Misc/fileTools.js +16 -0
- package/Misc/fileTools.js.map +1 -1
- package/Offline/database.js +2 -2
- package/Offline/database.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +2 -2
- package/Rendering/boundingBoxRenderer.js +2 -2
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +7 -2
- package/Rendering/edgesRenderer.js +23 -6
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/index.d.ts +12 -4
- package/Rendering/index.js +14 -4
- package/Rendering/index.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +7 -2
- package/Rendering/outlineRenderer.js +64 -11
- package/Rendering/outlineRenderer.js.map +1 -1
- package/ShadersWGSL/line.fragment.d.ts +9 -0
- package/ShadersWGSL/line.fragment.js +24 -0
- package/ShadersWGSL/line.fragment.js.map +1 -0
- package/ShadersWGSL/line.vertex.d.ts +13 -0
- package/ShadersWGSL/line.vertex.js +36 -0
- package/ShadersWGSL/line.vertex.js.map +1 -0
- package/ShadersWGSL/outline.fragment.d.ts +9 -0
- package/ShadersWGSL/outline.fragment.js +30 -0
- package/ShadersWGSL/outline.fragment.js.map +1 -0
- package/ShadersWGSL/outline.vertex.d.ts +19 -0
- package/ShadersWGSL/outline.vertex.js +66 -0
- package/ShadersWGSL/outline.vertex.js.map +1 -0
- package/Sprites/spriteMap.js +4 -4
- package/Sprites/spriteMap.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +2 -3
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/webXRExperienceHelper.js +2 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +2 -3
- package/scene.js.map +1 -1
- package/Materials/Textures/internalTextureLoader.js.map +0 -1
- /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;
|