{"ast":null,"code":"import _asyncToGenerator from \"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { 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\";\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 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 function CreateDecoderAsync(_x, _x2, _x3, _x4) {\n return _CreateDecoderAsync.apply(this, arguments);\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 */\nfunction _CreateDecoderAsync() {\n _CreateDecoderAsync = _asyncToGenerator(function* (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 yield Tools.LoadScriptAsync(ExrLoaderGlobalConfiguration.FFLATEUrl);\n break;\n case CompressionCodes.ZIP_COMPRESSION:\n decoder.lines = 16;\n decoder.uncompress = UncompressZIP;\n yield 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 yield 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 \"Y\":\n case \"R\":\n case \"G\":\n case \"B\":\n case \"A\":\n channels[channel.name] = true;\n decoder.type = channel.pixelType;\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) {\n fillAlpha = !channels.A;\n decoder.outputChannels = 4;\n decoder.decodeChannels = {\n R: 0,\n G: 1,\n B: 2,\n A: 3\n };\n } else if (channels.Y) {\n decoder.outputChannels = 1;\n decoder.decodeChannels = {\n Y: 0\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 } 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 } 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 } else {\n decoder.scanOrder = y => decoder.height - 1 - y;\n }\n if (decoder.outputChannels == 4) {\n decoder.format = 5;\n decoder.linearSpace = true;\n } else {\n decoder.format = 6;\n decoder.linearSpace = false;\n }\n return decoder;\n });\n return _CreateDecoderAsync.apply(this, arguments);\n}\nexport function ScanData(decoder, header, dataView, offset) {\n const tmpOffset = {\n value: 0\n };\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 line_y = 0; line_y < decoder.scanlineBlockSize; line_y++) {\n const scan_y = scanlineBlockIdx * decoder.scanlineBlockSize;\n const true_y = line_y + decoder.scanOrder(scan_y);\n if (true_y >= decoder.height) {\n continue;\n }\n const lineOffset = line_y * decoder.bytesPerLine;\n const outLineOffset = (decoder.height - 1 - true_y) * 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}","map":{"version":3,"names":["CompressionCodes","DecodeFloat32","ParseFloat16","ParseFloat32","ParseInt32","ParseInt64","ParseUint16","ParseUint32","UncompressPIZ","UncompressPXR","UncompressRAW","UncompressRLE","UncompressZIP","FLOAT32_SIZE","INT16_SIZE","Tools","ExrLoaderGlobalConfiguration","EXROutputType","CreateDecoderAsync","_x","_x2","_x3","_x4","_CreateDecoderAsync","apply","arguments","_asyncToGenerator","header","dataView","offset","outputType","decoder","size","viewer","array","Uint8Array","buffer","width","dataWindow","xMax","xMin","height","yMax","yMin","channels","length","channelLineOffsets","scanOrder","bytesPerLine","outLineWidth","lines","scanlineBlockSize","inputSize","type","uncompress","getter","format","outputChannels","decodeChannels","blockCount","byteArray","linearSpace","textureType","compression","NO_COMPRESSION","RLE_COMPRESSION","ZIPS_COMPRESSION","LoadScriptAsync","FFLATEUrl","ZIP_COMPRESSION","PIZ_COMPRESSION","PXR24_COMPRESSION","Error","channel","name","pixelType","fillAlpha","R","G","B","A","Y","Float","HalfFloat","i","Float32Array","fill","Uint16Array","byteOffset","undefined","lineOrder","y","ScanData","tmpOffset","value","scanlineBlockIdx","line","isCompressed","line_y","scan_y","true_y","lineOffset","outLineOffset","channelID","lOff","cOff","x","outIndex"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Materials/Textures/Loaders/EXR/exrLoader.decoder.js"],"sourcesContent":["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 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 \"Y\":\n case \"R\":\n case \"G\":\n case \"B\":\n case \"A\":\n channels[channel.name] = true;\n decoder.type = channel.pixelType;\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) {\n fillAlpha = !channels.A;\n decoder.outputChannels = 4;\n decoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };\n }\n else if (channels.Y) {\n decoder.outputChannels = 1;\n decoder.decodeChannels = { Y: 0 };\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 line_y = 0; line_y < decoder.scanlineBlockSize; line_y++) {\n const scan_y = scanlineBlockIdx * decoder.scanlineBlockSize;\n const true_y = line_y + decoder.scanOrder(scan_y);\n if (true_y >= decoder.height) {\n continue;\n }\n const lineOffset = line_y * decoder.bytesPerLine;\n const outLineOffset = (decoder.height - 1 - true_y) * 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"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}