{"ast":null,"code":"/* eslint-disable @typescript-eslint/naming-convention */\nimport { Logger } from \"../Misc/logger.js\";\n/**\n * for description see https://www.khronos.org/opengles/sdk/tools/KTX/\n * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/\n */\nexport class KhronosTextureContainer {\n /**\n * Creates a new KhronosTextureContainer\n * @param data contents of the KTX container file\n * @param facesExpected should be either 1 or 6, based whether a cube texture or or\n */\n constructor( /** contents of the KTX container file */\n data, facesExpected) {\n this.data = data;\n /**\n * If the container has been made invalid (eg. constructor failed to correctly load array buffer)\n */\n this.isInvalid = false;\n if (!KhronosTextureContainer.IsValid(data)) {\n this.isInvalid = true;\n Logger.Error(\"texture missing KTX identifier\");\n return;\n }\n // load the reset of the header in native 32 bit uint\n const dataSize = Uint32Array.BYTES_PER_ELEMENT;\n const headerDataView = new DataView(this.data.buffer, this.data.byteOffset + 12, 13 * dataSize);\n const endianness = headerDataView.getUint32(0, true);\n const littleEndian = endianness === 0x04030201;\n this.glType = headerDataView.getUint32(1 * dataSize, littleEndian); // must be 0 for compressed textures\n this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian); // must be 1 for compressed textures\n this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian); // must be 0 for compressed textures\n this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian); // the value of arg passed to gl.compressedTexImage2D(,,x,,,,)\n this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian); // specify GL_RGB, GL_RGBA, GL_ALPHA, etc (un-compressed only)\n this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage2D(,,,x,,,)\n this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage2D(,,,,x,,)\n this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage3D(,,,,,x,,)\n this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian); // used for texture arrays\n this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian); // used for cubemap textures, should either be 1 or 6\n this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian); // number of levels; disregard possibility of 0 for compressed textures\n this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian); // the amount of space after the header for meta-data\n // Make sure we have a compressed type. Not only reduces work, but probably better to let dev know they are not compressing.\n if (this.glType !== 0) {\n Logger.Error(\"only compressed formats currently supported\");\n this.isInvalid = true;\n return;\n } else {\n // value of zero is an indication to generate mipmaps @ runtime. Not usually allowed for compressed, so disregard.\n this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels);\n }\n if (this.pixelHeight === 0 || this.pixelDepth !== 0) {\n Logger.Error(\"only 2D textures currently supported\");\n this.isInvalid = true;\n return;\n }\n if (this.numberOfArrayElements !== 0) {\n Logger.Error(\"texture arrays not currently supported\");\n this.isInvalid = true;\n return;\n }\n if (this.numberOfFaces !== facesExpected) {\n Logger.Error(\"number of faces expected\" + facesExpected + \", but found \" + this.numberOfFaces);\n this.isInvalid = true;\n return;\n }\n // we now have a completely validated file, so could use existence of loadType as success\n // would need to make this more elaborate & adjust checks above to support more than one load type\n this.loadType = KhronosTextureContainer.COMPRESSED_2D;\n }\n /**\n * Uploads KTX content to a Babylon Texture.\n * It is assumed that the texture has already been created & is currently bound\n * @internal\n */\n uploadLevels(texture, loadMipmaps) {\n switch (this.loadType) {\n case KhronosTextureContainer.COMPRESSED_2D:\n this._upload2DCompressedLevels(texture, loadMipmaps);\n break;\n case KhronosTextureContainer.TEX_2D:\n case KhronosTextureContainer.COMPRESSED_3D:\n case KhronosTextureContainer.TEX_3D:\n }\n }\n _upload2DCompressedLevels(texture, loadMipmaps) {\n // initialize width & height for level 1\n let dataOffset = KhronosTextureContainer.HEADER_LEN + this.bytesOfKeyValueData;\n let width = this.pixelWidth;\n let height = this.pixelHeight;\n const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;\n for (let level = 0; level < mipmapCount; level++) {\n const imageSize = new Int32Array(this.data.buffer, this.data.byteOffset + dataOffset, 1)[0]; // size per face, since not supporting array cubemaps\n dataOffset += 4; //image data starts from next multiple of 4 offset. Each face refers to same imagesize field above.\n for (let face = 0; face < this.numberOfFaces; face++) {\n const byteArray = new Uint8Array(this.data.buffer, this.data.byteOffset + dataOffset, imageSize);\n const engine = texture.getEngine();\n engine._uploadCompressedDataToTextureDirectly(texture, texture.format, width, height, byteArray, face, level);\n dataOffset += imageSize; // add size of the image for the next face/mipmap\n dataOffset += 3 - (imageSize + 3) % 4; // add padding for odd sized image\n }\n width = Math.max(1.0, width * 0.5);\n height = Math.max(1.0, height * 0.5);\n }\n }\n /**\n * Checks if the given data starts with a KTX file identifier.\n * @param data the data to check\n * @returns true if the data is a KTX file or false otherwise\n */\n static IsValid(data) {\n if (data.byteLength >= 12) {\n // '«', 'K', 'T', 'X', ' ', '1', '1', '»', '\\r', '\\n', '\\x1A', '\\n'\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\n if (identifier[0] === 0xab && identifier[1] === 0x4b && identifier[2] === 0x54 && identifier[3] === 0x58 && identifier[4] === 0x20 && identifier[5] === 0x31 && identifier[6] === 0x31 && identifier[7] === 0xbb && identifier[8] === 0x0d && identifier[9] === 0x0a && identifier[10] === 0x1a && identifier[11] === 0x0a) {\n return true;\n }\n }\n return false;\n }\n}\nKhronosTextureContainer.HEADER_LEN = 12 + 13 * 4; // identifier + header elements (not including key value meta-data pairs)\n// load types\nKhronosTextureContainer.COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()\nKhronosTextureContainer.COMPRESSED_3D = 1; // uses a gl.compressedTexImage3D()\nKhronosTextureContainer.TEX_2D = 2; // uses a gl.texImage2D()\nKhronosTextureContainer.TEX_3D = 3; // uses a gl.texImage3D()","map":{"version":3,"names":["Logger","KhronosTextureContainer","constructor","data","facesExpected","isInvalid","IsValid","Error","dataSize","Uint32Array","BYTES_PER_ELEMENT","headerDataView","DataView","buffer","byteOffset","endianness","getUint32","littleEndian","glType","glTypeSize","glFormat","glInternalFormat","glBaseInternalFormat","pixelWidth","pixelHeight","pixelDepth","numberOfArrayElements","numberOfFaces","numberOfMipmapLevels","bytesOfKeyValueData","Math","max","loadType","COMPRESSED_2D","uploadLevels","texture","loadMipmaps","_upload2DCompressedLevels","TEX_2D","COMPRESSED_3D","TEX_3D","dataOffset","HEADER_LEN","width","height","mipmapCount","level","imageSize","Int32Array","face","byteArray","Uint8Array","engine","getEngine","_uploadCompressedDataToTextureDirectly","format","byteLength","identifier"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/khronosTextureContainer.js"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { Logger } from \"../Misc/logger.js\";\n/**\n * for description see https://www.khronos.org/opengles/sdk/tools/KTX/\n * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/\n */\nexport class KhronosTextureContainer {\n /**\n * Creates a new KhronosTextureContainer\n * @param data contents of the KTX container file\n * @param facesExpected should be either 1 or 6, based whether a cube texture or or\n */\n constructor(\n /** contents of the KTX container file */\n data, facesExpected) {\n this.data = data;\n /**\n * If the container has been made invalid (eg. constructor failed to correctly load array buffer)\n */\n this.isInvalid = false;\n if (!KhronosTextureContainer.IsValid(data)) {\n this.isInvalid = true;\n Logger.Error(\"texture missing KTX identifier\");\n return;\n }\n // load the reset of the header in native 32 bit uint\n const dataSize = Uint32Array.BYTES_PER_ELEMENT;\n const headerDataView = new DataView(this.data.buffer, this.data.byteOffset + 12, 13 * dataSize);\n const endianness = headerDataView.getUint32(0, true);\n const littleEndian = endianness === 0x04030201;\n this.glType = headerDataView.getUint32(1 * dataSize, littleEndian); // must be 0 for compressed textures\n this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian); // must be 1 for compressed textures\n this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian); // must be 0 for compressed textures\n this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian); // the value of arg passed to gl.compressedTexImage2D(,,x,,,,)\n this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian); // specify GL_RGB, GL_RGBA, GL_ALPHA, etc (un-compressed only)\n this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage2D(,,,x,,,)\n this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage2D(,,,,x,,)\n this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage3D(,,,,,x,,)\n this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian); // used for texture arrays\n this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian); // used for cubemap textures, should either be 1 or 6\n this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian); // number of levels; disregard possibility of 0 for compressed textures\n this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian); // the amount of space after the header for meta-data\n // Make sure we have a compressed type. Not only reduces work, but probably better to let dev know they are not compressing.\n if (this.glType !== 0) {\n Logger.Error(\"only compressed formats currently supported\");\n this.isInvalid = true;\n return;\n }\n else {\n // value of zero is an indication to generate mipmaps @ runtime. Not usually allowed for compressed, so disregard.\n this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels);\n }\n if (this.pixelHeight === 0 || this.pixelDepth !== 0) {\n Logger.Error(\"only 2D textures currently supported\");\n this.isInvalid = true;\n return;\n }\n if (this.numberOfArrayElements !== 0) {\n Logger.Error(\"texture arrays not currently supported\");\n this.isInvalid = true;\n return;\n }\n if (this.numberOfFaces !== facesExpected) {\n Logger.Error(\"number of faces expected\" + facesExpected + \", but found \" + this.numberOfFaces);\n this.isInvalid = true;\n return;\n }\n // we now have a completely validated file, so could use existence of loadType as success\n // would need to make this more elaborate & adjust checks above to support more than one load type\n this.loadType = KhronosTextureContainer.COMPRESSED_2D;\n }\n /**\n * Uploads KTX content to a Babylon Texture.\n * It is assumed that the texture has already been created & is currently bound\n * @internal\n */\n uploadLevels(texture, loadMipmaps) {\n switch (this.loadType) {\n case KhronosTextureContainer.COMPRESSED_2D:\n this._upload2DCompressedLevels(texture, loadMipmaps);\n break;\n case KhronosTextureContainer.TEX_2D:\n case KhronosTextureContainer.COMPRESSED_3D:\n case KhronosTextureContainer.TEX_3D:\n }\n }\n _upload2DCompressedLevels(texture, loadMipmaps) {\n // initialize width & height for level 1\n let dataOffset = KhronosTextureContainer.HEADER_LEN + this.bytesOfKeyValueData;\n let width = this.pixelWidth;\n let height = this.pixelHeight;\n const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;\n for (let level = 0; level < mipmapCount; level++) {\n const imageSize = new Int32Array(this.data.buffer, this.data.byteOffset + dataOffset, 1)[0]; // size per face, since not supporting array cubemaps\n dataOffset += 4; //image data starts from next multiple of 4 offset. Each face refers to same imagesize field above.\n for (let face = 0; face < this.numberOfFaces; face++) {\n const byteArray = new Uint8Array(this.data.buffer, this.data.byteOffset + dataOffset, imageSize);\n const engine = texture.getEngine();\n engine._uploadCompressedDataToTextureDirectly(texture, texture.format, width, height, byteArray, face, level);\n dataOffset += imageSize; // add size of the image for the next face/mipmap\n dataOffset += 3 - ((imageSize + 3) % 4); // add padding for odd sized image\n }\n width = Math.max(1.0, width * 0.5);\n height = Math.max(1.0, height * 0.5);\n }\n }\n /**\n * Checks if the given data starts with a KTX file identifier.\n * @param data the data to check\n * @returns true if the data is a KTX file or false otherwise\n */\n static IsValid(data) {\n if (data.byteLength >= 12) {\n // '«', 'K', 'T', 'X', ' ', '1', '1', '»', '\\r', '\\n', '\\x1A', '\\n'\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\n if (identifier[0] === 0xab &&\n identifier[1] === 0x4b &&\n identifier[2] === 0x54 &&\n identifier[3] === 0x58 &&\n identifier[4] === 0x20 &&\n identifier[5] === 0x31 &&\n identifier[6] === 0x31 &&\n identifier[7] === 0xbb &&\n identifier[8] === 0x0d &&\n identifier[9] === 0x0a &&\n identifier[10] === 0x1a &&\n identifier[11] === 0x0a) {\n return true;\n }\n }\n return false;\n }\n}\nKhronosTextureContainer.HEADER_LEN = 12 + 13 * 4; // identifier + header elements (not including key value meta-data pairs)\n// load types\nKhronosTextureContainer.COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()\nKhronosTextureContainer.COMPRESSED_3D = 1; // uses a gl.compressedTexImage3D()\nKhronosTextureContainer.TEX_2D = 2; // uses a gl.texImage2D()\nKhronosTextureContainer.TEX_3D = 3; // uses a gl.texImage3D()\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}