1 |
- {"ast":null,"code":"/* eslint-disable @typescript-eslint/naming-convention */\nimport { Clamp } from \"../Maths/math.scalar.functions.js\";\nimport { Logger } from \"../Misc/logger.js\";\nimport { CubeMapToSphericalPolynomialTools } from \"../Misc/HighDynamicRange/cubemapToSphericalPolynomial.js\";\nimport { FromHalfFloat, ToHalfFloat } from \"./textureTools.js\";\nimport \"../Engines/AbstractEngine/abstractEngine.cubeTexture.js\";\n// Based on demo done by Brandon Jones - http://media.tojicode.com/webgl-samples/dds.html\n// All values and structures referenced from:\n// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\nconst DDS_MAGIC = 0x20534444;\nconst\n//DDSD_CAPS = 0x1,\n//DDSD_HEIGHT = 0x2,\n//DDSD_WIDTH = 0x4,\n//DDSD_PITCH = 0x8,\n//DDSD_PIXELFORMAT = 0x1000,\nDDSD_MIPMAPCOUNT = 0x20000;\n//DDSD_LINEARSIZE = 0x80000,\n//DDSD_DEPTH = 0x800000;\n// var DDSCAPS_COMPLEX = 0x8,\n// DDSCAPS_MIPMAP = 0x400000,\n// DDSCAPS_TEXTURE = 0x1000;\nconst DDSCAPS2_CUBEMAP = 0x200;\n// DDSCAPS2_CUBEMAP_POSITIVEX = 0x400,\n// DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800,\n// DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000,\n// DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000,\n// DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000,\n// DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000,\n// DDSCAPS2_VOLUME = 0x200000;\nconst\n //DDPF_ALPHAPIXELS = 0x1,\n //DDPF_ALPHA = 0x2,\n DDPF_FOURCC = 0x4,\n DDPF_RGB = 0x40,\n //DDPF_YUV = 0x200,\n DDPF_LUMINANCE = 0x20000;\nfunction FourCCToInt32(value) {\n return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24);\n}\nfunction Int32ToFourCC(value) {\n return String.fromCharCode(value & 0xff, value >> 8 & 0xff, value >> 16 & 0xff, value >> 24 & 0xff);\n}\nconst FOURCC_DXT1 = FourCCToInt32(\"DXT1\");\nconst FOURCC_DXT3 = FourCCToInt32(\"DXT3\");\nconst FOURCC_DXT5 = FourCCToInt32(\"DXT5\");\nconst FOURCC_DX10 = FourCCToInt32(\"DX10\");\nconst FOURCC_D3DFMT_R16G16B16A16F = 113;\nconst FOURCC_D3DFMT_R32G32B32A32F = 116;\nconst DXGI_FORMAT_R32G32B32A32_FLOAT = 2;\nconst DXGI_FORMAT_R16G16B16A16_FLOAT = 10;\nconst DXGI_FORMAT_B8G8R8X8_UNORM = 88;\nconst headerLengthInt = 31; // The header length in 32 bit ints\n// Offsets into the header array\nconst off_magic = 0;\nconst off_size = 1;\nconst off_flags = 2;\nconst off_height = 3;\nconst off_width = 4;\nconst off_mipmapCount = 7;\nconst off_pfFlags = 20;\nconst off_pfFourCC = 21;\nconst off_RGBbpp = 22;\nconst off_RMask = 23;\nconst off_GMask = 24;\nconst off_BMask = 25;\nconst off_AMask = 26;\n// var off_caps1 = 27;\nconst off_caps2 = 28;\n// var off_caps3 = 29;\n// var off_caps4 = 30;\nconst off_dxgiFormat = 32;\n/**\n * Class used to provide DDS decompression tools\n */\nexport class DDSTools {\n /**\n * Gets DDS information from an array buffer\n * @param data defines the array buffer view to read data from\n * @returns the DDS information\n */\n static GetDDSInfo(data) {\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\n const extendedHeader = new Int32Array(data.buffer, data.byteOffset, headerLengthInt + 4);\n let mipmapCount = 1;\n if (header[off_flags] & DDSD_MIPMAPCOUNT) {\n mipmapCount = Math.max(1, header[off_mipmapCount]);\n }\n const fourCC = header[off_pfFourCC];\n const dxgiFormat = fourCC === FOURCC_DX10 ? extendedHeader[off_dxgiFormat] : 0;\n let textureType = 0;\n switch (fourCC) {\n case FOURCC_D3DFMT_R16G16B16A16F:\n textureType = 2;\n break;\n case FOURCC_D3DFMT_R32G32B32A32F:\n textureType = 1;\n break;\n case FOURCC_DX10:\n if (dxgiFormat === DXGI_FORMAT_R16G16B16A16_FLOAT) {\n textureType = 2;\n break;\n }\n if (dxgiFormat === DXGI_FORMAT_R32G32B32A32_FLOAT) {\n textureType = 1;\n break;\n }\n }\n return {\n width: header[off_width],\n height: header[off_height],\n mipmapCount: mipmapCount,\n isFourCC: (header[off_pfFlags] & DDPF_FOURCC) === DDPF_FOURCC,\n isRGB: (header[off_pfFlags] & DDPF_RGB) === DDPF_RGB,\n isLuminance: (header[off_pfFlags] & DDPF_LUMINANCE) === DDPF_LUMINANCE,\n isCube: (header[off_caps2] & DDSCAPS2_CUBEMAP) === DDSCAPS2_CUBEMAP,\n isCompressed: fourCC === FOURCC_DXT1 || fourCC === FOURCC_DXT3 || fourCC === FOURCC_DXT5,\n dxgiFormat: dxgiFormat,\n textureType: textureType\n };\n }\n static _GetHalfFloatAsFloatRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n const destArray = new Float32Array(dataLength);\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = FromHalfFloat(srcData[srcPos]);\n destArray[index + 1] = FromHalfFloat(srcData[srcPos + 1]);\n destArray[index + 2] = FromHalfFloat(srcData[srcPos + 2]);\n if (DDSTools.StoreLODInAlphaChannel) {\n destArray[index + 3] = lod;\n } else {\n destArray[index + 3] = FromHalfFloat(srcData[srcPos + 3]);\n }\n index += 4;\n }\n }\n return destArray;\n }\n static _GetHalfFloatRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n if (DDSTools.StoreLODInAlphaChannel) {\n const destArray = new Uint16Array(dataLength);\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = srcData[srcPos];\n destArray[index + 1] = srcData[srcPos + 1];\n destArray[index + 2] = srcData[srcPos + 2];\n destArray[index + 3] = ToHalfFloat(lod);\n index += 4;\n }\n }\n return destArray;\n }\n return new Uint16Array(arrayBuffer, dataOffset, dataLength);\n }\n static _GetFloatRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n if (DDSTools.StoreLODInAlphaChannel) {\n const destArray = new Float32Array(dataLength);\n const srcData = new Float32Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = srcData[srcPos];\n destArray[index + 1] = srcData[srcPos + 1];\n destArray[index + 2] = srcData[srcPos + 2];\n destArray[index + 3] = lod;\n index += 4;\n }\n }\n return destArray;\n }\n return new Float32Array(arrayBuffer, dataOffset, dataLength);\n }\n static _GetFloatAsHalfFloatRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n const destArray = new Uint16Array(dataLength);\n const srcData = new Float32Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n destArray[index] = ToHalfFloat(srcData[index]);\n destArray[index + 1] = ToHalfFloat(srcData[index + 1]);\n destArray[index + 2] = ToHalfFloat(srcData[index + 2]);\n if (DDSTools.StoreLODInAlphaChannel) {\n destArray[index + 3] = ToHalfFloat(lod);\n } else {\n destArray[index + 3] = ToHalfFloat(srcData[index + 3]);\n }\n index += 4;\n }\n }\n return destArray;\n }\n static _GetFloatAsUIntRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n const destArray = new Uint8Array(dataLength);\n const srcData = new Float32Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = Clamp(srcData[srcPos]) * 255;\n destArray[index + 1] = Clamp(srcData[srcPos + 1]) * 255;\n destArray[index + 2] = Clamp(srcData[srcPos + 2]) * 255;\n if (DDSTools.StoreLODInAlphaChannel) {\n destArray[index + 3] = lod;\n } else {\n destArray[index + 3] = Clamp(srcData[srcPos + 3]) * 255;\n }\n index += 4;\n }\n }\n return destArray;\n }\n static _GetHalfFloatAsUIntRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n const destArray = new Uint8Array(dataLength);\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = Clamp(FromHalfFloat(srcData[srcPos])) * 255;\n destArray[index + 1] = Clamp(FromHalfFloat(srcData[srcPos + 1])) * 255;\n destArray[index + 2] = Clamp(FromHalfFloat(srcData[srcPos + 2])) * 255;\n if (DDSTools.StoreLODInAlphaChannel) {\n destArray[index + 3] = lod;\n } else {\n destArray[index + 3] = Clamp(FromHalfFloat(srcData[srcPos + 3])) * 255;\n }\n index += 4;\n }\n }\n return destArray;\n }\n static _GetRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, rOffset, gOffset, bOffset, aOffset) {\n const byteArray = new Uint8Array(dataLength);\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n byteArray[index] = srcData[srcPos + rOffset];\n byteArray[index + 1] = srcData[srcPos + gOffset];\n byteArray[index + 2] = srcData[srcPos + bOffset];\n byteArray[index + 3] = srcData[srcPos + aOffset];\n index += 4;\n }\n }\n return byteArray;\n }\n static _ExtractLongWordOrder(value) {\n if (value === 0 || value === 255 || value === -16777216) {\n return 0;\n }\n return 1 + DDSTools._ExtractLongWordOrder(value >> 8);\n }\n static _GetRGBArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, rOffset, gOffset, bOffset) {\n const byteArray = new Uint8Array(dataLength);\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 3;\n byteArray[index] = srcData[srcPos + rOffset];\n byteArray[index + 1] = srcData[srcPos + gOffset];\n byteArray[index + 2] = srcData[srcPos + bOffset];\n index += 3;\n }\n }\n return byteArray;\n }\n static _GetLuminanceArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer) {\n const byteArray = new Uint8Array(dataLength);\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = x + y * width;\n byteArray[index] = srcData[srcPos];\n index++;\n }\n }\n return byteArray;\n }\n /**\n * Uploads DDS Levels to a Babylon Texture\n * @internal\n */\n static UploadDDSLevels(engine, texture, data, info, loadMipmaps, faces, lodIndex = -1, currentFace, destTypeMustBeFilterable = true) {\n let sphericalPolynomialFaces = null;\n if (info.sphericalPolynomial) {\n sphericalPolynomialFaces = [];\n }\n const ext = !!engine.getCaps().s3tc;\n // TODO WEBGPU Once generateMipMaps is split into generateMipMaps + hasMipMaps in InternalTexture this line can be removed\n texture.generateMipMaps = loadMipmaps;\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\n let fourCC,\n width,\n height,\n dataLength = 0,\n dataOffset;\n let byteArray, mipmapCount, mip;\n let internalCompressedFormat = 0;\n let blockBytes = 1;\n if (header[off_magic] !== DDS_MAGIC) {\n Logger.Error(\"Invalid magic number in DDS header\");\n return;\n }\n if (!info.isFourCC && !info.isRGB && !info.isLuminance) {\n Logger.Error(\"Unsupported format, must contain a FourCC, RGB or LUMINANCE code\");\n return;\n }\n if (info.isCompressed && !ext) {\n Logger.Error(\"Compressed textures are not supported on this platform.\");\n return;\n }\n let bpp = header[off_RGBbpp];\n dataOffset = header[off_size] + 4;\n let computeFormats = false;\n if (info.isFourCC) {\n fourCC = header[off_pfFourCC];\n switch (fourCC) {\n case FOURCC_DXT1:\n blockBytes = 8;\n internalCompressedFormat = 33777;\n break;\n case FOURCC_DXT3:\n blockBytes = 16;\n internalCompressedFormat = 33778;\n break;\n case FOURCC_DXT5:\n blockBytes = 16;\n internalCompressedFormat = 33779;\n break;\n case FOURCC_D3DFMT_R16G16B16A16F:\n computeFormats = true;\n bpp = 64;\n break;\n case FOURCC_D3DFMT_R32G32B32A32F:\n computeFormats = true;\n bpp = 128;\n break;\n case FOURCC_DX10:\n {\n // There is an additionnal header so dataOffset need to be changed\n dataOffset += 5 * 4; // 5 uints\n let supported = false;\n switch (info.dxgiFormat) {\n case DXGI_FORMAT_R16G16B16A16_FLOAT:\n computeFormats = true;\n bpp = 64;\n supported = true;\n break;\n case DXGI_FORMAT_R32G32B32A32_FLOAT:\n computeFormats = true;\n bpp = 128;\n supported = true;\n break;\n case DXGI_FORMAT_B8G8R8X8_UNORM:\n info.isRGB = true;\n info.isFourCC = false;\n bpp = 32;\n supported = true;\n break;\n }\n if (supported) {\n break;\n }\n }\n // eslint-disable-next-line no-fallthrough\n default:\n Logger.Error([\"Unsupported FourCC code:\", Int32ToFourCC(fourCC)]);\n return;\n }\n }\n const rOffset = DDSTools._ExtractLongWordOrder(header[off_RMask]);\n const gOffset = DDSTools._ExtractLongWordOrder(header[off_GMask]);\n const bOffset = DDSTools._ExtractLongWordOrder(header[off_BMask]);\n const aOffset = DDSTools._ExtractLongWordOrder(header[off_AMask]);\n if (computeFormats) {\n internalCompressedFormat = engine._getRGBABufferInternalSizedFormat(info.textureType);\n }\n mipmapCount = 1;\n if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) {\n mipmapCount = Math.max(1, header[off_mipmapCount]);\n }\n const startFace = currentFace || 0;\n const caps = engine.getCaps();\n for (let face = startFace; face < faces; face++) {\n width = header[off_width];\n height = header[off_height];\n for (mip = 0; mip < mipmapCount; ++mip) {\n if (lodIndex === -1 || lodIndex === mip) {\n // In case of fixed LOD, if the lod has just been uploaded, early exit.\n const i = lodIndex === -1 ? mip : 0;\n if (!info.isCompressed && info.isFourCC) {\n texture.format = 5;\n dataLength = width * height * 4;\n let floatArray = null;\n if (engine._badOS || engine._badDesktopOS || !caps.textureHalfFloat && !caps.textureFloat) {\n // Required because iOS has many issues with float and half float generation\n if (bpp === 128) {\n floatArray = DDSTools._GetFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\n if (sphericalPolynomialFaces && i == 0) {\n sphericalPolynomialFaces.push(DDSTools._GetFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i));\n }\n } else if (bpp === 64) {\n floatArray = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\n if (sphericalPolynomialFaces && i == 0) {\n sphericalPolynomialFaces.push(DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i));\n }\n }\n texture.type = 0;\n } else {\n const floatAvailable = caps.textureFloat && (destTypeMustBeFilterable && caps.textureFloatLinearFiltering || !destTypeMustBeFilterable);\n const halfFloatAvailable = caps.textureHalfFloat && (destTypeMustBeFilterable && caps.textureHalfFloatLinearFiltering || !destTypeMustBeFilterable);\n const destType = (bpp === 128 || bpp === 64 && !halfFloatAvailable) && floatAvailable ? 1 : (bpp === 64 || bpp === 128 && !floatAvailable) && halfFloatAvailable ? 2 : 0;\n let dataGetter;\n let dataGetterPolynomial = null;\n switch (bpp) {\n case 128:\n {\n switch (destType) {\n case 1:\n dataGetter = DDSTools._GetFloatRGBAArrayBuffer;\n dataGetterPolynomial = null;\n break;\n case 2:\n dataGetter = DDSTools._GetFloatAsHalfFloatRGBAArrayBuffer;\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\n break;\n case 0:\n dataGetter = DDSTools._GetFloatAsUIntRGBAArrayBuffer;\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\n break;\n }\n break;\n }\n default:\n {\n // 64 bpp\n switch (destType) {\n case 1:\n dataGetter = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\n dataGetterPolynomial = null;\n break;\n case 2:\n dataGetter = DDSTools._GetHalfFloatRGBAArrayBuffer;\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\n break;\n case 0:\n dataGetter = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer;\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\n break;\n }\n break;\n }\n }\n texture.type = destType;\n floatArray = dataGetter(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\n if (sphericalPolynomialFaces && i == 0) {\n sphericalPolynomialFaces.push(dataGetterPolynomial ? dataGetterPolynomial(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i) : floatArray);\n }\n }\n if (floatArray) {\n engine._uploadDataToTextureDirectly(texture, floatArray, face, i);\n }\n } else if (info.isRGB) {\n texture.type = 0;\n if (bpp === 24) {\n texture.format = 4;\n dataLength = width * height * 3;\n byteArray = DDSTools._GetRGBArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset);\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\n } else {\n // 32\n texture.format = 5;\n dataLength = width * height * 4;\n byteArray = DDSTools._GetRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset, aOffset);\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\n }\n } else if (info.isLuminance) {\n const unpackAlignment = engine._getUnpackAlignement();\n const unpaddedRowSize = width;\n const paddedRowSize = Math.floor((width + unpackAlignment - 1) / unpackAlignment) * unpackAlignment;\n dataLength = paddedRowSize * (height - 1) + unpaddedRowSize;\n byteArray = DDSTools._GetLuminanceArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer);\n texture.format = 1;\n texture.type = 0;\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\n } else {\n dataLength = Math.max(4, width) / 4 * Math.max(4, height) / 4 * blockBytes;\n byteArray = new Uint8Array(data.buffer, data.byteOffset + dataOffset, dataLength);\n texture.type = 0;\n engine._uploadCompressedDataToTextureDirectly(texture, internalCompressedFormat, width, height, byteArray, face, i);\n }\n }\n dataOffset += bpp ? width * height * (bpp / 8) : dataLength;\n width *= 0.5;\n height *= 0.5;\n width = Math.max(1.0, width);\n height = Math.max(1.0, height);\n }\n if (currentFace !== undefined) {\n // Loading a single face\n break;\n }\n }\n if (sphericalPolynomialFaces && sphericalPolynomialFaces.length > 0) {\n info.sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial({\n size: header[off_width],\n right: sphericalPolynomialFaces[0],\n left: sphericalPolynomialFaces[1],\n up: sphericalPolynomialFaces[2],\n down: sphericalPolynomialFaces[3],\n front: sphericalPolynomialFaces[4],\n back: sphericalPolynomialFaces[5],\n format: 5,\n type: 1,\n gammaSpace: false\n });\n } else {\n info.sphericalPolynomial = undefined;\n }\n }\n}\n/**\n * Gets or sets a boolean indicating that LOD info is stored in alpha channel (false by default)\n */\nDDSTools.StoreLODInAlphaChannel = false;","map":{"version":3,"names":["Clamp","Logger","CubeMapToSphericalPolynomialTools","FromHalfFloat","ToHalfFloat","DDS_MAGIC","DDSD_MIPMAPCOUNT","DDSCAPS2_CUBEMAP","DDPF_FOURCC","DDPF_RGB","DDPF_LUMINANCE","FourCCToInt32","value","charCodeAt","Int32ToFourCC","String","fromCharCode","FOURCC_DXT1","FOURCC_DXT3","FOURCC_DXT5","FOURCC_DX10","FOURCC_D3DFMT_R16G16B16A16F","FOURCC_D3DFMT_R32G32B32A32F","DXGI_FORMAT_R32G32B32A32_FLOAT","DXGI_FORMAT_R16G16B16A16_FLOAT","DXGI_FORMAT_B8G8R8X8_UNORM","headerLengthInt","off_magic","off_size","off_flags","off_height","off_width","off_mipmapCount","off_pfFlags","off_pfFourCC","off_RGBbpp","off_RMask","off_GMask","off_BMask","off_AMask","off_caps2","off_dxgiFormat","DDSTools","GetDDSInfo","data","header","Int32Array","buffer","byteOffset","extendedHeader","mipmapCount","Math","max","fourCC","dxgiFormat","textureType","width","height","isFourCC","isRGB","isLuminance","isCube","isCompressed","_GetHalfFloatAsFloatRGBAArrayBuffer","dataOffset","dataLength","arrayBuffer","lod","destArray","Float32Array","srcData","Uint16Array","index","y","x","srcPos","StoreLODInAlphaChannel","_GetHalfFloatRGBAArrayBuffer","_GetFloatRGBAArrayBuffer","_GetFloatAsHalfFloatRGBAArrayBuffer","_GetFloatAsUIntRGBAArrayBuffer","Uint8Array","_GetHalfFloatAsUIntRGBAArrayBuffer","_GetRGBAArrayBuffer","rOffset","gOffset","bOffset","aOffset","byteArray","_ExtractLongWordOrder","_GetRGBArrayBuffer","_GetLuminanceArrayBuffer","UploadDDSLevels","engine","texture","info","loadMipmaps","faces","lodIndex","currentFace","destTypeMustBeFilterable","sphericalPolynomialFaces","sphericalPolynomial","ext","getCaps","s3tc","generateMipMaps","mip","internalCompressedFormat","blockBytes","Error","bpp","computeFormats","supported","_getRGBABufferInternalSizedFormat","startFace","caps","face","i","format","floatArray","_badOS","_badDesktopOS","textureHalfFloat","textureFloat","push","type","floatAvailable","textureFloatLinearFiltering","halfFloatAvailable","textureHalfFloatLinearFiltering","destType","dataGetter","dataGetterPolynomial","_uploadDataToTextureDirectly","unpackAlignment","_getUnpackAlignement","unpaddedRowSize","paddedRowSize","floor","_uploadCompressedDataToTextureDirectly","undefined","length","ConvertCubeMapToSphericalPolynomial","size","right","left","up","down","front","back","gammaSpace"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/dds.js"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { Clamp } from \"../Maths/math.scalar.functions.js\";\n\nimport { Logger } from \"../Misc/logger.js\";\nimport { CubeMapToSphericalPolynomialTools } from \"../Misc/HighDynamicRange/cubemapToSphericalPolynomial.js\";\nimport { FromHalfFloat, ToHalfFloat } from \"./textureTools.js\";\nimport \"../Engines/AbstractEngine/abstractEngine.cubeTexture.js\";\n// Based on demo done by Brandon Jones - http://media.tojicode.com/webgl-samples/dds.html\n// All values and structures referenced from:\n// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\nconst DDS_MAGIC = 0x20534444;\nconst //DDSD_CAPS = 0x1,\n//DDSD_HEIGHT = 0x2,\n//DDSD_WIDTH = 0x4,\n//DDSD_PITCH = 0x8,\n//DDSD_PIXELFORMAT = 0x1000,\nDDSD_MIPMAPCOUNT = 0x20000;\n//DDSD_LINEARSIZE = 0x80000,\n//DDSD_DEPTH = 0x800000;\n// var DDSCAPS_COMPLEX = 0x8,\n// DDSCAPS_MIPMAP = 0x400000,\n// DDSCAPS_TEXTURE = 0x1000;\nconst DDSCAPS2_CUBEMAP = 0x200;\n// DDSCAPS2_CUBEMAP_POSITIVEX = 0x400,\n// DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800,\n// DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000,\n// DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000,\n// DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000,\n// DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000,\n// DDSCAPS2_VOLUME = 0x200000;\nconst //DDPF_ALPHAPIXELS = 0x1,\n//DDPF_ALPHA = 0x2,\nDDPF_FOURCC = 0x4, DDPF_RGB = 0x40, \n//DDPF_YUV = 0x200,\nDDPF_LUMINANCE = 0x20000;\nfunction FourCCToInt32(value) {\n return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24);\n}\nfunction Int32ToFourCC(value) {\n return String.fromCharCode(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff);\n}\nconst FOURCC_DXT1 = FourCCToInt32(\"DXT1\");\nconst FOURCC_DXT3 = FourCCToInt32(\"DXT3\");\nconst FOURCC_DXT5 = FourCCToInt32(\"DXT5\");\nconst FOURCC_DX10 = FourCCToInt32(\"DX10\");\nconst FOURCC_D3DFMT_R16G16B16A16F = 113;\nconst FOURCC_D3DFMT_R32G32B32A32F = 116;\nconst DXGI_FORMAT_R32G32B32A32_FLOAT = 2;\nconst DXGI_FORMAT_R16G16B16A16_FLOAT = 10;\nconst DXGI_FORMAT_B8G8R8X8_UNORM = 88;\nconst headerLengthInt = 31; // The header length in 32 bit ints\n// Offsets into the header array\nconst off_magic = 0;\nconst off_size = 1;\nconst off_flags = 2;\nconst off_height = 3;\nconst off_width = 4;\nconst off_mipmapCount = 7;\nconst off_pfFlags = 20;\nconst off_pfFourCC = 21;\nconst off_RGBbpp = 22;\nconst off_RMask = 23;\nconst off_GMask = 24;\nconst off_BMask = 25;\nconst off_AMask = 26;\n// var off_caps1 = 27;\nconst off_caps2 = 28;\n// var off_caps3 = 29;\n// var off_caps4 = 30;\nconst off_dxgiFormat = 32;\n/**\n * Class used to provide DDS decompression tools\n */\nexport class DDSTools {\n /**\n * Gets DDS information from an array buffer\n * @param data defines the array buffer view to read data from\n * @returns the DDS information\n */\n static GetDDSInfo(data) {\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\n const extendedHeader = new Int32Array(data.buffer, data.byteOffset, headerLengthInt + 4);\n let mipmapCount = 1;\n if (header[off_flags] & DDSD_MIPMAPCOUNT) {\n mipmapCount = Math.max(1, header[off_mipmapCount]);\n }\n const fourCC = header[off_pfFourCC];\n const dxgiFormat = fourCC === FOURCC_DX10 ? extendedHeader[off_dxgiFormat] : 0;\n let textureType = 0;\n switch (fourCC) {\n case FOURCC_D3DFMT_R16G16B16A16F:\n textureType = 2;\n break;\n case FOURCC_D3DFMT_R32G32B32A32F:\n textureType = 1;\n break;\n case FOURCC_DX10:\n if (dxgiFormat === DXGI_FORMAT_R16G16B16A16_FLOAT) {\n textureType = 2;\n break;\n }\n if (dxgiFormat === DXGI_FORMAT_R32G32B32A32_FLOAT) {\n textureType = 1;\n break;\n }\n }\n return {\n width: header[off_width],\n height: header[off_height],\n mipmapCount: mipmapCount,\n isFourCC: (header[off_pfFlags] & DDPF_FOURCC) === DDPF_FOURCC,\n isRGB: (header[off_pfFlags] & DDPF_RGB) === DDPF_RGB,\n isLuminance: (header[off_pfFlags] & DDPF_LUMINANCE) === DDPF_LUMINANCE,\n isCube: (header[off_caps2] & DDSCAPS2_CUBEMAP) === DDSCAPS2_CUBEMAP,\n isCompressed: fourCC === FOURCC_DXT1 || fourCC === FOURCC_DXT3 || fourCC === FOURCC_DXT5,\n dxgiFormat: dxgiFormat,\n textureType: textureType,\n };\n }\n static _GetHalfFloatAsFloatRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n const destArray = new Float32Array(dataLength);\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = FromHalfFloat(srcData[srcPos]);\n destArray[index + 1] = FromHalfFloat(srcData[srcPos + 1]);\n destArray[index + 2] = FromHalfFloat(srcData[srcPos + 2]);\n if (DDSTools.StoreLODInAlphaChannel) {\n destArray[index + 3] = lod;\n }\n else {\n destArray[index + 3] = FromHalfFloat(srcData[srcPos + 3]);\n }\n index += 4;\n }\n }\n return destArray;\n }\n static _GetHalfFloatRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n if (DDSTools.StoreLODInAlphaChannel) {\n const destArray = new Uint16Array(dataLength);\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = srcData[srcPos];\n destArray[index + 1] = srcData[srcPos + 1];\n destArray[index + 2] = srcData[srcPos + 2];\n destArray[index + 3] = ToHalfFloat(lod);\n index += 4;\n }\n }\n return destArray;\n }\n return new Uint16Array(arrayBuffer, dataOffset, dataLength);\n }\n static _GetFloatRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n if (DDSTools.StoreLODInAlphaChannel) {\n const destArray = new Float32Array(dataLength);\n const srcData = new Float32Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = srcData[srcPos];\n destArray[index + 1] = srcData[srcPos + 1];\n destArray[index + 2] = srcData[srcPos + 2];\n destArray[index + 3] = lod;\n index += 4;\n }\n }\n return destArray;\n }\n return new Float32Array(arrayBuffer, dataOffset, dataLength);\n }\n static _GetFloatAsHalfFloatRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n const destArray = new Uint16Array(dataLength);\n const srcData = new Float32Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n destArray[index] = ToHalfFloat(srcData[index]);\n destArray[index + 1] = ToHalfFloat(srcData[index + 1]);\n destArray[index + 2] = ToHalfFloat(srcData[index + 2]);\n if (DDSTools.StoreLODInAlphaChannel) {\n destArray[index + 3] = ToHalfFloat(lod);\n }\n else {\n destArray[index + 3] = ToHalfFloat(srcData[index + 3]);\n }\n index += 4;\n }\n }\n return destArray;\n }\n static _GetFloatAsUIntRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n const destArray = new Uint8Array(dataLength);\n const srcData = new Float32Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = Clamp(srcData[srcPos]) * 255;\n destArray[index + 1] = Clamp(srcData[srcPos + 1]) * 255;\n destArray[index + 2] = Clamp(srcData[srcPos + 2]) * 255;\n if (DDSTools.StoreLODInAlphaChannel) {\n destArray[index + 3] = lod;\n }\n else {\n destArray[index + 3] = Clamp(srcData[srcPos + 3]) * 255;\n }\n index += 4;\n }\n }\n return destArray;\n }\n static _GetHalfFloatAsUIntRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, lod) {\n const destArray = new Uint8Array(dataLength);\n const srcData = new Uint16Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n destArray[index] = Clamp(FromHalfFloat(srcData[srcPos])) * 255;\n destArray[index + 1] = Clamp(FromHalfFloat(srcData[srcPos + 1])) * 255;\n destArray[index + 2] = Clamp(FromHalfFloat(srcData[srcPos + 2])) * 255;\n if (DDSTools.StoreLODInAlphaChannel) {\n destArray[index + 3] = lod;\n }\n else {\n destArray[index + 3] = Clamp(FromHalfFloat(srcData[srcPos + 3])) * 255;\n }\n index += 4;\n }\n }\n return destArray;\n }\n static _GetRGBAArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, rOffset, gOffset, bOffset, aOffset) {\n const byteArray = new Uint8Array(dataLength);\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 4;\n byteArray[index] = srcData[srcPos + rOffset];\n byteArray[index + 1] = srcData[srcPos + gOffset];\n byteArray[index + 2] = srcData[srcPos + bOffset];\n byteArray[index + 3] = srcData[srcPos + aOffset];\n index += 4;\n }\n }\n return byteArray;\n }\n static _ExtractLongWordOrder(value) {\n if (value === 0 || value === 255 || value === -16777216) {\n return 0;\n }\n return 1 + DDSTools._ExtractLongWordOrder(value >> 8);\n }\n static _GetRGBArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer, rOffset, gOffset, bOffset) {\n const byteArray = new Uint8Array(dataLength);\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = (x + y * width) * 3;\n byteArray[index] = srcData[srcPos + rOffset];\n byteArray[index + 1] = srcData[srcPos + gOffset];\n byteArray[index + 2] = srcData[srcPos + bOffset];\n index += 3;\n }\n }\n return byteArray;\n }\n static _GetLuminanceArrayBuffer(width, height, dataOffset, dataLength, arrayBuffer) {\n const byteArray = new Uint8Array(dataLength);\n const srcData = new Uint8Array(arrayBuffer, dataOffset);\n let index = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcPos = x + y * width;\n byteArray[index] = srcData[srcPos];\n index++;\n }\n }\n return byteArray;\n }\n /**\n * Uploads DDS Levels to a Babylon Texture\n * @internal\n */\n static UploadDDSLevels(engine, texture, data, info, loadMipmaps, faces, lodIndex = -1, currentFace, destTypeMustBeFilterable = true) {\n let sphericalPolynomialFaces = null;\n if (info.sphericalPolynomial) {\n sphericalPolynomialFaces = [];\n }\n const ext = !!engine.getCaps().s3tc;\n // TODO WEBGPU Once generateMipMaps is split into generateMipMaps + hasMipMaps in InternalTexture this line can be removed\n texture.generateMipMaps = loadMipmaps;\n const header = new Int32Array(data.buffer, data.byteOffset, headerLengthInt);\n let fourCC, width, height, dataLength = 0, dataOffset;\n let byteArray, mipmapCount, mip;\n let internalCompressedFormat = 0;\n let blockBytes = 1;\n if (header[off_magic] !== DDS_MAGIC) {\n Logger.Error(\"Invalid magic number in DDS header\");\n return;\n }\n if (!info.isFourCC && !info.isRGB && !info.isLuminance) {\n Logger.Error(\"Unsupported format, must contain a FourCC, RGB or LUMINANCE code\");\n return;\n }\n if (info.isCompressed && !ext) {\n Logger.Error(\"Compressed textures are not supported on this platform.\");\n return;\n }\n let bpp = header[off_RGBbpp];\n dataOffset = header[off_size] + 4;\n let computeFormats = false;\n if (info.isFourCC) {\n fourCC = header[off_pfFourCC];\n switch (fourCC) {\n case FOURCC_DXT1:\n blockBytes = 8;\n internalCompressedFormat = 33777;\n break;\n case FOURCC_DXT3:\n blockBytes = 16;\n internalCompressedFormat = 33778;\n break;\n case FOURCC_DXT5:\n blockBytes = 16;\n internalCompressedFormat = 33779;\n break;\n case FOURCC_D3DFMT_R16G16B16A16F:\n computeFormats = true;\n bpp = 64;\n break;\n case FOURCC_D3DFMT_R32G32B32A32F:\n computeFormats = true;\n bpp = 128;\n break;\n case FOURCC_DX10: {\n // There is an additionnal header so dataOffset need to be changed\n dataOffset += 5 * 4; // 5 uints\n let supported = false;\n switch (info.dxgiFormat) {\n case DXGI_FORMAT_R16G16B16A16_FLOAT:\n computeFormats = true;\n bpp = 64;\n supported = true;\n break;\n case DXGI_FORMAT_R32G32B32A32_FLOAT:\n computeFormats = true;\n bpp = 128;\n supported = true;\n break;\n case DXGI_FORMAT_B8G8R8X8_UNORM:\n info.isRGB = true;\n info.isFourCC = false;\n bpp = 32;\n supported = true;\n break;\n }\n if (supported) {\n break;\n }\n }\n // eslint-disable-next-line no-fallthrough\n default:\n Logger.Error([\"Unsupported FourCC code:\", Int32ToFourCC(fourCC)]);\n return;\n }\n }\n const rOffset = DDSTools._ExtractLongWordOrder(header[off_RMask]);\n const gOffset = DDSTools._ExtractLongWordOrder(header[off_GMask]);\n const bOffset = DDSTools._ExtractLongWordOrder(header[off_BMask]);\n const aOffset = DDSTools._ExtractLongWordOrder(header[off_AMask]);\n if (computeFormats) {\n internalCompressedFormat = engine._getRGBABufferInternalSizedFormat(info.textureType);\n }\n mipmapCount = 1;\n if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) {\n mipmapCount = Math.max(1, header[off_mipmapCount]);\n }\n const startFace = currentFace || 0;\n const caps = engine.getCaps();\n for (let face = startFace; face < faces; face++) {\n width = header[off_width];\n height = header[off_height];\n for (mip = 0; mip < mipmapCount; ++mip) {\n if (lodIndex === -1 || lodIndex === mip) {\n // In case of fixed LOD, if the lod has just been uploaded, early exit.\n const i = lodIndex === -1 ? mip : 0;\n if (!info.isCompressed && info.isFourCC) {\n texture.format = 5;\n dataLength = width * height * 4;\n let floatArray = null;\n if (engine._badOS || engine._badDesktopOS || (!caps.textureHalfFloat && !caps.textureFloat)) {\n // Required because iOS has many issues with float and half float generation\n if (bpp === 128) {\n floatArray = DDSTools._GetFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\n if (sphericalPolynomialFaces && i == 0) {\n sphericalPolynomialFaces.push(DDSTools._GetFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i));\n }\n }\n else if (bpp === 64) {\n floatArray = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\n if (sphericalPolynomialFaces && i == 0) {\n sphericalPolynomialFaces.push(DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i));\n }\n }\n texture.type = 0;\n }\n else {\n const floatAvailable = caps.textureFloat && ((destTypeMustBeFilterable && caps.textureFloatLinearFiltering) || !destTypeMustBeFilterable);\n const halfFloatAvailable = caps.textureHalfFloat && ((destTypeMustBeFilterable && caps.textureHalfFloatLinearFiltering) || !destTypeMustBeFilterable);\n const destType = (bpp === 128 || (bpp === 64 && !halfFloatAvailable)) && floatAvailable\n ? 1\n : (bpp === 64 || (bpp === 128 && !floatAvailable)) && halfFloatAvailable\n ? 2\n : 0;\n let dataGetter;\n let dataGetterPolynomial = null;\n switch (bpp) {\n case 128: {\n switch (destType) {\n case 1:\n dataGetter = DDSTools._GetFloatRGBAArrayBuffer;\n dataGetterPolynomial = null;\n break;\n case 2:\n dataGetter = DDSTools._GetFloatAsHalfFloatRGBAArrayBuffer;\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\n break;\n case 0:\n dataGetter = DDSTools._GetFloatAsUIntRGBAArrayBuffer;\n dataGetterPolynomial = DDSTools._GetFloatRGBAArrayBuffer;\n break;\n }\n break;\n }\n default: {\n // 64 bpp\n switch (destType) {\n case 1:\n dataGetter = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\n dataGetterPolynomial = null;\n break;\n case 2:\n dataGetter = DDSTools._GetHalfFloatRGBAArrayBuffer;\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\n break;\n case 0:\n dataGetter = DDSTools._GetHalfFloatAsUIntRGBAArrayBuffer;\n dataGetterPolynomial = DDSTools._GetHalfFloatAsFloatRGBAArrayBuffer;\n break;\n }\n break;\n }\n }\n texture.type = destType;\n floatArray = dataGetter(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i);\n if (sphericalPolynomialFaces && i == 0) {\n sphericalPolynomialFaces.push(dataGetterPolynomial ? dataGetterPolynomial(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, i) : floatArray);\n }\n }\n if (floatArray) {\n engine._uploadDataToTextureDirectly(texture, floatArray, face, i);\n }\n }\n else if (info.isRGB) {\n texture.type = 0;\n if (bpp === 24) {\n texture.format = 4;\n dataLength = width * height * 3;\n byteArray = DDSTools._GetRGBArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset);\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\n }\n else {\n // 32\n texture.format = 5;\n dataLength = width * height * 4;\n byteArray = DDSTools._GetRGBAArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer, rOffset, gOffset, bOffset, aOffset);\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\n }\n }\n else if (info.isLuminance) {\n const unpackAlignment = engine._getUnpackAlignement();\n const unpaddedRowSize = width;\n const paddedRowSize = Math.floor((width + unpackAlignment - 1) / unpackAlignment) * unpackAlignment;\n dataLength = paddedRowSize * (height - 1) + unpaddedRowSize;\n byteArray = DDSTools._GetLuminanceArrayBuffer(width, height, data.byteOffset + dataOffset, dataLength, data.buffer);\n texture.format = 1;\n texture.type = 0;\n engine._uploadDataToTextureDirectly(texture, byteArray, face, i);\n }\n else {\n dataLength = (((Math.max(4, width) / 4) * Math.max(4, height)) / 4) * blockBytes;\n byteArray = new Uint8Array(data.buffer, data.byteOffset + dataOffset, dataLength);\n texture.type = 0;\n engine._uploadCompressedDataToTextureDirectly(texture, internalCompressedFormat, width, height, byteArray, face, i);\n }\n }\n dataOffset += bpp ? width * height * (bpp / 8) : dataLength;\n width *= 0.5;\n height *= 0.5;\n width = Math.max(1.0, width);\n height = Math.max(1.0, height);\n }\n if (currentFace !== undefined) {\n // Loading a single face\n break;\n }\n }\n if (sphericalPolynomialFaces && sphericalPolynomialFaces.length > 0) {\n info.sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial({\n size: header[off_width],\n right: sphericalPolynomialFaces[0],\n left: sphericalPolynomialFaces[1],\n up: sphericalPolynomialFaces[2],\n down: sphericalPolynomialFaces[3],\n front: sphericalPolynomialFaces[4],\n back: sphericalPolynomialFaces[5],\n format: 5,\n type: 1,\n gammaSpace: false,\n });\n }\n else {\n info.sphericalPolynomial = undefined;\n }\n }\n}\n/**\n * Gets or sets a boolean indicating that LOD info is stored in alpha channel (false by default)\n */\nDDSTools.StoreLODInAlphaChannel = false;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|