@graphty/graphty-element 1.0.1 → 1.0.2
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/README.md +1 -1
- package/dist/{basisTextureLoader-BqIvxvNl.js → basisTextureLoader-YJHdQGdC.js} +2 -2
- package/dist/{basisTextureLoader-BqIvxvNl.js.map → basisTextureLoader-YJHdQGdC.js.map} +1 -1
- package/dist/{dds-BlAaKjyJ.js → dds-DQLf_hLn.js} +2 -2
- package/dist/{dds-BlAaKjyJ.js.map → dds-DQLf_hLn.js.map} +1 -1
- package/dist/{ddsTextureLoader-D7Jh83wc.js → ddsTextureLoader-lj5EmdyW.js} +3 -3
- package/dist/{ddsTextureLoader-D7Jh83wc.js.map → ddsTextureLoader-lj5EmdyW.js.map} +1 -1
- package/dist/{default.fragment-CSeCDRwv.js → default.fragment-Blpb62wl.js} +6 -6
- package/dist/{default.fragment-CSeCDRwv.js.map → default.fragment-Blpb62wl.js.map} +1 -1
- package/dist/{default.fragment-BNc4beoN.js → default.fragment-BqlvuhH_.js} +6 -6
- package/dist/{default.fragment-BNc4beoN.js.map → default.fragment-BqlvuhH_.js.map} +1 -1
- package/dist/{default.vertex-9pBFrn06.js → default.vertex-BibOEUcC.js} +7 -7
- package/dist/{default.vertex-9pBFrn06.js.map → default.vertex-BibOEUcC.js.map} +1 -1
- package/dist/{default.vertex-DDjK1DRv.js → default.vertex-Dblk9O84.js} +7 -7
- package/dist/{default.vertex-DDjK1DRv.js.map → default.vertex-Dblk9O84.js.map} +1 -1
- package/dist/{defaultUboDeclaration-Ct5CiQ-w.js → defaultUboDeclaration-CO0hcGNU.js} +3 -3
- package/dist/{defaultUboDeclaration-Ct5CiQ-w.js.map → defaultUboDeclaration-CO0hcGNU.js.map} +1 -1
- package/dist/{defaultUboDeclaration-CG47IDRY.js → defaultUboDeclaration-D2cHxVkr.js} +3 -3
- package/dist/{defaultUboDeclaration-CG47IDRY.js.map → defaultUboDeclaration-D2cHxVkr.js.map} +1 -1
- package/dist/{dumpTools-DA1xMSIZ.js → dumpTools-DryVPnxm.js} +4 -4
- package/dist/{dumpTools-DA1xMSIZ.js.map → dumpTools-DryVPnxm.js.map} +1 -1
- package/dist/{envTextureLoader-DdCLpySN.js → envTextureLoader-zUp-sm34.js} +4 -4
- package/dist/{envTextureLoader-DdCLpySN.js.map → envTextureLoader-zUp-sm34.js.map} +1 -1
- package/dist/{exrTextureLoader-CnJSRQ9w.js → exrTextureLoader-CWNwDbqP.js} +2 -2
- package/dist/{exrTextureLoader-CnJSRQ9w.js.map → exrTextureLoader-CWNwDbqP.js.map} +1 -1
- package/dist/graphty.js +1 -1
- package/dist/{greasedLine.fragment-DixuqXus.js → greasedLine.fragment-BtdnWwPJ.js} +2 -2
- package/dist/{greasedLine.fragment-DixuqXus.js.map → greasedLine.fragment-BtdnWwPJ.js.map} +1 -1
- package/dist/{greasedLine.fragment-BZnGGe-r.js → greasedLine.fragment-DakXbZDt.js} +2 -2
- package/dist/{greasedLine.fragment-BZnGGe-r.js.map → greasedLine.fragment-DakXbZDt.js.map} +1 -1
- package/dist/{greasedLine.vertex-BhhwFKPy.js → greasedLine.vertex-DbhEvmnm.js} +3 -3
- package/dist/{greasedLine.vertex-BhhwFKPy.js.map → greasedLine.vertex-DbhEvmnm.js.map} +1 -1
- package/dist/{greasedLine.vertex-DIhgGSOi.js → greasedLine.vertex-Lh32HaiU.js} +4 -4
- package/dist/{greasedLine.vertex-DIhgGSOi.js.map → greasedLine.vertex-Lh32HaiU.js.map} +1 -1
- package/dist/{harmonicsFunctions-B9jTNKTF.js → harmonicsFunctions-Bki1gBZd.js} +3 -3
- package/dist/{harmonicsFunctions-B9jTNKTF.js.map → harmonicsFunctions-Bki1gBZd.js.map} +1 -1
- package/dist/{harmonicsFunctions-D9ZL5yLA.js → harmonicsFunctions-CjRTo-m9.js} +3 -3
- package/dist/{harmonicsFunctions-D9ZL5yLA.js.map → harmonicsFunctions-CjRTo-m9.js.map} +1 -1
- package/dist/{hdrTextureLoader-DreWCvHD.js → hdrTextureLoader-CLKfu37v.js} +2 -2
- package/dist/{hdrTextureLoader-DreWCvHD.js.map → hdrTextureLoader-CLKfu37v.js.map} +1 -1
- package/dist/{helperFunctions-Dh1WD8YN.js → helperFunctions-CQxHHy8r.js} +2 -2
- package/dist/{helperFunctions-Dh1WD8YN.js.map → helperFunctions-CQxHHy8r.js.map} +1 -1
- package/dist/{helperFunctions-ZBnqb-in.js → helperFunctions-TtJlWReK.js} +2 -2
- package/dist/{helperFunctions-ZBnqb-in.js.map → helperFunctions-TtJlWReK.js.map} +1 -1
- package/dist/{iesTextureLoader-JdfAyRK-.js → iesTextureLoader-BcJl2Arq.js} +2 -2
- package/dist/{iesTextureLoader-JdfAyRK-.js.map → iesTextureLoader-BcJl2Arq.js.map} +1 -1
- package/dist/{index-ChGTkj2q.js → index-DM3Dwe0V.js} +16 -16
- package/dist/{index-ChGTkj2q.js.map → index-DM3Dwe0V.js.map} +1 -1
- package/dist/{instancesVertex-evcSIvCA.js → instancesVertex-Dr04ZqKw.js} +2 -2
- package/dist/{instancesVertex-evcSIvCA.js.map → instancesVertex-Dr04ZqKw.js.map} +1 -1
- package/dist/{instancesVertex-BrWNnWxF.js → instancesVertex-DzC88b5Z.js} +2 -2
- package/dist/{instancesVertex-BrWNnWxF.js.map → instancesVertex-DzC88b5Z.js.map} +1 -1
- package/dist/{ktxTextureLoader-Dg1h0a-4.js → ktxTextureLoader-O794CBz4.js} +2 -2
- package/dist/{ktxTextureLoader-Dg1h0a-4.js.map → ktxTextureLoader-O794CBz4.js.map} +1 -1
- package/dist/{logDepthDeclaration-BHUUDd5l.js → logDepthDeclaration--8Jq3fys.js} +2 -2
- package/dist/{logDepthDeclaration-BHUUDd5l.js.map → logDepthDeclaration--8Jq3fys.js.map} +1 -1
- package/dist/{logDepthDeclaration-Bou5AJOP.js → logDepthDeclaration-DcveQRTq.js} +2 -2
- package/dist/{logDepthDeclaration-Bou5AJOP.js.map → logDepthDeclaration-DcveQRTq.js.map} +1 -1
- package/dist/{logDepthVertex-r_niddz9.js → logDepthVertex-BiWlUDke.js} +2 -2
- package/dist/{logDepthVertex-r_niddz9.js.map → logDepthVertex-BiWlUDke.js.map} +1 -1
- package/dist/{logDepthVertex-CCFGLExi.js → logDepthVertex-CYjRNQ1d.js} +2 -2
- package/dist/{logDepthVertex-CCFGLExi.js.map → logDepthVertex-CYjRNQ1d.js.map} +1 -1
- package/dist/{meshUboDeclaration-Dg__Mhmj.js → meshUboDeclaration-BmcefUDK.js} +2 -2
- package/dist/{meshUboDeclaration-Dg__Mhmj.js.map → meshUboDeclaration-BmcefUDK.js.map} +1 -1
- package/dist/{oitFragment-Bn29Ggvj.js → oitFragment-DP-aFNyo.js} +2 -2
- package/dist/{oitFragment-Bn29Ggvj.js.map → oitFragment-DP-aFNyo.js.map} +1 -1
- package/dist/{oitFragment-D6JBEGk0.js → oitFragment-DzgaBzc0.js} +2 -2
- package/dist/{oitFragment-D6JBEGk0.js.map → oitFragment-DzgaBzc0.js.map} +1 -1
- package/dist/{pass.fragment-Cf0ob1Y3.js → pass.fragment-DoZCyELK.js} +2 -2
- package/dist/{pass.fragment-Cf0ob1Y3.js.map → pass.fragment-DoZCyELK.js.map} +1 -1
- package/dist/{pass.fragment-C9O4ZLJL.js → pass.fragment-DxSTcWpC.js} +2 -2
- package/dist/{pass.fragment-C9O4ZLJL.js.map → pass.fragment-DxSTcWpC.js.map} +1 -1
- package/dist/{passCube.fragment-uM4B7TOI.js → passCube.fragment-Dv4FB3Ug.js} +2 -2
- package/dist/{passCube.fragment-uM4B7TOI.js.map → passCube.fragment-Dv4FB3Ug.js.map} +1 -1
- package/dist/{passCube.fragment-Mg8Qj5T9.js → passCube.fragment-nsqY0ZtC.js} +2 -2
- package/dist/{passCube.fragment-Mg8Qj5T9.js.map → passCube.fragment-nsqY0ZtC.js.map} +1 -1
- package/dist/{pbr.fragment-C8Lm3cwF.js → pbr.fragment-B13QduZT.js} +6 -6
- package/dist/{pbr.fragment-C8Lm3cwF.js.map → pbr.fragment-B13QduZT.js.map} +1 -1
- package/dist/{pbr.fragment-siOdCYqI.js → pbr.fragment-B6tx_cvK.js} +6 -6
- package/dist/{pbr.fragment-siOdCYqI.js.map → pbr.fragment-B6tx_cvK.js.map} +1 -1
- package/dist/{pbr.vertex-CmEPCcBW.js → pbr.vertex-CA7bnQjU.js} +7 -7
- package/dist/{pbr.vertex-CmEPCcBW.js.map → pbr.vertex-CA7bnQjU.js.map} +1 -1
- package/dist/{pbr.vertex-Bw_TrGQv.js → pbr.vertex-DW6iNOI2.js} +7 -7
- package/dist/{pbr.vertex-Bw_TrGQv.js.map → pbr.vertex-DW6iNOI2.js.map} +1 -1
- package/dist/{postprocess.vertex-B086G8mM.js → postprocess.vertex-DZzYDZfo.js} +2 -2
- package/dist/{postprocess.vertex-B086G8mM.js.map → postprocess.vertex-DZzYDZfo.js.map} +1 -1
- package/dist/{rgbdDecode.fragment-bNaGtQ-x.js → rgbdDecode.fragment-CAcs2JmP.js} +3 -3
- package/dist/{rgbdDecode.fragment-bNaGtQ-x.js.map → rgbdDecode.fragment-CAcs2JmP.js.map} +1 -1
- package/dist/{rgbdDecode.fragment-koAcppx0.js → rgbdDecode.fragment-E4n4lu8J.js} +3 -3
- package/dist/{rgbdDecode.fragment-koAcppx0.js.map → rgbdDecode.fragment-E4n4lu8J.js.map} +1 -1
- package/dist/{rgbdEncode.fragment-BDHL2P_i.js → rgbdEncode.fragment-CgYUAa43.js} +3 -3
- package/dist/{rgbdEncode.fragment-BDHL2P_i.js.map → rgbdEncode.fragment-CgYUAa43.js.map} +1 -1
- package/dist/{rgbdEncode.fragment-Dw0FS9aH.js → rgbdEncode.fragment-DCdpffcW.js} +3 -3
- package/dist/{rgbdEncode.fragment-Dw0FS9aH.js.map → rgbdEncode.fragment-DCdpffcW.js.map} +1 -1
- package/dist/{tgaTextureLoader-DIfkfgQh.js → tgaTextureLoader-DPWaEGJH.js} +2 -2
- package/dist/{tgaTextureLoader-DIfkfgQh.js.map → tgaTextureLoader-DPWaEGJH.js.map} +1 -1
- package/package.json +9 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exrTextureLoader-CnJSRQ9w.js","sources":["../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.core.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.header.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.compression.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.configuration.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.decoder.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/exrTextureLoader.js"],"sourcesContent":["export const INT32_SIZE = 4;\nexport const FLOAT32_SIZE = 4;\nexport const INT8_SIZE = 1;\nexport const INT16_SIZE = 2;\nexport const ULONG_SIZE = 8;\nexport const USHORT_RANGE = 1 << 16;\nexport const BITMAP_SIZE = USHORT_RANGE >> 3;\nexport const HUF_ENCBITS = 16;\nexport const HUF_DECBITS = 14;\nexport const HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1;\nexport const HUF_DECSIZE = 1 << HUF_DECBITS;\nexport const HUF_DECMASK = HUF_DECSIZE - 1;\nexport const SHORT_ZEROCODE_RUN = 59;\nexport const LONG_ZEROCODE_RUN = 63;\nexport const SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;\n//# sourceMappingURL=exrLoader.interfaces.js.map","import { Clamp } from \"../../../../Maths/math.scalar.functions.js\";\nimport { FLOAT32_SIZE, INT16_SIZE, INT32_SIZE, INT8_SIZE, ULONG_SIZE } from \"./exrLoader.interfaces.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\nexport var CompressionCodes;\n(function (CompressionCodes) {\n CompressionCodes[CompressionCodes[\"NO_COMPRESSION\"] = 0] = \"NO_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"RLE_COMPRESSION\"] = 1] = \"RLE_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"ZIPS_COMPRESSION\"] = 2] = \"ZIPS_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"ZIP_COMPRESSION\"] = 3] = \"ZIP_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"PIZ_COMPRESSION\"] = 4] = \"PIZ_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"PXR24_COMPRESSION\"] = 5] = \"PXR24_COMPRESSION\";\n})(CompressionCodes || (CompressionCodes = {}));\nvar LineOrders;\n(function (LineOrders) {\n LineOrders[LineOrders[\"INCREASING_Y\"] = 0] = \"INCREASING_Y\";\n LineOrders[LineOrders[\"DECREASING_Y\"] = 1] = \"DECREASING_Y\";\n})(LineOrders || (LineOrders = {}));\nconst Tables = GenerateTables();\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\nfunction GenerateTables() {\n // float32 to float16 helpers\n const buffer = new ArrayBuffer(4);\n const floatView = new Float32Array(buffer);\n const uint32View = new Uint32Array(buffer);\n const baseTable = new Uint32Array(512);\n const shiftTable = new Uint32Array(512);\n for (let i = 0; i < 256; ++i) {\n const e = i - 127;\n // very small number (0, -0)\n if (e < -27) {\n baseTable[i] = 0x0000;\n baseTable[i | 0x100] = 0x8000;\n shiftTable[i] = 24;\n shiftTable[i | 0x100] = 24;\n // small number (denorm)\n }\n else if (e < -14) {\n baseTable[i] = 0x0400 >> (-e - 14);\n baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000;\n shiftTable[i] = -e - 1;\n shiftTable[i | 0x100] = -e - 1;\n // normal number\n }\n else if (e <= 15) {\n baseTable[i] = (e + 15) << 10;\n baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000;\n shiftTable[i] = 13;\n shiftTable[i | 0x100] = 13;\n // large number (Infinity, -Infinity)\n }\n else if (e < 128) {\n baseTable[i] = 0x7c00;\n baseTable[i | 0x100] = 0xfc00;\n shiftTable[i] = 24;\n shiftTable[i | 0x100] = 24;\n // stay (NaN, Infinity, -Infinity)\n }\n else {\n baseTable[i] = 0x7c00;\n baseTable[i | 0x100] = 0xfc00;\n shiftTable[i] = 13;\n shiftTable[i | 0x100] = 13;\n }\n }\n // float16 to float32 helpers\n const mantissaTable = new Uint32Array(2048);\n const exponentTable = new Uint32Array(64);\n const offsetTable = new Uint32Array(64);\n for (let i = 1; i < 1024; ++i) {\n let m = i << 13; // zero pad mantissa bits\n let e = 0; // zero exponent\n // normalized\n while ((m & 0x00800000) === 0) {\n m <<= 1;\n e -= 0x00800000; // decrement exponent\n }\n m &= ~0x00800000; // clear leading 1 bit\n e += 0x38800000; // adjust bias\n mantissaTable[i] = m | e;\n }\n for (let i = 1024; i < 2048; ++i) {\n mantissaTable[i] = 0x38000000 + ((i - 1024) << 13);\n }\n for (let i = 1; i < 31; ++i) {\n exponentTable[i] = i << 23;\n }\n exponentTable[31] = 0x47800000;\n exponentTable[32] = 0x80000000;\n for (let i = 33; i < 63; ++i) {\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\n }\n exponentTable[63] = 0xc7800000;\n for (let i = 1; i < 64; ++i) {\n if (i !== 32) {\n offsetTable[i] = 1024;\n }\n }\n return {\n floatView: floatView,\n uint32View: uint32View,\n baseTable: baseTable,\n shiftTable: shiftTable,\n mantissaTable: mantissaTable,\n exponentTable: exponentTable,\n offsetTable: offsetTable,\n };\n}\n/**\n * Parse a null terminated string from the buffer\n * @param buffer buffer to read from\n * @param offset current offset in the buffer\n * @returns a string\n */\nexport function ParseNullTerminatedString(buffer, offset) {\n const uintBuffer = new Uint8Array(buffer);\n let endOffset = 0;\n while (uintBuffer[offset.value + endOffset] != 0) {\n endOffset += 1;\n }\n const stringValue = new TextDecoder().decode(uintBuffer.slice(offset.value, offset.value + endOffset));\n offset.value = offset.value + endOffset + 1;\n return stringValue;\n}\n/**\n * Parse an int32 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns an int32\n */\nexport function ParseInt32(dataView, offset) {\n const value = dataView.getInt32(offset.value, true);\n offset.value += INT32_SIZE;\n return value;\n}\n/**\n * Parse an uint32 from the buffer\n * @param dataView data view to read from\n * @param offset offset in the data view\n * @returns an uint32\n */\nexport function ParseUint32(dataView, offset) {\n const value = dataView.getUint32(offset.value, true);\n offset.value += INT32_SIZE;\n return value;\n}\n/**\n * Parse an uint8 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns an uint8\n */\nexport function ParseUint8(dataView, offset) {\n const value = dataView.getUint8(offset.value);\n offset.value += INT8_SIZE;\n return value;\n}\n/**\n * Parse an uint16 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns an uint16\n */\nexport function ParseUint16(dataView, offset) {\n const value = dataView.getUint16(offset.value, true);\n offset.value += INT16_SIZE;\n return value;\n}\n/**\n * Parse an uint8 from an array buffer\n * @param array array buffer\n * @param offset current offset in the data view\n * @returns an uint16\n */\nexport function ParseUint8Array(array, offset) {\n const value = array[offset.value];\n offset.value += INT8_SIZE;\n return value;\n}\n/**\n * Parse an int64 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns an int64\n */\nexport function ParseInt64(dataView, offset) {\n let int;\n if (\"getBigInt64\" in DataView.prototype) {\n int = Number(dataView.getBigInt64(offset.value, true));\n }\n else {\n int = dataView.getUint32(offset.value + 4, true) + Number(dataView.getUint32(offset.value, true) << 32);\n }\n offset.value += ULONG_SIZE;\n return int;\n}\n/**\n * Parse a float32 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns a float32\n */\nexport function ParseFloat32(dataView, offset) {\n const value = dataView.getFloat32(offset.value, true);\n offset.value += FLOAT32_SIZE;\n return value;\n}\n/**\n * Parse a float16 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns a float16\n */\nexport function ParseFloat16(dataView, offset) {\n return DecodeFloat16(ParseUint16(dataView, offset));\n}\nfunction DecodeFloat16(binary) {\n const exponent = (binary & 0x7c00) >> 10;\n const fraction = binary & 0x03ff;\n return ((binary >> 15 ? -1 : 1) *\n (exponent ? (exponent === 0x1f ? (fraction ? NaN : Infinity) : Math.pow(2, exponent - 15) * (1 + fraction / 0x400)) : 6.103515625e-5 * (fraction / 0x400)));\n}\nfunction ToHalfFloat(value) {\n if (Math.abs(value) > 65504) {\n throw new Error(\"Value out of range.Consider using float instead of half-float.\");\n }\n value = Clamp(value, -65504, 65504);\n Tables.floatView[0] = value;\n const f = Tables.uint32View[0];\n const e = (f >> 23) & 0x1ff;\n return Tables.baseTable[e] + ((f & 0x007fffff) >> Tables.shiftTable[e]);\n}\n/**\n * Decode a float32 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns a float32\n */\nexport function DecodeFloat32(dataView, offset) {\n return ToHalfFloat(ParseFloat32(dataView, offset));\n}\nfunction ParseFixedLengthString(buffer, offset, size) {\n const stringValue = new TextDecoder().decode(new Uint8Array(buffer).slice(offset.value, offset.value + size));\n offset.value = offset.value + size;\n return stringValue;\n}\nfunction ParseRational(dataView, offset) {\n const x = ParseInt32(dataView, offset);\n const y = ParseUint32(dataView, offset);\n return [x, y];\n}\nfunction ParseTimecode(dataView, offset) {\n const x = ParseUint32(dataView, offset);\n const y = ParseUint32(dataView, offset);\n return [x, y];\n}\nfunction ParseV2f(dataView, offset) {\n const x = ParseFloat32(dataView, offset);\n const y = ParseFloat32(dataView, offset);\n return [x, y];\n}\nfunction ParseV3f(dataView, offset) {\n const x = ParseFloat32(dataView, offset);\n const y = ParseFloat32(dataView, offset);\n const z = ParseFloat32(dataView, offset);\n return [x, y, z];\n}\nfunction ParseChlist(dataView, offset, size) {\n const startOffset = offset.value;\n const channels = [];\n while (offset.value < startOffset + size - 1) {\n const name = ParseNullTerminatedString(dataView.buffer, offset);\n const pixelType = ParseInt32(dataView, offset);\n const pLinear = ParseUint8(dataView, offset);\n offset.value += 3; // reserved, three chars\n const xSampling = ParseInt32(dataView, offset);\n const ySampling = ParseInt32(dataView, offset);\n channels.push({\n name: name,\n pixelType: pixelType,\n pLinear: pLinear,\n xSampling: xSampling,\n ySampling: ySampling,\n });\n }\n offset.value += 1;\n return channels;\n}\nfunction ParseChromaticities(dataView, offset) {\n const redX = ParseFloat32(dataView, offset);\n const redY = ParseFloat32(dataView, offset);\n const greenX = ParseFloat32(dataView, offset);\n const greenY = ParseFloat32(dataView, offset);\n const blueX = ParseFloat32(dataView, offset);\n const blueY = ParseFloat32(dataView, offset);\n const whiteX = ParseFloat32(dataView, offset);\n const whiteY = ParseFloat32(dataView, offset);\n return { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };\n}\nfunction ParseCompression(dataView, offset) {\n return ParseUint8(dataView, offset);\n}\nfunction ParseBox2i(dataView, offset) {\n const xMin = ParseInt32(dataView, offset);\n const yMin = ParseInt32(dataView, offset);\n const xMax = ParseInt32(dataView, offset);\n const yMax = ParseInt32(dataView, offset);\n return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };\n}\nfunction ParseLineOrder(dataView, offset) {\n const lineOrder = ParseUint8(dataView, offset);\n return LineOrders[lineOrder];\n}\n/**\n * Parse a value from the data view\n * @param dataView defines the data view to read from\n * @param offset defines the current offset in the data view\n * @param type defines the type of the value to read\n * @param size defines the size of the value to read\n * @returns the parsed value\n */\nexport function ParseValue(dataView, offset, type, size) {\n switch (type) {\n case \"string\":\n case \"stringvector\":\n case \"iccProfile\":\n return ParseFixedLengthString(dataView.buffer, offset, size);\n case \"chlist\":\n return ParseChlist(dataView, offset, size);\n case \"chromaticities\":\n return ParseChromaticities(dataView, offset);\n case \"compression\":\n return ParseCompression(dataView, offset);\n case \"box2i\":\n return ParseBox2i(dataView, offset);\n case \"lineOrder\":\n return ParseLineOrder(dataView, offset);\n case \"float\":\n return ParseFloat32(dataView, offset);\n case \"v2f\":\n return ParseV2f(dataView, offset);\n case \"v3f\":\n return ParseV3f(dataView, offset);\n case \"int\":\n return ParseInt32(dataView, offset);\n case \"rational\":\n return ParseRational(dataView, offset);\n case \"timecode\":\n return ParseTimecode(dataView, offset);\n case \"preview\":\n offset.value += size;\n return \"skipped\";\n default:\n offset.value += size;\n return undefined;\n }\n}\n/**\n * Revert the endianness of the data\n * @param source defines the source\n */\nexport function Predictor(source) {\n for (let t = 1; t < source.length; t++) {\n const d = source[t - 1] + source[t] - 128;\n source[t] = d;\n }\n}\n/**\n * Interleave pixels\n * @param source defines the data source\n * @param out defines the output\n */\nexport function InterleaveScalar(source, out) {\n let t1 = 0;\n let t2 = Math.floor((source.length + 1) / 2);\n let s = 0;\n const stop = source.length - 1;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (s > stop) {\n break;\n }\n out[s++] = source[t1++];\n if (s > stop) {\n break;\n }\n out[s++] = source[t2++];\n }\n}\n//# sourceMappingURL=exrLoader.core.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Logger } from \"../../../../Misc/logger.js\";\nimport { ParseNullTerminatedString, ParseUint32, ParseValue } from \"./exrLoader.core.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\nconst EXR_MAGIC = 20000630;\n/**\n * Gets the EXR header\n * @param dataView defines the data view to read from\n * @param offset defines the offset to start reading from\n * @returns the header\n */\nexport function GetExrHeader(dataView, offset) {\n if (dataView.getUint32(0, true) != EXR_MAGIC) {\n throw new Error(\"Incorrect OpenEXR format\");\n }\n const version = dataView.getUint8(4);\n const specData = dataView.getUint8(5); // fullMask\n const spec = {\n singleTile: !!(specData & 2),\n longName: !!(specData & 4),\n deepFormat: !!(specData & 8),\n multiPart: !!(specData & 16),\n };\n offset.value = 8;\n const headerData = {};\n let keepReading = true;\n while (keepReading) {\n const attributeName = ParseNullTerminatedString(dataView.buffer, offset);\n if (!attributeName) {\n keepReading = false;\n }\n else {\n const attributeType = ParseNullTerminatedString(dataView.buffer, offset);\n const attributeSize = ParseUint32(dataView, offset);\n const attributeValue = ParseValue(dataView, offset, attributeType, attributeSize);\n if (attributeValue === undefined) {\n Logger.Warn(`Unknown header attribute type ${attributeType}'.`);\n }\n else {\n headerData[attributeName] = attributeValue;\n }\n }\n }\n if ((specData & ~0x04) != 0) {\n throw new Error(\"Unsupported file format\");\n }\n return { version: version, spec: spec, ...headerData };\n}\n//# sourceMappingURL=exrLoader.header.js.map","import { ParseUint32, ParseUint8Array } from \"./exrLoader.core.js\";\nimport { HUF_DECBITS, HUF_DECMASK, HUF_DECSIZE, HUF_ENCSIZE, LONG_ZEROCODE_RUN, SHORT_ZEROCODE_RUN, SHORTEST_LONG_RUN, USHORT_RANGE } from \"./exrLoader.interfaces.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\nconst NBITS = 16;\nconst A_OFFSET = 1 << (NBITS - 1);\nconst MOD_MASK = (1 << NBITS) - 1;\n/** @internal */\nexport function ReverseLutFromBitmap(bitmap, lut) {\n let k = 0;\n for (let i = 0; i < USHORT_RANGE; ++i) {\n if (i == 0 || bitmap[i >> 3] & (1 << (i & 7))) {\n lut[k++] = i;\n }\n }\n const n = k - 1;\n while (k < USHORT_RANGE) {\n lut[k++] = 0;\n }\n return n;\n}\nfunction HufClearDecTable(hdec) {\n for (let i = 0; i < HUF_DECSIZE; i++) {\n hdec[i] = {};\n hdec[i].len = 0;\n hdec[i].lit = 0;\n hdec[i].p = null;\n }\n}\nfunction GetBits(nBits, c, lc, array, offset) {\n while (lc < nBits) {\n c = (c << 8) | ParseUint8Array(array, offset);\n lc += 8;\n }\n lc -= nBits;\n return {\n l: (c >> lc) & ((1 << nBits) - 1),\n c,\n lc,\n };\n}\nfunction GetChar(c, lc, array, offset) {\n c = (c << 8) | ParseUint8Array(array, offset);\n lc += 8;\n return {\n c,\n lc,\n };\n}\nfunction GetCode(po, rlc, c, lc, array, offset, outBuffer, outBufferOffset, outBufferEndOffset) {\n if (po == rlc) {\n if (lc < 8) {\n const gc = GetChar(c, lc, array, offset);\n c = gc.c;\n lc = gc.lc;\n }\n lc -= 8;\n let cs = c >> lc;\n cs = new Uint8Array([cs])[0];\n if (outBufferOffset.value + cs > outBufferEndOffset) {\n return null;\n }\n const s = outBuffer[outBufferOffset.value - 1];\n while (cs-- > 0) {\n outBuffer[outBufferOffset.value++] = s;\n }\n }\n else if (outBufferOffset.value < outBufferEndOffset) {\n outBuffer[outBufferOffset.value++] = po;\n }\n else {\n return null;\n }\n return { c, lc };\n}\nconst HufTableBuffer = new Array(59);\nfunction HufCanonicalCodeTable(hcode) {\n for (let i = 0; i <= 58; ++i) {\n HufTableBuffer[i] = 0;\n }\n for (let i = 0; i < HUF_ENCSIZE; ++i) {\n HufTableBuffer[hcode[i]] += 1;\n }\n let c = 0;\n for (let i = 58; i > 0; --i) {\n const nc = (c + HufTableBuffer[i]) >> 1;\n HufTableBuffer[i] = c;\n c = nc;\n }\n for (let i = 0; i < HUF_ENCSIZE; ++i) {\n const l = hcode[i];\n if (l > 0) {\n hcode[i] = l | (HufTableBuffer[l]++ << 6);\n }\n }\n}\nfunction HufUnpackEncTable(array, offset, ni, im, iM, hcode) {\n const p = offset;\n let c = 0;\n let lc = 0;\n for (; im <= iM; im++) {\n if (p.value - offset.value > ni) {\n return;\n }\n let gb = GetBits(6, c, lc, array, p);\n const l = gb.l;\n c = gb.c;\n lc = gb.lc;\n hcode[im] = l;\n if (l == LONG_ZEROCODE_RUN) {\n if (p.value - offset.value > ni) {\n throw new Error(\"Error in HufUnpackEncTable\");\n }\n gb = GetBits(8, c, lc, array, p);\n let zerun = gb.l + SHORTEST_LONG_RUN;\n c = gb.c;\n lc = gb.lc;\n if (im + zerun > iM + 1) {\n throw new Error(\"Error in HufUnpackEncTable\");\n }\n while (zerun--) {\n hcode[im++] = 0;\n }\n im--;\n }\n else if (l >= SHORT_ZEROCODE_RUN) {\n let zerun = l - SHORT_ZEROCODE_RUN + 2;\n if (im + zerun > iM + 1) {\n throw new Error(\"Error in HufUnpackEncTable\");\n }\n while (zerun--) {\n hcode[im++] = 0;\n }\n im--;\n }\n }\n HufCanonicalCodeTable(hcode);\n}\nfunction HufLength(code) {\n return code & 63;\n}\nfunction HufCode(code) {\n return code >> 6;\n}\nfunction HufBuildDecTable(hcode, im, iM, hdecod) {\n for (; im <= iM; im++) {\n const c = HufCode(hcode[im]);\n const l = HufLength(hcode[im]);\n if (c >> l) {\n throw new Error(\"Invalid table entry\");\n }\n if (l > HUF_DECBITS) {\n const pl = hdecod[c >> (l - HUF_DECBITS)];\n if (pl.len) {\n throw new Error(\"Invalid table entry\");\n }\n pl.lit++;\n if (pl.p) {\n const p = pl.p;\n pl.p = new Array(pl.lit);\n for (let i = 0; i < pl.lit - 1; ++i) {\n pl.p[i] = p[i];\n }\n }\n else {\n pl.p = new Array(1);\n }\n pl.p[pl.lit - 1] = im;\n }\n else if (l) {\n let plOffset = 0;\n for (let i = 1 << (HUF_DECBITS - l); i > 0; i--) {\n const pl = hdecod[(c << (HUF_DECBITS - l)) + plOffset];\n if (pl.len || pl.p) {\n throw new Error(\"Invalid table entry\");\n }\n pl.len = l;\n pl.lit = im;\n plOffset++;\n }\n }\n }\n return true;\n}\nfunction HufDecode(encodingTable, decodingTable, array, offset, ni, rlc, no, outBuffer, outOffset) {\n let c = 0;\n let lc = 0;\n const outBufferEndOffset = no;\n const inOffsetEnd = Math.trunc(offset.value + (ni + 7) / 8);\n while (offset.value < inOffsetEnd) {\n let gc = GetChar(c, lc, array, offset);\n c = gc.c;\n lc = gc.lc;\n while (lc >= HUF_DECBITS) {\n const index = (c >> (lc - HUF_DECBITS)) & HUF_DECMASK;\n const pl = decodingTable[index];\n if (pl.len) {\n lc -= pl.len;\n const gCode = GetCode(pl.lit, rlc, c, lc, array, offset, outBuffer, outOffset, outBufferEndOffset);\n if (gCode) {\n c = gCode.c;\n lc = gCode.lc;\n }\n }\n else {\n if (!pl.p) {\n throw new Error(\"hufDecode issues\");\n }\n let j;\n for (j = 0; j < pl.lit; j++) {\n const l = HufLength(encodingTable[pl.p[j]]);\n while (lc < l && offset.value < inOffsetEnd) {\n gc = GetChar(c, lc, array, offset);\n c = gc.c;\n lc = gc.lc;\n }\n if (lc >= l) {\n if (HufCode(encodingTable[pl.p[j]]) == ((c >> (lc - l)) & ((1 << l) - 1))) {\n lc -= l;\n const gCode = GetCode(pl.p[j], rlc, c, lc, array, offset, outBuffer, outOffset, outBufferEndOffset);\n if (gCode) {\n c = gCode.c;\n lc = gCode.lc;\n }\n break;\n }\n }\n }\n if (j == pl.lit) {\n throw new Error(\"HufDecode issues\");\n }\n }\n }\n }\n const i = (8 - ni) & 7;\n c >>= i;\n lc -= i;\n while (lc > 0) {\n const pl = decodingTable[(c << (HUF_DECBITS - lc)) & HUF_DECMASK];\n if (pl.len) {\n lc -= pl.len;\n const gCode = GetCode(pl.lit, rlc, c, lc, array, offset, outBuffer, outOffset, outBufferEndOffset);\n if (gCode) {\n c = gCode.c;\n lc = gCode.lc;\n }\n }\n else {\n throw new Error(\"HufDecode issues\");\n }\n }\n return true;\n}\n/** @internal */\nexport function HufUncompress(array, dataView, offset, nCompressed, outBuffer, nRaw) {\n const outOffset = { value: 0 };\n const initialInOffset = offset.value;\n const im = ParseUint32(dataView, offset);\n const iM = ParseUint32(dataView, offset);\n offset.value += 4;\n const nBits = ParseUint32(dataView, offset);\n offset.value += 4;\n if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) {\n throw new Error(\"Wrong HUF_ENCSIZE\");\n }\n const freq = new Array(HUF_ENCSIZE);\n const hdec = new Array(HUF_DECSIZE);\n HufClearDecTable(hdec);\n const ni = nCompressed - (offset.value - initialInOffset);\n HufUnpackEncTable(array, offset, ni, im, iM, freq);\n if (nBits > 8 * (nCompressed - (offset.value - initialInOffset))) {\n throw new Error(\"Wrong hufUncompress\");\n }\n HufBuildDecTable(freq, im, iM, hdec);\n HufDecode(freq, hdec, array, offset, nBits, iM, nRaw, outBuffer, outOffset);\n}\nfunction UInt16(value) {\n return value & 0xffff;\n}\nfunction Int16(value) {\n const ref = UInt16(value);\n return ref > 0x7fff ? ref - 0x10000 : ref;\n}\nfunction Wdec14(l, h) {\n const ls = Int16(l);\n const hs = Int16(h);\n const hi = hs;\n const ai = ls + (hi & 1) + (hi >> 1);\n const as = ai;\n const bs = ai - hi;\n return { a: as, b: bs };\n}\nfunction Wdec16(l, h) {\n const m = UInt16(l);\n const d = UInt16(h);\n const bb = (m - (d >> 1)) & MOD_MASK;\n const aa = (d + bb - A_OFFSET) & MOD_MASK;\n return { a: aa, b: bb };\n}\n/** @internal */\nexport function Wav2Decode(buffer, j, nx, ox, ny, oy, mx) {\n const w14 = mx < 1 << 14;\n const n = nx > ny ? ny : nx;\n let p = 1;\n let p2;\n let py;\n while (p <= n) {\n p <<= 1;\n }\n p >>= 1;\n p2 = p;\n p >>= 1;\n while (p >= 1) {\n py = 0;\n const ey = py + oy * (ny - p2);\n const oy1 = oy * p;\n const oy2 = oy * p2;\n const ox1 = ox * p;\n const ox2 = ox * p2;\n let i00, i01, i10, i11;\n for (; py <= ey; py += oy2) {\n let px = py;\n const ex = py + ox * (nx - p2);\n for (; px <= ex; px += ox2) {\n const p01 = px + ox1;\n const p10 = px + oy1;\n const p11 = p10 + ox1;\n if (w14) {\n let result = Wdec14(buffer[px + j], buffer[p10 + j]);\n i00 = result.a;\n i10 = result.b;\n result = Wdec14(buffer[p01 + j], buffer[p11 + j]);\n i01 = result.a;\n i11 = result.b;\n result = Wdec14(i00, i01);\n buffer[px + j] = result.a;\n buffer[p01 + j] = result.b;\n result = Wdec14(i10, i11);\n buffer[p10 + j] = result.a;\n buffer[p11 + j] = result.b;\n }\n else {\n let result = Wdec16(buffer[px + j], buffer[p10 + j]);\n i00 = result.a;\n i10 = result.b;\n result = Wdec16(buffer[p01 + j], buffer[p11 + j]);\n i01 = result.a;\n i11 = result.b;\n result = Wdec16(i00, i01);\n buffer[px + j] = result.a;\n buffer[p01 + j] = result.b;\n result = Wdec16(i10, i11);\n buffer[p10 + j] = result.a;\n buffer[p11 + j] = result.b;\n }\n }\n if (nx & p) {\n const p10 = px + oy1;\n let result;\n if (w14) {\n result = Wdec14(buffer[px + j], buffer[p10 + j]);\n }\n else {\n result = Wdec16(buffer[px + j], buffer[p10 + j]);\n }\n i00 = result.a;\n buffer[p10 + j] = result.b;\n buffer[px + j] = i00;\n }\n }\n if (ny & p) {\n let px = py;\n const ex = py + ox * (nx - p2);\n for (; px <= ex; px += ox2) {\n const p01 = px + ox1;\n let result;\n if (w14) {\n result = Wdec14(buffer[px + j], buffer[p01 + j]);\n }\n else {\n result = Wdec16(buffer[px + j], buffer[p01 + j]);\n }\n i00 = result.a;\n buffer[p01 + j] = result.b;\n buffer[px + j] = i00;\n }\n }\n p2 = p;\n p >>= 1;\n }\n return py;\n}\n/** @internal */\nexport function ApplyLut(lut, data, nData) {\n for (let i = 0; i < nData; ++i) {\n data[i] = lut[data[i]];\n }\n}\n//# sourceMappingURL=exrLoader.compression.huf.js.map","/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\n/** @internal */\nexport function DecodeRunLength(source) {\n let size = source.byteLength;\n const out = [];\n let p = 0;\n const reader = new DataView(source);\n while (size > 0) {\n const l = reader.getInt8(p++);\n if (l < 0) {\n const count = -l;\n size -= count + 1;\n for (let i = 0; i < count; i++) {\n out.push(reader.getUint8(p++));\n }\n }\n else {\n const count = l;\n size -= 2;\n const value = reader.getUint8(p++);\n for (let i = 0; i < count + 1; i++) {\n out.push(value);\n }\n }\n }\n return out;\n}\n//# sourceMappingURL=exrLoader.compression.rle.js.map","import { ApplyLut, HufUncompress, ReverseLutFromBitmap, Wav2Decode } from \"./exrLoader.compression.huf.js\";\nimport { DecodeRunLength } from \"./exrLoader.compression.rle.js\";\nimport { InterleaveScalar, ParseUint16, ParseUint32, ParseUint8, Predictor } from \"./exrLoader.core.js\";\nimport { BITMAP_SIZE, INT16_SIZE, USHORT_RANGE } from \"./exrLoader.interfaces.js\";\n/**\n * No compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressRAW(decoder) {\n return new DataView(decoder.array.buffer, decoder.offset.value, decoder.size);\n}\n/**\n * RLE compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressRLE(decoder) {\n const compressed = decoder.viewer.buffer.slice(decoder.offset.value, decoder.offset.value + decoder.size);\n const rawBuffer = new Uint8Array(DecodeRunLength(compressed));\n const tmpBuffer = new Uint8Array(rawBuffer.length);\n Predictor(rawBuffer);\n InterleaveScalar(rawBuffer, tmpBuffer);\n return new DataView(tmpBuffer.buffer);\n}\n/**\n * Zip compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressZIP(decoder) {\n const compressed = decoder.array.slice(decoder.offset.value, decoder.offset.value + decoder.size);\n const rawBuffer = fflate.unzlibSync(compressed);\n const tmpBuffer = new Uint8Array(rawBuffer.length);\n Predictor(rawBuffer);\n InterleaveScalar(rawBuffer, tmpBuffer);\n return new DataView(tmpBuffer.buffer);\n}\n/**\n * PXR compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressPXR(decoder) {\n const compressed = decoder.array.slice(decoder.offset.value, decoder.offset.value + decoder.size);\n const rawBuffer = fflate.unzlibSync(compressed);\n const sz = decoder.lines * decoder.channels * decoder.width;\n const tmpBuffer = decoder.type == 1 ? new Uint16Array(sz) : new Uint32Array(sz);\n let tmpBufferEnd = 0;\n let writePtr = 0;\n const ptr = new Array(4);\n for (let y = 0; y < decoder.lines; y++) {\n for (let c = 0; c < decoder.channels; c++) {\n let pixel = 0;\n switch (decoder.type) {\n case 1:\n ptr[0] = tmpBufferEnd;\n ptr[1] = ptr[0] + decoder.width;\n tmpBufferEnd = ptr[1] + decoder.width;\n for (let j = 0; j < decoder.width; ++j) {\n const diff = (rawBuffer[ptr[0]++] << 8) | rawBuffer[ptr[1]++];\n pixel += diff;\n tmpBuffer[writePtr] = pixel;\n writePtr++;\n }\n break;\n case 2:\n ptr[0] = tmpBufferEnd;\n ptr[1] = ptr[0] + decoder.width;\n ptr[2] = ptr[1] + decoder.width;\n tmpBufferEnd = ptr[2] + decoder.width;\n for (let j = 0; j < decoder.width; ++j) {\n const diff = (rawBuffer[ptr[0]++] << 24) | (rawBuffer[ptr[1]++] << 16) | (rawBuffer[ptr[2]++] << 8);\n pixel += diff;\n tmpBuffer[writePtr] = pixel;\n writePtr++;\n }\n break;\n }\n }\n }\n return new DataView(tmpBuffer.buffer);\n}\n/**\n * PIZ compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressPIZ(decoder) {\n const inDataView = decoder.viewer;\n const inOffset = { value: decoder.offset.value };\n const outBuffer = new Uint16Array(decoder.width * decoder.scanlineBlockSize * (decoder.channels * decoder.type));\n const bitmap = new Uint8Array(BITMAP_SIZE);\n // Setup channel info\n let outBufferEnd = 0;\n const pizChannelData = new Array(decoder.channels);\n for (let i = 0; i < decoder.channels; i++) {\n pizChannelData[i] = {};\n pizChannelData[i][\"start\"] = outBufferEnd;\n pizChannelData[i][\"end\"] = pizChannelData[i][\"start\"];\n pizChannelData[i][\"nx\"] = decoder.width;\n pizChannelData[i][\"ny\"] = decoder.lines;\n pizChannelData[i][\"size\"] = decoder.type;\n outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size;\n }\n // Read range compression data\n const minNonZero = ParseUint16(inDataView, inOffset);\n const maxNonZero = ParseUint16(inDataView, inOffset);\n if (maxNonZero >= BITMAP_SIZE) {\n throw new Error(\"Wrong PIZ_COMPRESSION BITMAP_SIZE\");\n }\n if (minNonZero <= maxNonZero) {\n for (let i = 0; i < maxNonZero - minNonZero + 1; i++) {\n bitmap[i + minNonZero] = ParseUint8(inDataView, inOffset);\n }\n }\n // Reverse LUT\n const lut = new Uint16Array(USHORT_RANGE);\n const maxValue = ReverseLutFromBitmap(bitmap, lut);\n const length = ParseUint32(inDataView, inOffset);\n // Huffman decoding\n HufUncompress(decoder.array, inDataView, inOffset, length, outBuffer, outBufferEnd);\n // Wavelet decoding\n for (let i = 0; i < decoder.channels; ++i) {\n const cd = pizChannelData[i];\n for (let j = 0; j < pizChannelData[i].size; ++j) {\n Wav2Decode(outBuffer, cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, maxValue);\n }\n }\n // Expand the pixel data to their original range\n ApplyLut(lut, outBuffer, outBufferEnd);\n // Rearrange the pixel data into the format expected by the caller.\n let tmpOffset = 0;\n const tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength);\n for (let y = 0; y < decoder.lines; y++) {\n for (let c = 0; c < decoder.channels; c++) {\n const cd = pizChannelData[c];\n const n = cd.nx * cd.size;\n const cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE);\n tmpBuffer.set(cp, tmpOffset);\n tmpOffset += n * INT16_SIZE;\n cd.end += n;\n }\n }\n return new DataView(tmpBuffer.buffer);\n}\n//# sourceMappingURL=exrLoader.compression.js.map","export var EXROutputType;\n(function (EXROutputType) {\n EXROutputType[EXROutputType[\"Float\"] = 0] = \"Float\";\n EXROutputType[EXROutputType[\"HalfFloat\"] = 1] = \"HalfFloat\";\n})(EXROutputType || (EXROutputType = {}));\n/**\n * Class used to store configuration of the exr loader\n */\nexport class ExrLoaderGlobalConfiguration {\n}\n/**\n * Defines the default output type to use (Half float by default)\n */\nExrLoaderGlobalConfiguration.DefaultOutputType = EXROutputType.HalfFloat;\n/**\n * Url to use to load the fflate library (for zip decompression)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nExrLoaderGlobalConfiguration.FFLATEUrl = \"https://unpkg.com/fflate@0.8.2\";\n//# sourceMappingURL=exrLoader.configuration.js.map","import { CompressionCodes, DecodeFloat32, ParseFloat16, ParseFloat32, ParseInt32, ParseInt64, ParseUint16, ParseUint32 } from \"./exrLoader.core.js\";\nimport { UncompressPIZ, UncompressPXR, UncompressRAW, UncompressRLE, UncompressZIP } from \"./exrLoader.compression.js\";\nimport { FLOAT32_SIZE, INT16_SIZE } from \"./exrLoader.interfaces.js\";\n\nimport { Tools } from \"../../../../Misc/tools.js\";\nimport { ExrLoaderGlobalConfiguration, EXROutputType } from \"./exrLoader.configuration.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\n/**\n * Create a decoder for the exr file\n * @param header header of the exr file\n * @param dataView dataview of the exr file\n * @param offset current offset\n * @param outputType expected output type (float or half float)\n * @returns a promise that resolves with the decoder\n */\nexport async function CreateDecoderAsync(header, dataView, offset, outputType) {\n const decoder = {\n size: 0,\n viewer: dataView,\n array: new Uint8Array(dataView.buffer),\n offset: offset,\n width: header.dataWindow.xMax - header.dataWindow.xMin + 1,\n height: header.dataWindow.yMax - header.dataWindow.yMin + 1,\n channels: header.channels.length,\n channelLineOffsets: {},\n scanOrder: () => 0,\n bytesPerLine: 0,\n outLineWidth: 0,\n lines: 0,\n scanlineBlockSize: 0,\n inputSize: null,\n type: 0,\n uncompress: null,\n getter: () => 0,\n format: 5,\n outputChannels: 0,\n decodeChannels: {},\n blockCount: null,\n byteArray: null,\n linearSpace: false,\n textureType: 0,\n };\n switch (header.compression) {\n case CompressionCodes.NO_COMPRESSION:\n decoder.lines = 1;\n decoder.uncompress = UncompressRAW;\n break;\n case CompressionCodes.RLE_COMPRESSION:\n decoder.lines = 1;\n decoder.uncompress = UncompressRLE;\n break;\n case CompressionCodes.ZIPS_COMPRESSION:\n decoder.lines = 1;\n decoder.uncompress = UncompressZIP;\n await Tools.LoadScriptAsync(ExrLoaderGlobalConfiguration.FFLATEUrl);\n break;\n case CompressionCodes.ZIP_COMPRESSION:\n decoder.lines = 16;\n decoder.uncompress = UncompressZIP;\n await Tools.LoadScriptAsync(ExrLoaderGlobalConfiguration.FFLATEUrl);\n break;\n case CompressionCodes.PIZ_COMPRESSION:\n decoder.lines = 32;\n decoder.uncompress = UncompressPIZ;\n break;\n case CompressionCodes.PXR24_COMPRESSION:\n decoder.lines = 16;\n decoder.uncompress = UncompressPXR;\n await Tools.LoadScriptAsync(ExrLoaderGlobalConfiguration.FFLATEUrl);\n break;\n default:\n throw new Error(CompressionCodes[header.compression] + \" is unsupported\");\n }\n decoder.scanlineBlockSize = decoder.lines;\n const channels = {};\n for (const channel of header.channels) {\n switch (channel.name) {\n case \"R\":\n case \"G\":\n case \"B\":\n case \"A\":\n channels[channel.name] = true;\n decoder.type = channel.pixelType;\n break;\n case \"Y\":\n channels[channel.name] = true;\n decoder.type = channel.pixelType;\n // Note: 'Y' is deprecated in OpenGL 3.0+; prefer 'R' for single-channel EXRs.\n break;\n default:\n // Skip unsupported channels\n break;\n }\n }\n // RGB images will be converted to RGBA format, preventing software emulation in select devices.\n let fillAlpha = false;\n if (channels.R && channels.G && channels.B && channels.A) {\n decoder.outputChannels = 4;\n decoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };\n }\n else if (channels.R && channels.G && channels.B) {\n fillAlpha = true;\n decoder.outputChannels = 4;\n decoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };\n }\n else if (channels.R && channels.G) {\n decoder.outputChannels = 2;\n decoder.decodeChannels = { R: 0, G: 1 };\n }\n else if (channels.R) {\n decoder.outputChannels = 1;\n decoder.decodeChannels = { R: 0 };\n }\n else if (channels.Y) {\n decoder.outputChannels = 1;\n decoder.decodeChannels = { Y: 0 };\n // Note: Supporting 'Y' channel for legacy compatibility; prefer 'R' in new EXRs.\n }\n else {\n throw new Error(\"EXRLoader.parse: file contains unsupported data channels.\");\n }\n if (decoder.type === 1) {\n // half\n switch (outputType) {\n case EXROutputType.Float:\n decoder.getter = ParseFloat16;\n decoder.inputSize = INT16_SIZE;\n break;\n case EXROutputType.HalfFloat:\n decoder.getter = ParseUint16;\n decoder.inputSize = INT16_SIZE;\n break;\n }\n }\n else if (decoder.type === 2) {\n // float\n switch (outputType) {\n case EXROutputType.Float:\n decoder.getter = ParseFloat32;\n decoder.inputSize = FLOAT32_SIZE;\n break;\n case EXROutputType.HalfFloat:\n decoder.getter = DecodeFloat32;\n decoder.inputSize = FLOAT32_SIZE;\n }\n }\n else {\n throw new Error(\"Unsupported pixelType \" + decoder.type + \" for \" + header.compression);\n }\n decoder.blockCount = decoder.height / decoder.scanlineBlockSize;\n for (let i = 0; i < decoder.blockCount; i++) {\n ParseInt64(dataView, offset); // scanlineOffset\n }\n // we should be passed the scanline offset table, ready to start reading pixel data.\n const size = decoder.width * decoder.height * decoder.outputChannels;\n switch (outputType) {\n case EXROutputType.Float:\n decoder.byteArray = new Float32Array(size);\n decoder.textureType = 1;\n // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten\n if (fillAlpha) {\n decoder.byteArray.fill(1, 0, size);\n }\n break;\n case EXROutputType.HalfFloat:\n decoder.byteArray = new Uint16Array(size);\n decoder.textureType = 2;\n if (fillAlpha) {\n decoder.byteArray.fill(0x3c00, 0, size); // Uint16Array holds half float data, 0x3C00 is 1\n }\n break;\n default:\n throw new Error(\"Unsupported type: \" + outputType);\n }\n let byteOffset = 0;\n for (const channel of header.channels) {\n if (decoder.decodeChannels[channel.name] !== undefined) {\n decoder.channelLineOffsets[channel.name] = byteOffset * decoder.width;\n }\n byteOffset += channel.pixelType * 2;\n }\n decoder.bytesPerLine = decoder.width * byteOffset;\n decoder.outLineWidth = decoder.width * decoder.outputChannels;\n if (header.lineOrder === \"INCREASING_Y\") {\n decoder.scanOrder = (y) => y;\n }\n else {\n decoder.scanOrder = (y) => decoder.height - 1 - y;\n }\n if (decoder.outputChannels == 4) {\n decoder.format = 5;\n decoder.linearSpace = true;\n }\n else {\n decoder.format = 6;\n decoder.linearSpace = false;\n }\n return decoder;\n}\n/**\n * Scan the data of the exr file\n * @param decoder decoder to use\n * @param header header of the exr file\n * @param dataView dataview of the exr file\n * @param offset current offset\n */\nexport function ScanData(decoder, header, dataView, offset) {\n const tmpOffset = { value: 0 };\n for (let scanlineBlockIdx = 0; scanlineBlockIdx < decoder.height / decoder.scanlineBlockSize; scanlineBlockIdx++) {\n const line = ParseInt32(dataView, offset) - header.dataWindow.yMin; // line_no\n decoder.size = ParseUint32(dataView, offset); // data_len\n decoder.lines = line + decoder.scanlineBlockSize > decoder.height ? decoder.height - line : decoder.scanlineBlockSize;\n const isCompressed = decoder.size < decoder.lines * decoder.bytesPerLine;\n const viewer = isCompressed && decoder.uncompress ? decoder.uncompress(decoder) : UncompressRAW(decoder);\n offset.value += decoder.size;\n for (let lineY = 0; lineY < decoder.scanlineBlockSize; lineY++) {\n const scanY = scanlineBlockIdx * decoder.scanlineBlockSize;\n const trueY = lineY + decoder.scanOrder(scanY);\n if (trueY >= decoder.height) {\n continue;\n }\n const lineOffset = lineY * decoder.bytesPerLine;\n const outLineOffset = (decoder.height - 1 - trueY) * decoder.outLineWidth;\n for (let channelID = 0; channelID < decoder.channels; channelID++) {\n const name = header.channels[channelID].name;\n const lOff = decoder.channelLineOffsets[name];\n const cOff = decoder.decodeChannels[name];\n if (cOff === undefined) {\n continue;\n }\n tmpOffset.value = lineOffset + lOff;\n for (let x = 0; x < decoder.width; x++) {\n const outIndex = outLineOffset + x * decoder.outputChannels + cOff;\n if (decoder.byteArray) {\n decoder.byteArray[outIndex] = decoder.getter(viewer, tmpOffset);\n }\n }\n }\n }\n }\n}\n//# sourceMappingURL=exrLoader.decoder.js.map","import { GetExrHeader } from \"./EXR/exrLoader.header.js\";\nimport { CreateDecoderAsync, ScanData } from \"./EXR/exrLoader.decoder.js\";\nimport { ExrLoaderGlobalConfiguration, EXROutputType } from \"./EXR/exrLoader.configuration.js\";\nimport { Logger } from \"../../../Misc/logger.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\n/**\n * Loader for .exr file format\n * @see [PIZ compression](https://playground.babylonjs.com/#4RN0VF#151)\n * @see [ZIP compression](https://playground.babylonjs.com/#4RN0VF#146)\n * @see [RLE compression](https://playground.babylonjs.com/#4RN0VF#149)\n * @see [PXR24 compression](https://playground.babylonjs.com/#4RN0VF#150)\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class _ExrTextureLoader {\n constructor() {\n /**\n * Defines whether the loader supports cascade loading the different faces.\n */\n this.supportCascades = false;\n }\n /**\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\n * @param _data contains the texture data\n * @param _texture defines the BabylonJS internal texture\n * @param _createPolynomials will be true if polynomials have been requested\n * @param _onLoad defines the callback to trigger once the texture is ready\n * @param _onError defines the callback to trigger in case of error\n * Cube texture are not supported by .exr files\n */\n loadCubeData(_data, _texture, _createPolynomials, _onLoad, _onError) {\n // eslint-disable-next-line no-throw-literal\n throw \".exr not supported in Cube.\";\n }\n /**\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\n * @param data contains the texture data\n * @param texture defines the BabylonJS internal texture\n * @param callback defines the method to call once ready to upload\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n loadData(data, texture, callback) {\n const dataView = new DataView(data.buffer);\n const offset = { value: 0 };\n const header = GetExrHeader(dataView, offset);\n CreateDecoderAsync(header, dataView, offset, ExrLoaderGlobalConfiguration.DefaultOutputType)\n // eslint-disable-next-line github/no-then\n .then((decoder) => {\n ScanData(decoder, header, dataView, offset);\n // Updating texture\n const width = header.dataWindow.xMax - header.dataWindow.xMin + 1;\n const height = header.dataWindow.yMax - header.dataWindow.yMin + 1;\n callback(width, height, texture.generateMipMaps, false, () => {\n const engine = texture.getEngine();\n texture.format = header.format;\n texture.type = decoder.textureType;\n texture.invertY = false;\n texture._gammaSpace = !header.linearSpace;\n if (decoder.byteArray) {\n engine._uploadDataToTextureDirectly(texture, decoder.byteArray, 0, 0, undefined, true);\n }\n });\n })\n // eslint-disable-next-line github/no-then\n .catch((error) => {\n Logger.Error(\"Failed to load EXR texture: \", error);\n });\n }\n}\n/**\n * Read the EXR data from an ArrayBufferView asynchronously.\n * @param data ArrayBufferView containing the EXR data\n * @returns An object containing the width, height, and data of the EXR texture.\n */\nexport async function ReadExrDataAsync(data) {\n const dataView = new DataView(data);\n const offset = { value: 0 };\n const header = GetExrHeader(dataView, offset);\n try {\n const decoder = await CreateDecoderAsync(header, dataView, offset, EXROutputType.Float);\n ScanData(decoder, header, dataView, offset);\n if (!decoder.byteArray) {\n Logger.Error(\"Failed to decode EXR data: No byte array available.\");\n return { width: 0, height: 0, data: null };\n }\n return {\n width: header.dataWindow.xMax - header.dataWindow.xMin + 1,\n height: header.dataWindow.yMax - header.dataWindow.yMin + 1,\n data: new Float32Array(decoder.byteArray),\n };\n }\n catch (error) {\n Logger.Error(\"Failed to load EXR data: \", error);\n }\n return { width: 0, height: 0, data: null };\n}\n//# sourceMappingURL=exrTextureLoader.js.map"],"names":["INT32_SIZE","FLOAT32_SIZE","INT8_SIZE","INT16_SIZE","ULONG_SIZE","USHORT_RANGE","BITMAP_SIZE","HUF_ENCBITS","HUF_DECBITS","HUF_ENCSIZE","HUF_DECSIZE","HUF_DECMASK","SHORT_ZEROCODE_RUN","LONG_ZEROCODE_RUN","SHORTEST_LONG_RUN","CompressionCodes","LineOrders","Tables","GenerateTables","buffer","floatView","uint32View","baseTable","shiftTable","e","mantissaTable","exponentTable","offsetTable","m","ParseNullTerminatedString","offset","uintBuffer","endOffset","stringValue","ParseInt32","dataView","value","ParseUint32","ParseUint8","ParseUint16","ParseUint8Array","array","ParseInt64","int","ParseFloat32","ParseFloat16","DecodeFloat16","binary","exponent","fraction","ToHalfFloat","Clamp","f","DecodeFloat32","ParseFixedLengthString","size","ParseRational","x","y","ParseTimecode","ParseV2f","ParseV3f","z","ParseChlist","startOffset","channels","name","pixelType","pLinear","xSampling","ySampling","ParseChromaticities","redX","redY","greenX","greenY","blueX","blueY","whiteX","whiteY","ParseCompression","ParseBox2i","xMin","yMin","xMax","yMax","ParseLineOrder","lineOrder","ParseValue","type","Predictor","source","d","InterleaveScalar","out","t1","t2","s","stop","EXR_MAGIC","GetExrHeader","version","specData","spec","headerData","keepReading","attributeName","attributeType","attributeSize","attributeValue","Logger","NBITS","A_OFFSET","MOD_MASK","ReverseLutFromBitmap","bitmap","lut","k","i","n","HufClearDecTable","hdec","GetBits","nBits","c","lc","GetChar","GetCode","po","rlc","outBuffer","outBufferOffset","outBufferEndOffset","gc","cs","HufTableBuffer","HufCanonicalCodeTable","hcode","nc","l","HufUnpackEncTable","ni","im","iM","p","gb","zerun","HufLength","code","HufCode","HufBuildDecTable","hdecod","pl","plOffset","HufDecode","encodingTable","decodingTable","no","outOffset","inOffsetEnd","index","gCode","j","HufUncompress","nCompressed","nRaw","initialInOffset","freq","UInt16","Int16","ref","Wdec14","h","ls","hi","ai","as","bs","Wdec16","bb","Wav2Decode","nx","ox","ny","oy","mx","w14","p2","py","ey","oy1","oy2","ox1","ox2","i00","i01","i10","i11","px","ex","p01","p10","p11","result","ApplyLut","data","nData","DecodeRunLength","reader","count","UncompressRAW","decoder","UncompressRLE","compressed","rawBuffer","tmpBuffer","UncompressZIP","UncompressPXR","sz","tmpBufferEnd","writePtr","ptr","pixel","diff","UncompressPIZ","inDataView","inOffset","outBufferEnd","pizChannelData","minNonZero","maxNonZero","maxValue","length","cd","tmpOffset","cp","EXROutputType","ExrLoaderGlobalConfiguration","CreateDecoderAsync","header","outputType","Tools","channel","fillAlpha","byteOffset","ScanData","scanlineBlockIdx","line","viewer","lineY","scanY","trueY","lineOffset","outLineOffset","channelID","lOff","cOff","outIndex","_ExrTextureLoader","_data","_texture","_createPolynomials","_onLoad","_onError","texture","callback","width","height","engine","error"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}
|
|
1
|
+
{"version":3,"file":"exrTextureLoader-CWNwDbqP.js","sources":["../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.interfaces.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.core.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.header.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.compression.rle.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.compression.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.configuration.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.decoder.js","../node_modules/@babylonjs/core/Materials/Textures/Loaders/exrTextureLoader.js"],"sourcesContent":["export const INT32_SIZE = 4;\nexport const FLOAT32_SIZE = 4;\nexport const INT8_SIZE = 1;\nexport const INT16_SIZE = 2;\nexport const ULONG_SIZE = 8;\nexport const USHORT_RANGE = 1 << 16;\nexport const BITMAP_SIZE = USHORT_RANGE >> 3;\nexport const HUF_ENCBITS = 16;\nexport const HUF_DECBITS = 14;\nexport const HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1;\nexport const HUF_DECSIZE = 1 << HUF_DECBITS;\nexport const HUF_DECMASK = HUF_DECSIZE - 1;\nexport const SHORT_ZEROCODE_RUN = 59;\nexport const LONG_ZEROCODE_RUN = 63;\nexport const SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;\n//# sourceMappingURL=exrLoader.interfaces.js.map","import { Clamp } from \"../../../../Maths/math.scalar.functions.js\";\nimport { FLOAT32_SIZE, INT16_SIZE, INT32_SIZE, INT8_SIZE, ULONG_SIZE } from \"./exrLoader.interfaces.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\nexport var CompressionCodes;\n(function (CompressionCodes) {\n CompressionCodes[CompressionCodes[\"NO_COMPRESSION\"] = 0] = \"NO_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"RLE_COMPRESSION\"] = 1] = \"RLE_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"ZIPS_COMPRESSION\"] = 2] = \"ZIPS_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"ZIP_COMPRESSION\"] = 3] = \"ZIP_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"PIZ_COMPRESSION\"] = 4] = \"PIZ_COMPRESSION\";\n CompressionCodes[CompressionCodes[\"PXR24_COMPRESSION\"] = 5] = \"PXR24_COMPRESSION\";\n})(CompressionCodes || (CompressionCodes = {}));\nvar LineOrders;\n(function (LineOrders) {\n LineOrders[LineOrders[\"INCREASING_Y\"] = 0] = \"INCREASING_Y\";\n LineOrders[LineOrders[\"DECREASING_Y\"] = 1] = \"DECREASING_Y\";\n})(LineOrders || (LineOrders = {}));\nconst Tables = GenerateTables();\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\nfunction GenerateTables() {\n // float32 to float16 helpers\n const buffer = new ArrayBuffer(4);\n const floatView = new Float32Array(buffer);\n const uint32View = new Uint32Array(buffer);\n const baseTable = new Uint32Array(512);\n const shiftTable = new Uint32Array(512);\n for (let i = 0; i < 256; ++i) {\n const e = i - 127;\n // very small number (0, -0)\n if (e < -27) {\n baseTable[i] = 0x0000;\n baseTable[i | 0x100] = 0x8000;\n shiftTable[i] = 24;\n shiftTable[i | 0x100] = 24;\n // small number (denorm)\n }\n else if (e < -14) {\n baseTable[i] = 0x0400 >> (-e - 14);\n baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000;\n shiftTable[i] = -e - 1;\n shiftTable[i | 0x100] = -e - 1;\n // normal number\n }\n else if (e <= 15) {\n baseTable[i] = (e + 15) << 10;\n baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000;\n shiftTable[i] = 13;\n shiftTable[i | 0x100] = 13;\n // large number (Infinity, -Infinity)\n }\n else if (e < 128) {\n baseTable[i] = 0x7c00;\n baseTable[i | 0x100] = 0xfc00;\n shiftTable[i] = 24;\n shiftTable[i | 0x100] = 24;\n // stay (NaN, Infinity, -Infinity)\n }\n else {\n baseTable[i] = 0x7c00;\n baseTable[i | 0x100] = 0xfc00;\n shiftTable[i] = 13;\n shiftTable[i | 0x100] = 13;\n }\n }\n // float16 to float32 helpers\n const mantissaTable = new Uint32Array(2048);\n const exponentTable = new Uint32Array(64);\n const offsetTable = new Uint32Array(64);\n for (let i = 1; i < 1024; ++i) {\n let m = i << 13; // zero pad mantissa bits\n let e = 0; // zero exponent\n // normalized\n while ((m & 0x00800000) === 0) {\n m <<= 1;\n e -= 0x00800000; // decrement exponent\n }\n m &= ~0x00800000; // clear leading 1 bit\n e += 0x38800000; // adjust bias\n mantissaTable[i] = m | e;\n }\n for (let i = 1024; i < 2048; ++i) {\n mantissaTable[i] = 0x38000000 + ((i - 1024) << 13);\n }\n for (let i = 1; i < 31; ++i) {\n exponentTable[i] = i << 23;\n }\n exponentTable[31] = 0x47800000;\n exponentTable[32] = 0x80000000;\n for (let i = 33; i < 63; ++i) {\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\n }\n exponentTable[63] = 0xc7800000;\n for (let i = 1; i < 64; ++i) {\n if (i !== 32) {\n offsetTable[i] = 1024;\n }\n }\n return {\n floatView: floatView,\n uint32View: uint32View,\n baseTable: baseTable,\n shiftTable: shiftTable,\n mantissaTable: mantissaTable,\n exponentTable: exponentTable,\n offsetTable: offsetTable,\n };\n}\n/**\n * Parse a null terminated string from the buffer\n * @param buffer buffer to read from\n * @param offset current offset in the buffer\n * @returns a string\n */\nexport function ParseNullTerminatedString(buffer, offset) {\n const uintBuffer = new Uint8Array(buffer);\n let endOffset = 0;\n while (uintBuffer[offset.value + endOffset] != 0) {\n endOffset += 1;\n }\n const stringValue = new TextDecoder().decode(uintBuffer.slice(offset.value, offset.value + endOffset));\n offset.value = offset.value + endOffset + 1;\n return stringValue;\n}\n/**\n * Parse an int32 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns an int32\n */\nexport function ParseInt32(dataView, offset) {\n const value = dataView.getInt32(offset.value, true);\n offset.value += INT32_SIZE;\n return value;\n}\n/**\n * Parse an uint32 from the buffer\n * @param dataView data view to read from\n * @param offset offset in the data view\n * @returns an uint32\n */\nexport function ParseUint32(dataView, offset) {\n const value = dataView.getUint32(offset.value, true);\n offset.value += INT32_SIZE;\n return value;\n}\n/**\n * Parse an uint8 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns an uint8\n */\nexport function ParseUint8(dataView, offset) {\n const value = dataView.getUint8(offset.value);\n offset.value += INT8_SIZE;\n return value;\n}\n/**\n * Parse an uint16 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns an uint16\n */\nexport function ParseUint16(dataView, offset) {\n const value = dataView.getUint16(offset.value, true);\n offset.value += INT16_SIZE;\n return value;\n}\n/**\n * Parse an uint8 from an array buffer\n * @param array array buffer\n * @param offset current offset in the data view\n * @returns an uint16\n */\nexport function ParseUint8Array(array, offset) {\n const value = array[offset.value];\n offset.value += INT8_SIZE;\n return value;\n}\n/**\n * Parse an int64 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns an int64\n */\nexport function ParseInt64(dataView, offset) {\n let int;\n if (\"getBigInt64\" in DataView.prototype) {\n int = Number(dataView.getBigInt64(offset.value, true));\n }\n else {\n int = dataView.getUint32(offset.value + 4, true) + Number(dataView.getUint32(offset.value, true) << 32);\n }\n offset.value += ULONG_SIZE;\n return int;\n}\n/**\n * Parse a float32 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns a float32\n */\nexport function ParseFloat32(dataView, offset) {\n const value = dataView.getFloat32(offset.value, true);\n offset.value += FLOAT32_SIZE;\n return value;\n}\n/**\n * Parse a float16 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns a float16\n */\nexport function ParseFloat16(dataView, offset) {\n return DecodeFloat16(ParseUint16(dataView, offset));\n}\nfunction DecodeFloat16(binary) {\n const exponent = (binary & 0x7c00) >> 10;\n const fraction = binary & 0x03ff;\n return ((binary >> 15 ? -1 : 1) *\n (exponent ? (exponent === 0x1f ? (fraction ? NaN : Infinity) : Math.pow(2, exponent - 15) * (1 + fraction / 0x400)) : 6.103515625e-5 * (fraction / 0x400)));\n}\nfunction ToHalfFloat(value) {\n if (Math.abs(value) > 65504) {\n throw new Error(\"Value out of range.Consider using float instead of half-float.\");\n }\n value = Clamp(value, -65504, 65504);\n Tables.floatView[0] = value;\n const f = Tables.uint32View[0];\n const e = (f >> 23) & 0x1ff;\n return Tables.baseTable[e] + ((f & 0x007fffff) >> Tables.shiftTable[e]);\n}\n/**\n * Decode a float32 from the buffer\n * @param dataView dataview on the data\n * @param offset current offset in the data view\n * @returns a float32\n */\nexport function DecodeFloat32(dataView, offset) {\n return ToHalfFloat(ParseFloat32(dataView, offset));\n}\nfunction ParseFixedLengthString(buffer, offset, size) {\n const stringValue = new TextDecoder().decode(new Uint8Array(buffer).slice(offset.value, offset.value + size));\n offset.value = offset.value + size;\n return stringValue;\n}\nfunction ParseRational(dataView, offset) {\n const x = ParseInt32(dataView, offset);\n const y = ParseUint32(dataView, offset);\n return [x, y];\n}\nfunction ParseTimecode(dataView, offset) {\n const x = ParseUint32(dataView, offset);\n const y = ParseUint32(dataView, offset);\n return [x, y];\n}\nfunction ParseV2f(dataView, offset) {\n const x = ParseFloat32(dataView, offset);\n const y = ParseFloat32(dataView, offset);\n return [x, y];\n}\nfunction ParseV3f(dataView, offset) {\n const x = ParseFloat32(dataView, offset);\n const y = ParseFloat32(dataView, offset);\n const z = ParseFloat32(dataView, offset);\n return [x, y, z];\n}\nfunction ParseChlist(dataView, offset, size) {\n const startOffset = offset.value;\n const channels = [];\n while (offset.value < startOffset + size - 1) {\n const name = ParseNullTerminatedString(dataView.buffer, offset);\n const pixelType = ParseInt32(dataView, offset);\n const pLinear = ParseUint8(dataView, offset);\n offset.value += 3; // reserved, three chars\n const xSampling = ParseInt32(dataView, offset);\n const ySampling = ParseInt32(dataView, offset);\n channels.push({\n name: name,\n pixelType: pixelType,\n pLinear: pLinear,\n xSampling: xSampling,\n ySampling: ySampling,\n });\n }\n offset.value += 1;\n return channels;\n}\nfunction ParseChromaticities(dataView, offset) {\n const redX = ParseFloat32(dataView, offset);\n const redY = ParseFloat32(dataView, offset);\n const greenX = ParseFloat32(dataView, offset);\n const greenY = ParseFloat32(dataView, offset);\n const blueX = ParseFloat32(dataView, offset);\n const blueY = ParseFloat32(dataView, offset);\n const whiteX = ParseFloat32(dataView, offset);\n const whiteY = ParseFloat32(dataView, offset);\n return { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };\n}\nfunction ParseCompression(dataView, offset) {\n return ParseUint8(dataView, offset);\n}\nfunction ParseBox2i(dataView, offset) {\n const xMin = ParseInt32(dataView, offset);\n const yMin = ParseInt32(dataView, offset);\n const xMax = ParseInt32(dataView, offset);\n const yMax = ParseInt32(dataView, offset);\n return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };\n}\nfunction ParseLineOrder(dataView, offset) {\n const lineOrder = ParseUint8(dataView, offset);\n return LineOrders[lineOrder];\n}\n/**\n * Parse a value from the data view\n * @param dataView defines the data view to read from\n * @param offset defines the current offset in the data view\n * @param type defines the type of the value to read\n * @param size defines the size of the value to read\n * @returns the parsed value\n */\nexport function ParseValue(dataView, offset, type, size) {\n switch (type) {\n case \"string\":\n case \"stringvector\":\n case \"iccProfile\":\n return ParseFixedLengthString(dataView.buffer, offset, size);\n case \"chlist\":\n return ParseChlist(dataView, offset, size);\n case \"chromaticities\":\n return ParseChromaticities(dataView, offset);\n case \"compression\":\n return ParseCompression(dataView, offset);\n case \"box2i\":\n return ParseBox2i(dataView, offset);\n case \"lineOrder\":\n return ParseLineOrder(dataView, offset);\n case \"float\":\n return ParseFloat32(dataView, offset);\n case \"v2f\":\n return ParseV2f(dataView, offset);\n case \"v3f\":\n return ParseV3f(dataView, offset);\n case \"int\":\n return ParseInt32(dataView, offset);\n case \"rational\":\n return ParseRational(dataView, offset);\n case \"timecode\":\n return ParseTimecode(dataView, offset);\n case \"preview\":\n offset.value += size;\n return \"skipped\";\n default:\n offset.value += size;\n return undefined;\n }\n}\n/**\n * Revert the endianness of the data\n * @param source defines the source\n */\nexport function Predictor(source) {\n for (let t = 1; t < source.length; t++) {\n const d = source[t - 1] + source[t] - 128;\n source[t] = d;\n }\n}\n/**\n * Interleave pixels\n * @param source defines the data source\n * @param out defines the output\n */\nexport function InterleaveScalar(source, out) {\n let t1 = 0;\n let t2 = Math.floor((source.length + 1) / 2);\n let s = 0;\n const stop = source.length - 1;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (s > stop) {\n break;\n }\n out[s++] = source[t1++];\n if (s > stop) {\n break;\n }\n out[s++] = source[t2++];\n }\n}\n//# sourceMappingURL=exrLoader.core.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Logger } from \"../../../../Misc/logger.js\";\nimport { ParseNullTerminatedString, ParseUint32, ParseValue } from \"./exrLoader.core.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\nconst EXR_MAGIC = 20000630;\n/**\n * Gets the EXR header\n * @param dataView defines the data view to read from\n * @param offset defines the offset to start reading from\n * @returns the header\n */\nexport function GetExrHeader(dataView, offset) {\n if (dataView.getUint32(0, true) != EXR_MAGIC) {\n throw new Error(\"Incorrect OpenEXR format\");\n }\n const version = dataView.getUint8(4);\n const specData = dataView.getUint8(5); // fullMask\n const spec = {\n singleTile: !!(specData & 2),\n longName: !!(specData & 4),\n deepFormat: !!(specData & 8),\n multiPart: !!(specData & 16),\n };\n offset.value = 8;\n const headerData = {};\n let keepReading = true;\n while (keepReading) {\n const attributeName = ParseNullTerminatedString(dataView.buffer, offset);\n if (!attributeName) {\n keepReading = false;\n }\n else {\n const attributeType = ParseNullTerminatedString(dataView.buffer, offset);\n const attributeSize = ParseUint32(dataView, offset);\n const attributeValue = ParseValue(dataView, offset, attributeType, attributeSize);\n if (attributeValue === undefined) {\n Logger.Warn(`Unknown header attribute type ${attributeType}'.`);\n }\n else {\n headerData[attributeName] = attributeValue;\n }\n }\n }\n if ((specData & ~0x04) != 0) {\n throw new Error(\"Unsupported file format\");\n }\n return { version: version, spec: spec, ...headerData };\n}\n//# sourceMappingURL=exrLoader.header.js.map","import { ParseUint32, ParseUint8Array } from \"./exrLoader.core.js\";\nimport { HUF_DECBITS, HUF_DECMASK, HUF_DECSIZE, HUF_ENCSIZE, LONG_ZEROCODE_RUN, SHORT_ZEROCODE_RUN, SHORTEST_LONG_RUN, USHORT_RANGE } from \"./exrLoader.interfaces.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\nconst NBITS = 16;\nconst A_OFFSET = 1 << (NBITS - 1);\nconst MOD_MASK = (1 << NBITS) - 1;\n/** @internal */\nexport function ReverseLutFromBitmap(bitmap, lut) {\n let k = 0;\n for (let i = 0; i < USHORT_RANGE; ++i) {\n if (i == 0 || bitmap[i >> 3] & (1 << (i & 7))) {\n lut[k++] = i;\n }\n }\n const n = k - 1;\n while (k < USHORT_RANGE) {\n lut[k++] = 0;\n }\n return n;\n}\nfunction HufClearDecTable(hdec) {\n for (let i = 0; i < HUF_DECSIZE; i++) {\n hdec[i] = {};\n hdec[i].len = 0;\n hdec[i].lit = 0;\n hdec[i].p = null;\n }\n}\nfunction GetBits(nBits, c, lc, array, offset) {\n while (lc < nBits) {\n c = (c << 8) | ParseUint8Array(array, offset);\n lc += 8;\n }\n lc -= nBits;\n return {\n l: (c >> lc) & ((1 << nBits) - 1),\n c,\n lc,\n };\n}\nfunction GetChar(c, lc, array, offset) {\n c = (c << 8) | ParseUint8Array(array, offset);\n lc += 8;\n return {\n c,\n lc,\n };\n}\nfunction GetCode(po, rlc, c, lc, array, offset, outBuffer, outBufferOffset, outBufferEndOffset) {\n if (po == rlc) {\n if (lc < 8) {\n const gc = GetChar(c, lc, array, offset);\n c = gc.c;\n lc = gc.lc;\n }\n lc -= 8;\n let cs = c >> lc;\n cs = new Uint8Array([cs])[0];\n if (outBufferOffset.value + cs > outBufferEndOffset) {\n return null;\n }\n const s = outBuffer[outBufferOffset.value - 1];\n while (cs-- > 0) {\n outBuffer[outBufferOffset.value++] = s;\n }\n }\n else if (outBufferOffset.value < outBufferEndOffset) {\n outBuffer[outBufferOffset.value++] = po;\n }\n else {\n return null;\n }\n return { c, lc };\n}\nconst HufTableBuffer = new Array(59);\nfunction HufCanonicalCodeTable(hcode) {\n for (let i = 0; i <= 58; ++i) {\n HufTableBuffer[i] = 0;\n }\n for (let i = 0; i < HUF_ENCSIZE; ++i) {\n HufTableBuffer[hcode[i]] += 1;\n }\n let c = 0;\n for (let i = 58; i > 0; --i) {\n const nc = (c + HufTableBuffer[i]) >> 1;\n HufTableBuffer[i] = c;\n c = nc;\n }\n for (let i = 0; i < HUF_ENCSIZE; ++i) {\n const l = hcode[i];\n if (l > 0) {\n hcode[i] = l | (HufTableBuffer[l]++ << 6);\n }\n }\n}\nfunction HufUnpackEncTable(array, offset, ni, im, iM, hcode) {\n const p = offset;\n let c = 0;\n let lc = 0;\n for (; im <= iM; im++) {\n if (p.value - offset.value > ni) {\n return;\n }\n let gb = GetBits(6, c, lc, array, p);\n const l = gb.l;\n c = gb.c;\n lc = gb.lc;\n hcode[im] = l;\n if (l == LONG_ZEROCODE_RUN) {\n if (p.value - offset.value > ni) {\n throw new Error(\"Error in HufUnpackEncTable\");\n }\n gb = GetBits(8, c, lc, array, p);\n let zerun = gb.l + SHORTEST_LONG_RUN;\n c = gb.c;\n lc = gb.lc;\n if (im + zerun > iM + 1) {\n throw new Error(\"Error in HufUnpackEncTable\");\n }\n while (zerun--) {\n hcode[im++] = 0;\n }\n im--;\n }\n else if (l >= SHORT_ZEROCODE_RUN) {\n let zerun = l - SHORT_ZEROCODE_RUN + 2;\n if (im + zerun > iM + 1) {\n throw new Error(\"Error in HufUnpackEncTable\");\n }\n while (zerun--) {\n hcode[im++] = 0;\n }\n im--;\n }\n }\n HufCanonicalCodeTable(hcode);\n}\nfunction HufLength(code) {\n return code & 63;\n}\nfunction HufCode(code) {\n return code >> 6;\n}\nfunction HufBuildDecTable(hcode, im, iM, hdecod) {\n for (; im <= iM; im++) {\n const c = HufCode(hcode[im]);\n const l = HufLength(hcode[im]);\n if (c >> l) {\n throw new Error(\"Invalid table entry\");\n }\n if (l > HUF_DECBITS) {\n const pl = hdecod[c >> (l - HUF_DECBITS)];\n if (pl.len) {\n throw new Error(\"Invalid table entry\");\n }\n pl.lit++;\n if (pl.p) {\n const p = pl.p;\n pl.p = new Array(pl.lit);\n for (let i = 0; i < pl.lit - 1; ++i) {\n pl.p[i] = p[i];\n }\n }\n else {\n pl.p = new Array(1);\n }\n pl.p[pl.lit - 1] = im;\n }\n else if (l) {\n let plOffset = 0;\n for (let i = 1 << (HUF_DECBITS - l); i > 0; i--) {\n const pl = hdecod[(c << (HUF_DECBITS - l)) + plOffset];\n if (pl.len || pl.p) {\n throw new Error(\"Invalid table entry\");\n }\n pl.len = l;\n pl.lit = im;\n plOffset++;\n }\n }\n }\n return true;\n}\nfunction HufDecode(encodingTable, decodingTable, array, offset, ni, rlc, no, outBuffer, outOffset) {\n let c = 0;\n let lc = 0;\n const outBufferEndOffset = no;\n const inOffsetEnd = Math.trunc(offset.value + (ni + 7) / 8);\n while (offset.value < inOffsetEnd) {\n let gc = GetChar(c, lc, array, offset);\n c = gc.c;\n lc = gc.lc;\n while (lc >= HUF_DECBITS) {\n const index = (c >> (lc - HUF_DECBITS)) & HUF_DECMASK;\n const pl = decodingTable[index];\n if (pl.len) {\n lc -= pl.len;\n const gCode = GetCode(pl.lit, rlc, c, lc, array, offset, outBuffer, outOffset, outBufferEndOffset);\n if (gCode) {\n c = gCode.c;\n lc = gCode.lc;\n }\n }\n else {\n if (!pl.p) {\n throw new Error(\"hufDecode issues\");\n }\n let j;\n for (j = 0; j < pl.lit; j++) {\n const l = HufLength(encodingTable[pl.p[j]]);\n while (lc < l && offset.value < inOffsetEnd) {\n gc = GetChar(c, lc, array, offset);\n c = gc.c;\n lc = gc.lc;\n }\n if (lc >= l) {\n if (HufCode(encodingTable[pl.p[j]]) == ((c >> (lc - l)) & ((1 << l) - 1))) {\n lc -= l;\n const gCode = GetCode(pl.p[j], rlc, c, lc, array, offset, outBuffer, outOffset, outBufferEndOffset);\n if (gCode) {\n c = gCode.c;\n lc = gCode.lc;\n }\n break;\n }\n }\n }\n if (j == pl.lit) {\n throw new Error(\"HufDecode issues\");\n }\n }\n }\n }\n const i = (8 - ni) & 7;\n c >>= i;\n lc -= i;\n while (lc > 0) {\n const pl = decodingTable[(c << (HUF_DECBITS - lc)) & HUF_DECMASK];\n if (pl.len) {\n lc -= pl.len;\n const gCode = GetCode(pl.lit, rlc, c, lc, array, offset, outBuffer, outOffset, outBufferEndOffset);\n if (gCode) {\n c = gCode.c;\n lc = gCode.lc;\n }\n }\n else {\n throw new Error(\"HufDecode issues\");\n }\n }\n return true;\n}\n/** @internal */\nexport function HufUncompress(array, dataView, offset, nCompressed, outBuffer, nRaw) {\n const outOffset = { value: 0 };\n const initialInOffset = offset.value;\n const im = ParseUint32(dataView, offset);\n const iM = ParseUint32(dataView, offset);\n offset.value += 4;\n const nBits = ParseUint32(dataView, offset);\n offset.value += 4;\n if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) {\n throw new Error(\"Wrong HUF_ENCSIZE\");\n }\n const freq = new Array(HUF_ENCSIZE);\n const hdec = new Array(HUF_DECSIZE);\n HufClearDecTable(hdec);\n const ni = nCompressed - (offset.value - initialInOffset);\n HufUnpackEncTable(array, offset, ni, im, iM, freq);\n if (nBits > 8 * (nCompressed - (offset.value - initialInOffset))) {\n throw new Error(\"Wrong hufUncompress\");\n }\n HufBuildDecTable(freq, im, iM, hdec);\n HufDecode(freq, hdec, array, offset, nBits, iM, nRaw, outBuffer, outOffset);\n}\nfunction UInt16(value) {\n return value & 0xffff;\n}\nfunction Int16(value) {\n const ref = UInt16(value);\n return ref > 0x7fff ? ref - 0x10000 : ref;\n}\nfunction Wdec14(l, h) {\n const ls = Int16(l);\n const hs = Int16(h);\n const hi = hs;\n const ai = ls + (hi & 1) + (hi >> 1);\n const as = ai;\n const bs = ai - hi;\n return { a: as, b: bs };\n}\nfunction Wdec16(l, h) {\n const m = UInt16(l);\n const d = UInt16(h);\n const bb = (m - (d >> 1)) & MOD_MASK;\n const aa = (d + bb - A_OFFSET) & MOD_MASK;\n return { a: aa, b: bb };\n}\n/** @internal */\nexport function Wav2Decode(buffer, j, nx, ox, ny, oy, mx) {\n const w14 = mx < 1 << 14;\n const n = nx > ny ? ny : nx;\n let p = 1;\n let p2;\n let py;\n while (p <= n) {\n p <<= 1;\n }\n p >>= 1;\n p2 = p;\n p >>= 1;\n while (p >= 1) {\n py = 0;\n const ey = py + oy * (ny - p2);\n const oy1 = oy * p;\n const oy2 = oy * p2;\n const ox1 = ox * p;\n const ox2 = ox * p2;\n let i00, i01, i10, i11;\n for (; py <= ey; py += oy2) {\n let px = py;\n const ex = py + ox * (nx - p2);\n for (; px <= ex; px += ox2) {\n const p01 = px + ox1;\n const p10 = px + oy1;\n const p11 = p10 + ox1;\n if (w14) {\n let result = Wdec14(buffer[px + j], buffer[p10 + j]);\n i00 = result.a;\n i10 = result.b;\n result = Wdec14(buffer[p01 + j], buffer[p11 + j]);\n i01 = result.a;\n i11 = result.b;\n result = Wdec14(i00, i01);\n buffer[px + j] = result.a;\n buffer[p01 + j] = result.b;\n result = Wdec14(i10, i11);\n buffer[p10 + j] = result.a;\n buffer[p11 + j] = result.b;\n }\n else {\n let result = Wdec16(buffer[px + j], buffer[p10 + j]);\n i00 = result.a;\n i10 = result.b;\n result = Wdec16(buffer[p01 + j], buffer[p11 + j]);\n i01 = result.a;\n i11 = result.b;\n result = Wdec16(i00, i01);\n buffer[px + j] = result.a;\n buffer[p01 + j] = result.b;\n result = Wdec16(i10, i11);\n buffer[p10 + j] = result.a;\n buffer[p11 + j] = result.b;\n }\n }\n if (nx & p) {\n const p10 = px + oy1;\n let result;\n if (w14) {\n result = Wdec14(buffer[px + j], buffer[p10 + j]);\n }\n else {\n result = Wdec16(buffer[px + j], buffer[p10 + j]);\n }\n i00 = result.a;\n buffer[p10 + j] = result.b;\n buffer[px + j] = i00;\n }\n }\n if (ny & p) {\n let px = py;\n const ex = py + ox * (nx - p2);\n for (; px <= ex; px += ox2) {\n const p01 = px + ox1;\n let result;\n if (w14) {\n result = Wdec14(buffer[px + j], buffer[p01 + j]);\n }\n else {\n result = Wdec16(buffer[px + j], buffer[p01 + j]);\n }\n i00 = result.a;\n buffer[p01 + j] = result.b;\n buffer[px + j] = i00;\n }\n }\n p2 = p;\n p >>= 1;\n }\n return py;\n}\n/** @internal */\nexport function ApplyLut(lut, data, nData) {\n for (let i = 0; i < nData; ++i) {\n data[i] = lut[data[i]];\n }\n}\n//# sourceMappingURL=exrLoader.compression.huf.js.map","/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\n/** @internal */\nexport function DecodeRunLength(source) {\n let size = source.byteLength;\n const out = [];\n let p = 0;\n const reader = new DataView(source);\n while (size > 0) {\n const l = reader.getInt8(p++);\n if (l < 0) {\n const count = -l;\n size -= count + 1;\n for (let i = 0; i < count; i++) {\n out.push(reader.getUint8(p++));\n }\n }\n else {\n const count = l;\n size -= 2;\n const value = reader.getUint8(p++);\n for (let i = 0; i < count + 1; i++) {\n out.push(value);\n }\n }\n }\n return out;\n}\n//# sourceMappingURL=exrLoader.compression.rle.js.map","import { ApplyLut, HufUncompress, ReverseLutFromBitmap, Wav2Decode } from \"./exrLoader.compression.huf.js\";\nimport { DecodeRunLength } from \"./exrLoader.compression.rle.js\";\nimport { InterleaveScalar, ParseUint16, ParseUint32, ParseUint8, Predictor } from \"./exrLoader.core.js\";\nimport { BITMAP_SIZE, INT16_SIZE, USHORT_RANGE } from \"./exrLoader.interfaces.js\";\n/**\n * No compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressRAW(decoder) {\n return new DataView(decoder.array.buffer, decoder.offset.value, decoder.size);\n}\n/**\n * RLE compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressRLE(decoder) {\n const compressed = decoder.viewer.buffer.slice(decoder.offset.value, decoder.offset.value + decoder.size);\n const rawBuffer = new Uint8Array(DecodeRunLength(compressed));\n const tmpBuffer = new Uint8Array(rawBuffer.length);\n Predictor(rawBuffer);\n InterleaveScalar(rawBuffer, tmpBuffer);\n return new DataView(tmpBuffer.buffer);\n}\n/**\n * Zip compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressZIP(decoder) {\n const compressed = decoder.array.slice(decoder.offset.value, decoder.offset.value + decoder.size);\n const rawBuffer = fflate.unzlibSync(compressed);\n const tmpBuffer = new Uint8Array(rawBuffer.length);\n Predictor(rawBuffer);\n InterleaveScalar(rawBuffer, tmpBuffer);\n return new DataView(tmpBuffer.buffer);\n}\n/**\n * PXR compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressPXR(decoder) {\n const compressed = decoder.array.slice(decoder.offset.value, decoder.offset.value + decoder.size);\n const rawBuffer = fflate.unzlibSync(compressed);\n const sz = decoder.lines * decoder.channels * decoder.width;\n const tmpBuffer = decoder.type == 1 ? new Uint16Array(sz) : new Uint32Array(sz);\n let tmpBufferEnd = 0;\n let writePtr = 0;\n const ptr = new Array(4);\n for (let y = 0; y < decoder.lines; y++) {\n for (let c = 0; c < decoder.channels; c++) {\n let pixel = 0;\n switch (decoder.type) {\n case 1:\n ptr[0] = tmpBufferEnd;\n ptr[1] = ptr[0] + decoder.width;\n tmpBufferEnd = ptr[1] + decoder.width;\n for (let j = 0; j < decoder.width; ++j) {\n const diff = (rawBuffer[ptr[0]++] << 8) | rawBuffer[ptr[1]++];\n pixel += diff;\n tmpBuffer[writePtr] = pixel;\n writePtr++;\n }\n break;\n case 2:\n ptr[0] = tmpBufferEnd;\n ptr[1] = ptr[0] + decoder.width;\n ptr[2] = ptr[1] + decoder.width;\n tmpBufferEnd = ptr[2] + decoder.width;\n for (let j = 0; j < decoder.width; ++j) {\n const diff = (rawBuffer[ptr[0]++] << 24) | (rawBuffer[ptr[1]++] << 16) | (rawBuffer[ptr[2]++] << 8);\n pixel += diff;\n tmpBuffer[writePtr] = pixel;\n writePtr++;\n }\n break;\n }\n }\n }\n return new DataView(tmpBuffer.buffer);\n}\n/**\n * PIZ compression\n * @param decoder defines the decoder to use\n * @returns a decompressed data view\n */\nexport function UncompressPIZ(decoder) {\n const inDataView = decoder.viewer;\n const inOffset = { value: decoder.offset.value };\n const outBuffer = new Uint16Array(decoder.width * decoder.scanlineBlockSize * (decoder.channels * decoder.type));\n const bitmap = new Uint8Array(BITMAP_SIZE);\n // Setup channel info\n let outBufferEnd = 0;\n const pizChannelData = new Array(decoder.channels);\n for (let i = 0; i < decoder.channels; i++) {\n pizChannelData[i] = {};\n pizChannelData[i][\"start\"] = outBufferEnd;\n pizChannelData[i][\"end\"] = pizChannelData[i][\"start\"];\n pizChannelData[i][\"nx\"] = decoder.width;\n pizChannelData[i][\"ny\"] = decoder.lines;\n pizChannelData[i][\"size\"] = decoder.type;\n outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size;\n }\n // Read range compression data\n const minNonZero = ParseUint16(inDataView, inOffset);\n const maxNonZero = ParseUint16(inDataView, inOffset);\n if (maxNonZero >= BITMAP_SIZE) {\n throw new Error(\"Wrong PIZ_COMPRESSION BITMAP_SIZE\");\n }\n if (minNonZero <= maxNonZero) {\n for (let i = 0; i < maxNonZero - minNonZero + 1; i++) {\n bitmap[i + minNonZero] = ParseUint8(inDataView, inOffset);\n }\n }\n // Reverse LUT\n const lut = new Uint16Array(USHORT_RANGE);\n const maxValue = ReverseLutFromBitmap(bitmap, lut);\n const length = ParseUint32(inDataView, inOffset);\n // Huffman decoding\n HufUncompress(decoder.array, inDataView, inOffset, length, outBuffer, outBufferEnd);\n // Wavelet decoding\n for (let i = 0; i < decoder.channels; ++i) {\n const cd = pizChannelData[i];\n for (let j = 0; j < pizChannelData[i].size; ++j) {\n Wav2Decode(outBuffer, cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, maxValue);\n }\n }\n // Expand the pixel data to their original range\n ApplyLut(lut, outBuffer, outBufferEnd);\n // Rearrange the pixel data into the format expected by the caller.\n let tmpOffset = 0;\n const tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength);\n for (let y = 0; y < decoder.lines; y++) {\n for (let c = 0; c < decoder.channels; c++) {\n const cd = pizChannelData[c];\n const n = cd.nx * cd.size;\n const cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE);\n tmpBuffer.set(cp, tmpOffset);\n tmpOffset += n * INT16_SIZE;\n cd.end += n;\n }\n }\n return new DataView(tmpBuffer.buffer);\n}\n//# sourceMappingURL=exrLoader.compression.js.map","export var EXROutputType;\n(function (EXROutputType) {\n EXROutputType[EXROutputType[\"Float\"] = 0] = \"Float\";\n EXROutputType[EXROutputType[\"HalfFloat\"] = 1] = \"HalfFloat\";\n})(EXROutputType || (EXROutputType = {}));\n/**\n * Class used to store configuration of the exr loader\n */\nexport class ExrLoaderGlobalConfiguration {\n}\n/**\n * Defines the default output type to use (Half float by default)\n */\nExrLoaderGlobalConfiguration.DefaultOutputType = EXROutputType.HalfFloat;\n/**\n * Url to use to load the fflate library (for zip decompression)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nExrLoaderGlobalConfiguration.FFLATEUrl = \"https://unpkg.com/fflate@0.8.2\";\n//# sourceMappingURL=exrLoader.configuration.js.map","import { CompressionCodes, DecodeFloat32, ParseFloat16, ParseFloat32, ParseInt32, ParseInt64, ParseUint16, ParseUint32 } from \"./exrLoader.core.js\";\nimport { UncompressPIZ, UncompressPXR, UncompressRAW, UncompressRLE, UncompressZIP } from \"./exrLoader.compression.js\";\nimport { FLOAT32_SIZE, INT16_SIZE } from \"./exrLoader.interfaces.js\";\n\nimport { Tools } from \"../../../../Misc/tools.js\";\nimport { ExrLoaderGlobalConfiguration, EXROutputType } from \"./exrLoader.configuration.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\n/**\n * Create a decoder for the exr file\n * @param header header of the exr file\n * @param dataView dataview of the exr file\n * @param offset current offset\n * @param outputType expected output type (float or half float)\n * @returns a promise that resolves with the decoder\n */\nexport async function CreateDecoderAsync(header, dataView, offset, outputType) {\n const decoder = {\n size: 0,\n viewer: dataView,\n array: new Uint8Array(dataView.buffer),\n offset: offset,\n width: header.dataWindow.xMax - header.dataWindow.xMin + 1,\n height: header.dataWindow.yMax - header.dataWindow.yMin + 1,\n channels: header.channels.length,\n channelLineOffsets: {},\n scanOrder: () => 0,\n bytesPerLine: 0,\n outLineWidth: 0,\n lines: 0,\n scanlineBlockSize: 0,\n inputSize: null,\n type: 0,\n uncompress: null,\n getter: () => 0,\n format: 5,\n outputChannels: 0,\n decodeChannels: {},\n blockCount: null,\n byteArray: null,\n linearSpace: false,\n textureType: 0,\n };\n switch (header.compression) {\n case CompressionCodes.NO_COMPRESSION:\n decoder.lines = 1;\n decoder.uncompress = UncompressRAW;\n break;\n case CompressionCodes.RLE_COMPRESSION:\n decoder.lines = 1;\n decoder.uncompress = UncompressRLE;\n break;\n case CompressionCodes.ZIPS_COMPRESSION:\n decoder.lines = 1;\n decoder.uncompress = UncompressZIP;\n await Tools.LoadScriptAsync(ExrLoaderGlobalConfiguration.FFLATEUrl);\n break;\n case CompressionCodes.ZIP_COMPRESSION:\n decoder.lines = 16;\n decoder.uncompress = UncompressZIP;\n await Tools.LoadScriptAsync(ExrLoaderGlobalConfiguration.FFLATEUrl);\n break;\n case CompressionCodes.PIZ_COMPRESSION:\n decoder.lines = 32;\n decoder.uncompress = UncompressPIZ;\n break;\n case CompressionCodes.PXR24_COMPRESSION:\n decoder.lines = 16;\n decoder.uncompress = UncompressPXR;\n await Tools.LoadScriptAsync(ExrLoaderGlobalConfiguration.FFLATEUrl);\n break;\n default:\n throw new Error(CompressionCodes[header.compression] + \" is unsupported\");\n }\n decoder.scanlineBlockSize = decoder.lines;\n const channels = {};\n for (const channel of header.channels) {\n switch (channel.name) {\n case \"R\":\n case \"G\":\n case \"B\":\n case \"A\":\n channels[channel.name] = true;\n decoder.type = channel.pixelType;\n break;\n case \"Y\":\n channels[channel.name] = true;\n decoder.type = channel.pixelType;\n // Note: 'Y' is deprecated in OpenGL 3.0+; prefer 'R' for single-channel EXRs.\n break;\n default:\n // Skip unsupported channels\n break;\n }\n }\n // RGB images will be converted to RGBA format, preventing software emulation in select devices.\n let fillAlpha = false;\n if (channels.R && channels.G && channels.B && channels.A) {\n decoder.outputChannels = 4;\n decoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };\n }\n else if (channels.R && channels.G && channels.B) {\n fillAlpha = true;\n decoder.outputChannels = 4;\n decoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };\n }\n else if (channels.R && channels.G) {\n decoder.outputChannels = 2;\n decoder.decodeChannels = { R: 0, G: 1 };\n }\n else if (channels.R) {\n decoder.outputChannels = 1;\n decoder.decodeChannels = { R: 0 };\n }\n else if (channels.Y) {\n decoder.outputChannels = 1;\n decoder.decodeChannels = { Y: 0 };\n // Note: Supporting 'Y' channel for legacy compatibility; prefer 'R' in new EXRs.\n }\n else {\n throw new Error(\"EXRLoader.parse: file contains unsupported data channels.\");\n }\n if (decoder.type === 1) {\n // half\n switch (outputType) {\n case EXROutputType.Float:\n decoder.getter = ParseFloat16;\n decoder.inputSize = INT16_SIZE;\n break;\n case EXROutputType.HalfFloat:\n decoder.getter = ParseUint16;\n decoder.inputSize = INT16_SIZE;\n break;\n }\n }\n else if (decoder.type === 2) {\n // float\n switch (outputType) {\n case EXROutputType.Float:\n decoder.getter = ParseFloat32;\n decoder.inputSize = FLOAT32_SIZE;\n break;\n case EXROutputType.HalfFloat:\n decoder.getter = DecodeFloat32;\n decoder.inputSize = FLOAT32_SIZE;\n }\n }\n else {\n throw new Error(\"Unsupported pixelType \" + decoder.type + \" for \" + header.compression);\n }\n decoder.blockCount = decoder.height / decoder.scanlineBlockSize;\n for (let i = 0; i < decoder.blockCount; i++) {\n ParseInt64(dataView, offset); // scanlineOffset\n }\n // we should be passed the scanline offset table, ready to start reading pixel data.\n const size = decoder.width * decoder.height * decoder.outputChannels;\n switch (outputType) {\n case EXROutputType.Float:\n decoder.byteArray = new Float32Array(size);\n decoder.textureType = 1;\n // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten\n if (fillAlpha) {\n decoder.byteArray.fill(1, 0, size);\n }\n break;\n case EXROutputType.HalfFloat:\n decoder.byteArray = new Uint16Array(size);\n decoder.textureType = 2;\n if (fillAlpha) {\n decoder.byteArray.fill(0x3c00, 0, size); // Uint16Array holds half float data, 0x3C00 is 1\n }\n break;\n default:\n throw new Error(\"Unsupported type: \" + outputType);\n }\n let byteOffset = 0;\n for (const channel of header.channels) {\n if (decoder.decodeChannels[channel.name] !== undefined) {\n decoder.channelLineOffsets[channel.name] = byteOffset * decoder.width;\n }\n byteOffset += channel.pixelType * 2;\n }\n decoder.bytesPerLine = decoder.width * byteOffset;\n decoder.outLineWidth = decoder.width * decoder.outputChannels;\n if (header.lineOrder === \"INCREASING_Y\") {\n decoder.scanOrder = (y) => y;\n }\n else {\n decoder.scanOrder = (y) => decoder.height - 1 - y;\n }\n if (decoder.outputChannels == 4) {\n decoder.format = 5;\n decoder.linearSpace = true;\n }\n else {\n decoder.format = 6;\n decoder.linearSpace = false;\n }\n return decoder;\n}\n/**\n * Scan the data of the exr file\n * @param decoder decoder to use\n * @param header header of the exr file\n * @param dataView dataview of the exr file\n * @param offset current offset\n */\nexport function ScanData(decoder, header, dataView, offset) {\n const tmpOffset = { value: 0 };\n for (let scanlineBlockIdx = 0; scanlineBlockIdx < decoder.height / decoder.scanlineBlockSize; scanlineBlockIdx++) {\n const line = ParseInt32(dataView, offset) - header.dataWindow.yMin; // line_no\n decoder.size = ParseUint32(dataView, offset); // data_len\n decoder.lines = line + decoder.scanlineBlockSize > decoder.height ? decoder.height - line : decoder.scanlineBlockSize;\n const isCompressed = decoder.size < decoder.lines * decoder.bytesPerLine;\n const viewer = isCompressed && decoder.uncompress ? decoder.uncompress(decoder) : UncompressRAW(decoder);\n offset.value += decoder.size;\n for (let lineY = 0; lineY < decoder.scanlineBlockSize; lineY++) {\n const scanY = scanlineBlockIdx * decoder.scanlineBlockSize;\n const trueY = lineY + decoder.scanOrder(scanY);\n if (trueY >= decoder.height) {\n continue;\n }\n const lineOffset = lineY * decoder.bytesPerLine;\n const outLineOffset = (decoder.height - 1 - trueY) * decoder.outLineWidth;\n for (let channelID = 0; channelID < decoder.channels; channelID++) {\n const name = header.channels[channelID].name;\n const lOff = decoder.channelLineOffsets[name];\n const cOff = decoder.decodeChannels[name];\n if (cOff === undefined) {\n continue;\n }\n tmpOffset.value = lineOffset + lOff;\n for (let x = 0; x < decoder.width; x++) {\n const outIndex = outLineOffset + x * decoder.outputChannels + cOff;\n if (decoder.byteArray) {\n decoder.byteArray[outIndex] = decoder.getter(viewer, tmpOffset);\n }\n }\n }\n }\n }\n}\n//# sourceMappingURL=exrLoader.decoder.js.map","import { GetExrHeader } from \"./EXR/exrLoader.header.js\";\nimport { CreateDecoderAsync, ScanData } from \"./EXR/exrLoader.decoder.js\";\nimport { ExrLoaderGlobalConfiguration, EXROutputType } from \"./EXR/exrLoader.configuration.js\";\nimport { Logger } from \"../../../Misc/logger.js\";\n/**\n * Inspired by https://github.com/sciecode/three.js/blob/dev/examples/jsm/loaders/EXRLoader.js\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation.\n */\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n// * Neither the name of the Syoyo Fujita nor the\n// names of its contributors may be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // * Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // * Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // * Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n// // End of OpenEXR license -------------------------------------------------\n/**\n * Loader for .exr file format\n * @see [PIZ compression](https://playground.babylonjs.com/#4RN0VF#151)\n * @see [ZIP compression](https://playground.babylonjs.com/#4RN0VF#146)\n * @see [RLE compression](https://playground.babylonjs.com/#4RN0VF#149)\n * @see [PXR24 compression](https://playground.babylonjs.com/#4RN0VF#150)\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class _ExrTextureLoader {\n constructor() {\n /**\n * Defines whether the loader supports cascade loading the different faces.\n */\n this.supportCascades = false;\n }\n /**\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\n * @param _data contains the texture data\n * @param _texture defines the BabylonJS internal texture\n * @param _createPolynomials will be true if polynomials have been requested\n * @param _onLoad defines the callback to trigger once the texture is ready\n * @param _onError defines the callback to trigger in case of error\n * Cube texture are not supported by .exr files\n */\n loadCubeData(_data, _texture, _createPolynomials, _onLoad, _onError) {\n // eslint-disable-next-line no-throw-literal\n throw \".exr not supported in Cube.\";\n }\n /**\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\n * @param data contains the texture data\n * @param texture defines the BabylonJS internal texture\n * @param callback defines the method to call once ready to upload\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n loadData(data, texture, callback) {\n const dataView = new DataView(data.buffer);\n const offset = { value: 0 };\n const header = GetExrHeader(dataView, offset);\n CreateDecoderAsync(header, dataView, offset, ExrLoaderGlobalConfiguration.DefaultOutputType)\n // eslint-disable-next-line github/no-then\n .then((decoder) => {\n ScanData(decoder, header, dataView, offset);\n // Updating texture\n const width = header.dataWindow.xMax - header.dataWindow.xMin + 1;\n const height = header.dataWindow.yMax - header.dataWindow.yMin + 1;\n callback(width, height, texture.generateMipMaps, false, () => {\n const engine = texture.getEngine();\n texture.format = header.format;\n texture.type = decoder.textureType;\n texture.invertY = false;\n texture._gammaSpace = !header.linearSpace;\n if (decoder.byteArray) {\n engine._uploadDataToTextureDirectly(texture, decoder.byteArray, 0, 0, undefined, true);\n }\n });\n })\n // eslint-disable-next-line github/no-then\n .catch((error) => {\n Logger.Error(\"Failed to load EXR texture: \", error);\n });\n }\n}\n/**\n * Read the EXR data from an ArrayBufferView asynchronously.\n * @param data ArrayBufferView containing the EXR data\n * @returns An object containing the width, height, and data of the EXR texture.\n */\nexport async function ReadExrDataAsync(data) {\n const dataView = new DataView(data);\n const offset = { value: 0 };\n const header = GetExrHeader(dataView, offset);\n try {\n const decoder = await CreateDecoderAsync(header, dataView, offset, EXROutputType.Float);\n ScanData(decoder, header, dataView, offset);\n if (!decoder.byteArray) {\n Logger.Error(\"Failed to decode EXR data: No byte array available.\");\n return { width: 0, height: 0, data: null };\n }\n return {\n width: header.dataWindow.xMax - header.dataWindow.xMin + 1,\n height: header.dataWindow.yMax - header.dataWindow.yMin + 1,\n data: new Float32Array(decoder.byteArray),\n };\n }\n catch (error) {\n Logger.Error(\"Failed to load EXR data: \", error);\n }\n return { width: 0, height: 0, data: null };\n}\n//# sourceMappingURL=exrTextureLoader.js.map"],"names":["INT32_SIZE","FLOAT32_SIZE","INT8_SIZE","INT16_SIZE","ULONG_SIZE","USHORT_RANGE","BITMAP_SIZE","HUF_ENCBITS","HUF_DECBITS","HUF_ENCSIZE","HUF_DECSIZE","HUF_DECMASK","SHORT_ZEROCODE_RUN","LONG_ZEROCODE_RUN","SHORTEST_LONG_RUN","CompressionCodes","LineOrders","Tables","GenerateTables","buffer","floatView","uint32View","baseTable","shiftTable","e","mantissaTable","exponentTable","offsetTable","m","ParseNullTerminatedString","offset","uintBuffer","endOffset","stringValue","ParseInt32","dataView","value","ParseUint32","ParseUint8","ParseUint16","ParseUint8Array","array","ParseInt64","int","ParseFloat32","ParseFloat16","DecodeFloat16","binary","exponent","fraction","ToHalfFloat","Clamp","f","DecodeFloat32","ParseFixedLengthString","size","ParseRational","x","y","ParseTimecode","ParseV2f","ParseV3f","z","ParseChlist","startOffset","channels","name","pixelType","pLinear","xSampling","ySampling","ParseChromaticities","redX","redY","greenX","greenY","blueX","blueY","whiteX","whiteY","ParseCompression","ParseBox2i","xMin","yMin","xMax","yMax","ParseLineOrder","lineOrder","ParseValue","type","Predictor","source","d","InterleaveScalar","out","t1","t2","s","stop","EXR_MAGIC","GetExrHeader","version","specData","spec","headerData","keepReading","attributeName","attributeType","attributeSize","attributeValue","Logger","NBITS","A_OFFSET","MOD_MASK","ReverseLutFromBitmap","bitmap","lut","k","i","n","HufClearDecTable","hdec","GetBits","nBits","c","lc","GetChar","GetCode","po","rlc","outBuffer","outBufferOffset","outBufferEndOffset","gc","cs","HufTableBuffer","HufCanonicalCodeTable","hcode","nc","l","HufUnpackEncTable","ni","im","iM","p","gb","zerun","HufLength","code","HufCode","HufBuildDecTable","hdecod","pl","plOffset","HufDecode","encodingTable","decodingTable","no","outOffset","inOffsetEnd","index","gCode","j","HufUncompress","nCompressed","nRaw","initialInOffset","freq","UInt16","Int16","ref","Wdec14","h","ls","hi","ai","as","bs","Wdec16","bb","Wav2Decode","nx","ox","ny","oy","mx","w14","p2","py","ey","oy1","oy2","ox1","ox2","i00","i01","i10","i11","px","ex","p01","p10","p11","result","ApplyLut","data","nData","DecodeRunLength","reader","count","UncompressRAW","decoder","UncompressRLE","compressed","rawBuffer","tmpBuffer","UncompressZIP","UncompressPXR","sz","tmpBufferEnd","writePtr","ptr","pixel","diff","UncompressPIZ","inDataView","inOffset","outBufferEnd","pizChannelData","minNonZero","maxNonZero","maxValue","length","cd","tmpOffset","cp","EXROutputType","ExrLoaderGlobalConfiguration","CreateDecoderAsync","header","outputType","Tools","channel","fillAlpha","byteOffset","ScanData","scanlineBlockIdx","line","viewer","lineY","scanY","trueY","lineOffset","outLineOffset","channelID","lOff","cOff","outIndex","_ExrTextureLoader","_data","_texture","_createPolynomials","_onLoad","_onError","texture","callback","width","height","engine","error"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}
|
package/dist/graphty.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as o } from "./index-
|
|
1
|
+
import { S as o } from "./index-DM3Dwe0V.js";
|
|
2
2
|
const r = "greasedLinePixelShader", l = `precision highp float;uniform sampler2D grlColors;uniform float grlUseColors;uniform float grlUseDash;uniform float grlDashArray;uniform float grlDashOffset;uniform float grlDashRatio;uniform float grlVisibility;uniform float grlColorsWidth;uniform vec2 grl_colorModeAndColorDistributionType;uniform vec3 grlColor;varying float grlCounters;varying float grlColorPointer;void main() {float grlColorMode=grl_colorModeAndColorDistributionType.x;float grlColorDistributionType=grl_colorModeAndColorDistributionType.y;gl_FragColor=vec4(grlColor,1.);gl_FragColor.a=step(grlCounters,grlVisibility);if (gl_FragColor.a==0.) discard;if( grlUseDash==1. ){gl_FragColor.a=ceil(mod(grlCounters+grlDashOffset,grlDashArray)-(grlDashArray*grlDashRatio));if (gl_FragColor.a==0.) discard;}
|
|
3
3
|
if (grlUseColors==1.) {vec4 textureColor;if (grlColorDistributionType==COLOR_DISTRIBUTION_TYPE_LINE) {
|
|
4
4
|
textureColor=texture2D(grlColors,vec2(grlCounters,0.),0.);} else {textureColor=texture2D(grlColors,vec2(grlColorPointer/grlColorsWidth,0.),0.);}
|
|
@@ -9,4 +9,4 @@ const i = { name: r, shader: l };
|
|
|
9
9
|
export {
|
|
10
10
|
i as greasedLinePixelShader
|
|
11
11
|
};
|
|
12
|
-
//# sourceMappingURL=greasedLine.fragment-
|
|
12
|
+
//# sourceMappingURL=greasedLine.fragment-BtdnWwPJ.js.map
|