@loaders.gl/textures 3.1.0-beta.2 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/basis-worker.js +33 -9
  2. package/dist/bundle.js +185 -119
  3. package/dist/compressed-texture-loader.d.ts +1 -15
  4. package/dist/compressed-texture-loader.d.ts.map +1 -1
  5. package/dist/compressed-texture-worker.js +174 -108
  6. package/dist/crunch-worker.js +11 -11
  7. package/dist/es5/basis-loader.js +13 -5
  8. package/dist/es5/basis-loader.js.map +1 -1
  9. package/dist/es5/bundle.js +1 -1
  10. package/dist/es5/bundle.js.map +1 -1
  11. package/dist/es5/compressed-texture-loader.js +59 -20
  12. package/dist/es5/compressed-texture-loader.js.map +1 -1
  13. package/dist/es5/compressed-texture-writer.js +2 -2
  14. package/dist/es5/compressed-texture-writer.js.map +1 -1
  15. package/dist/es5/crunch-loader.js +2 -2
  16. package/dist/es5/crunch-loader.js.map +1 -1
  17. package/dist/es5/index.js +19 -19
  18. package/dist/es5/index.js.map +1 -1
  19. package/dist/es5/ktx2-basis-universal-texture-writer.js +2 -2
  20. package/dist/es5/ktx2-basis-universal-texture-writer.js.map +1 -1
  21. package/dist/es5/lib/encoders/encode-ktx.js +1 -1
  22. package/dist/es5/lib/encoders/encode-ktx.js.map +1 -1
  23. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js +76 -32
  24. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
  25. package/dist/es5/lib/encoders/encode-texture.js +41 -13
  26. package/dist/es5/lib/encoders/encode-texture.js.map +1 -1
  27. package/dist/es5/lib/{gl-constants.js → gl-extensions.js} +4 -4
  28. package/dist/es5/lib/gl-extensions.js.map +1 -0
  29. package/dist/es5/lib/parsers/basis-module-loader.js +195 -51
  30. package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -1
  31. package/dist/es5/lib/parsers/crunch-module-loader.js +71 -15
  32. package/dist/es5/lib/parsers/crunch-module-loader.js.map +1 -1
  33. package/dist/es5/lib/parsers/parse-basis.js +137 -85
  34. package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
  35. package/dist/es5/lib/parsers/parse-crunch.js +80 -59
  36. package/dist/es5/lib/parsers/parse-crunch.js.map +1 -1
  37. package/dist/es5/lib/parsers/parse-dds.js +30 -30
  38. package/dist/es5/lib/parsers/parse-dds.js.map +1 -1
  39. package/dist/es5/lib/parsers/parse-ktx.js +16 -14
  40. package/dist/es5/lib/parsers/parse-ktx.js.map +1 -1
  41. package/dist/es5/lib/parsers/parse-npy.js +28 -25
  42. package/dist/es5/lib/parsers/parse-npy.js.map +1 -1
  43. package/dist/es5/lib/parsers/parse-pvr.js +49 -49
  44. package/dist/es5/lib/parsers/parse-pvr.js.map +1 -1
  45. package/dist/es5/lib/texture-api/async-deep-map.js +156 -27
  46. package/dist/es5/lib/texture-api/async-deep-map.js.map +1 -1
  47. package/dist/es5/lib/texture-api/deep-load.js +67 -6
  48. package/dist/es5/lib/texture-api/deep-load.js.map +1 -1
  49. package/dist/es5/lib/texture-api/generate-url.js +10 -4
  50. package/dist/es5/lib/texture-api/generate-url.js.map +1 -1
  51. package/dist/es5/lib/texture-api/load-image-array.js +76 -12
  52. package/dist/es5/lib/texture-api/load-image-array.js.map +1 -1
  53. package/dist/es5/lib/texture-api/load-image-cube.js +96 -27
  54. package/dist/es5/lib/texture-api/load-image-cube.js.map +1 -1
  55. package/dist/es5/lib/texture-api/load-image.js +142 -35
  56. package/dist/es5/lib/texture-api/load-image.js.map +1 -1
  57. package/dist/es5/lib/utils/extract-mipmap-images.js +9 -9
  58. package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -1
  59. package/dist/es5/lib/utils/ktx-format-helper.js +68 -68
  60. package/dist/es5/lib/utils/ktx-format-helper.js.map +1 -1
  61. package/dist/es5/lib/utils/texture-formats.js +27 -9
  62. package/dist/es5/lib/utils/texture-formats.js.map +1 -1
  63. package/dist/es5/lib/utils/version.js +1 -1
  64. package/dist/es5/lib/utils/version.js.map +1 -1
  65. package/dist/es5/npy-loader.js +42 -7
  66. package/dist/es5/npy-loader.js.map +1 -1
  67. package/dist/es5/workers/crunch-worker.js +11 -2
  68. package/dist/es5/workers/crunch-worker.js.map +1 -1
  69. package/dist/esm/index.js +1 -1
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js +1 -1
  72. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
  73. package/dist/esm/lib/{gl-constants.js → gl-extensions.js} +2 -2
  74. package/dist/esm/lib/gl-extensions.js.map +1 -0
  75. package/dist/esm/lib/parsers/basis-module-loader.js +1 -1
  76. package/dist/esm/lib/parsers/basis-module-loader.js.map +1 -1
  77. package/dist/esm/lib/parsers/parse-basis.js +7 -7
  78. package/dist/esm/lib/parsers/parse-basis.js.map +1 -1
  79. package/dist/esm/lib/parsers/parse-crunch.js +4 -4
  80. package/dist/esm/lib/parsers/parse-crunch.js.map +1 -1
  81. package/dist/esm/lib/parsers/parse-dds.js +7 -7
  82. package/dist/esm/lib/parsers/parse-dds.js.map +1 -1
  83. package/dist/esm/lib/parsers/parse-pvr.js +28 -28
  84. package/dist/esm/lib/parsers/parse-pvr.js.map +1 -1
  85. package/dist/esm/lib/utils/ktx-format-helper.js +67 -67
  86. package/dist/esm/lib/utils/ktx-format-helper.js.map +1 -1
  87. package/dist/esm/lib/utils/version.js +1 -1
  88. package/dist/esm/lib/utils/version.js.map +1 -1
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +3 -3
  92. package/dist/lib/encoders/encode-ktx2-basis-texture.d.ts +1 -1
  93. package/dist/lib/encoders/encode-ktx2-basis-texture.d.ts.map +1 -1
  94. package/dist/lib/encoders/encode-ktx2-basis-texture.js +1 -1
  95. package/dist/lib/{gl-constants.d.ts → gl-extensions.d.ts} +2 -2
  96. package/dist/lib/gl-extensions.d.ts.map +1 -0
  97. package/dist/lib/{gl-constants.js → gl-extensions.js} +2 -2
  98. package/dist/lib/parsers/parse-basis.d.ts +2 -16
  99. package/dist/lib/parsers/parse-basis.d.ts.map +1 -1
  100. package/dist/lib/parsers/parse-basis.js +31 -7
  101. package/dist/lib/parsers/parse-crunch.js +4 -4
  102. package/dist/lib/parsers/parse-dds.js +7 -7
  103. package/dist/lib/parsers/parse-pvr.d.ts.map +1 -1
  104. package/dist/lib/parsers/parse-pvr.js +70 -28
  105. package/dist/lib/utils/ktx-format-helper.js +67 -67
  106. package/package.json +5 -5
  107. package/src/index.ts +1 -1
  108. package/src/lib/encoders/encode-ktx2-basis-texture.ts +2 -2
  109. package/src/lib/{gl-constants.ts → gl-extensions.ts} +1 -1
  110. package/src/lib/parsers/{parse-basis.js → parse-basis.ts} +34 -10
  111. package/src/lib/parsers/parse-crunch.ts +4 -4
  112. package/src/lib/parsers/parse-dds.ts +7 -7
  113. package/src/lib/parsers/parse-pvr.ts +70 -28
  114. package/src/lib/utils/ktx-format-helper.ts +67 -67
  115. package/dist/es5/lib/gl-constants.js.map +0 -1
  116. package/dist/esm/lib/gl-constants.js.map +0 -1
  117. package/dist/lib/gl-constants.d.ts.map +0 -1
  118. package/src/lib/parsers/parse-ktx.js +0 -42
  119. package/src/lib/parsers/parse-npy.js +0 -82
@@ -10,11 +10,11 @@ exports.getDxtXLevelSize = getDxtXLevelSize;
10
10
 
11
11
  var _loaderUtils = require("@loaders.gl/loader-utils");
12
12
 
13
- var _glConstants = require("../gl-constants");
13
+ var _glExtensions = require("../gl-extensions");
14
14
 
15
15
  var _extractMipmapImages = require("../utils/extract-mipmap-images");
16
16
 
17
- const DDS_CONSTANTS = {
17
+ var DDS_CONSTANTS = {
18
18
  MAGIC_NUMBER: 0x20534444,
19
19
  HEADER_LENGTH: 31,
20
20
  MAGIC_NUMBER_INDEX: 0,
@@ -28,18 +28,18 @@ const DDS_CONSTANTS = {
28
28
  DDSD_MIPMAPCOUNT: 0x20000,
29
29
  DDPF_FOURCC: 0x4
30
30
  };
31
- const DDS_PIXEL_FORMATS = {
32
- DXT1: _glConstants.GL.COMPRESSED_RGB_S3TC_DXT1_EXT,
33
- DXT3: _glConstants.GL.COMPRESSED_RGBA_S3TC_DXT3_EXT,
34
- DXT5: _glConstants.GL.COMPRESSED_RGBA_S3TC_DXT5_EXT,
35
- 'ATC ': _glConstants.GL.COMPRESSED_RGB_ATC_WEBGL,
36
- ATCA: _glConstants.GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,
37
- ATCI: _glConstants.GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL
31
+ var DDS_PIXEL_FORMATS = {
32
+ DXT1: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
33
+ DXT3: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
34
+ DXT5: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
35
+ 'ATC ': _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,
36
+ ATCA: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,
37
+ ATCI: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL
38
38
  };
39
- const getATCLevelSize = getDxt1LevelSize;
40
- const getATCALevelSize = getDxtXLevelSize;
41
- const getATCILevelSize = getDxtXLevelSize;
42
- const DDS_SIZE_FUNCTIONS = {
39
+ var getATCLevelSize = getDxt1LevelSize;
40
+ var getATCALevelSize = getDxtXLevelSize;
41
+ var getATCILevelSize = getDxtXLevelSize;
42
+ var DDS_SIZE_FUNCTIONS = {
43
43
  DXT1: getDxt1LevelSize,
44
44
  DXT3: getDxtXLevelSize,
45
45
  DXT5: getDxtXLevelSize,
@@ -49,35 +49,35 @@ const DDS_SIZE_FUNCTIONS = {
49
49
  };
50
50
 
51
51
  function isDDS(data) {
52
- const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
53
- const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];
52
+ var header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
53
+ var magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];
54
54
  return magic === DDS_CONSTANTS.MAGIC_NUMBER;
55
55
  }
56
56
 
57
57
  function parseDDS(data) {
58
- const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
59
- const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];
58
+ var header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
59
+ var pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];
60
60
  (0, _loaderUtils.assert)(Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC), 'DDS: Unsupported format, must contain a FourCC code');
61
- const fourCC = int32ToFourCC(pixelFormatNumber);
62
- const internalFormat = DDS_PIXEL_FORMATS[fourCC];
63
- const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];
61
+ var fourCC = int32ToFourCC(pixelFormatNumber);
62
+ var internalFormat = DDS_PIXEL_FORMATS[fourCC];
63
+ var sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];
64
64
  (0, _loaderUtils.assert)(internalFormat && sizeFunction, "DDS: Unknown pixel format ".concat(pixelFormatNumber));
65
- let mipMapLevels = 1;
65
+ var mipMapLevels = 1;
66
66
 
67
67
  if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {
68
68
  mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);
69
69
  }
70
70
 
71
- const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];
72
- const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];
73
- const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;
74
- const image = new Uint8Array(data, dataOffset);
71
+ var width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];
72
+ var height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];
73
+ var dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;
74
+ var image = new Uint8Array(data, dataOffset);
75
75
  return (0, _extractMipmapImages.extractMipmapImages)(image, {
76
- mipMapLevels,
77
- width,
78
- height,
79
- sizeFunction,
80
- internalFormat
76
+ mipMapLevels: mipMapLevels,
77
+ width: width,
78
+ height: height,
79
+ sizeFunction: sizeFunction,
80
+ internalFormat: internalFormat
81
81
  });
82
82
  }
83
83
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-dds.ts"],"names":["DDS_CONSTANTS","MAGIC_NUMBER","HEADER_LENGTH","MAGIC_NUMBER_INDEX","HEADER_SIZE_INDEX","HEADER_FLAGS_INDEX","HEADER_HEIGHT_INDEX","HEADER_WIDTH_INDEX","MIPMAPCOUNT_INDEX","HEADER_PF_FLAGS_INDEX","HEADER_PF_FOURCC_INDEX","DDSD_MIPMAPCOUNT","DDPF_FOURCC","DDS_PIXEL_FORMATS","DXT1","GL","COMPRESSED_RGB_S3TC_DXT1_EXT","DXT3","COMPRESSED_RGBA_S3TC_DXT3_EXT","DXT5","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_ATC_WEBGL","ATCA","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","ATCI","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","getATCLevelSize","getDxt1LevelSize","getATCALevelSize","getDxtXLevelSize","getATCILevelSize","DDS_SIZE_FUNCTIONS","isDDS","data","header","Uint32Array","magic","parseDDS","Int32Array","pixelFormatNumber","Boolean","fourCC","int32ToFourCC","internalFormat","sizeFunction","mipMapLevels","Math","max","width","height","dataOffset","image","Uint8Array","value","String","fromCharCode"],"mappings":"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","sourcesContent":["import type {TextureLevel} from '../../types';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {GL} from '../gl-constants';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\n\nconst DDS_PIXEL_FORMATS: Record<string, number> = {\n DXT1: GL.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n};\n\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\n\nconst DDS_SIZE_FUNCTIONS: Record<string, (width: number, height: number) => number> = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data: ArrayBuffer): TextureLevel[] {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(\n Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC),\n 'DDS: Unsupported format, must contain a FourCC code'\n );\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const internalFormat = DDS_PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value: number): string {\n return String.fromCharCode(\n value & 0xff,\n (value >> 8) & 0xff,\n (value >> 16) & 0xff,\n (value >> 24) & 0xff\n );\n}\n"],"file":"parse-dds.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-dds.ts"],"names":["DDS_CONSTANTS","MAGIC_NUMBER","HEADER_LENGTH","MAGIC_NUMBER_INDEX","HEADER_SIZE_INDEX","HEADER_FLAGS_INDEX","HEADER_HEIGHT_INDEX","HEADER_WIDTH_INDEX","MIPMAPCOUNT_INDEX","HEADER_PF_FLAGS_INDEX","HEADER_PF_FOURCC_INDEX","DDSD_MIPMAPCOUNT","DDPF_FOURCC","DDS_PIXEL_FORMATS","DXT1","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","DXT3","COMPRESSED_RGBA_S3TC_DXT3_EXT","DXT5","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_ATC_WEBGL","ATCA","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","ATCI","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","getATCLevelSize","getDxt1LevelSize","getATCALevelSize","getDxtXLevelSize","getATCILevelSize","DDS_SIZE_FUNCTIONS","isDDS","data","header","Uint32Array","magic","parseDDS","Int32Array","pixelFormatNumber","Boolean","fourCC","int32ToFourCC","internalFormat","sizeFunction","mipMapLevels","Math","max","width","height","dataOffset","image","Uint8Array","value","String","fromCharCode"],"mappings":"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","sourcesContent":["import type {TextureLevel} from '../../types';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\n\nconst DDS_PIXEL_FORMATS: Record<string, number> = {\n DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n};\n\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\n\nconst DDS_SIZE_FUNCTIONS: Record<string, (width: number, height: number) => number> = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data: ArrayBuffer): TextureLevel[] {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(\n Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC),\n 'DDS: Unsupported format, must contain a FourCC code'\n );\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const internalFormat = DDS_PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value: number): string {\n return String.fromCharCode(\n value & 0xff,\n (value >> 8) & 0xff,\n (value >> 16) & 0xff,\n (value >> 24) & 0xff\n );\n}\n"],"file":"parse-dds.js"}
@@ -12,27 +12,29 @@ var _extractMipmapImages = require("../utils/extract-mipmap-images");
12
12
 
13
13
  var _ktxFormatHelper = require("../utils/ktx-format-helper");
14
14
 
15
- const KTX2_ID = [0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
15
+ var KTX2_ID = [0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
16
16
 
17
17
  function isKTX(data) {
18
- const id = new Uint8Array(data);
19
- const notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] || id[1] !== KTX2_ID[1] || id[2] !== KTX2_ID[2] || id[3] !== KTX2_ID[3] || id[4] !== KTX2_ID[4] || id[5] !== KTX2_ID[5] || id[6] !== KTX2_ID[6] || id[7] !== KTX2_ID[7] || id[8] !== KTX2_ID[8] || id[9] !== KTX2_ID[9] || id[10] !== KTX2_ID[10] || id[11] !== KTX2_ID[11];
18
+ var id = new Uint8Array(data);
19
+ var notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] || id[1] !== KTX2_ID[1] || id[2] !== KTX2_ID[2] || id[3] !== KTX2_ID[3] || id[4] !== KTX2_ID[4] || id[5] !== KTX2_ID[5] || id[6] !== KTX2_ID[6] || id[7] !== KTX2_ID[7] || id[8] !== KTX2_ID[8] || id[9] !== KTX2_ID[9] || id[10] !== KTX2_ID[10] || id[11] !== KTX2_ID[11];
20
20
  return !notKTX;
21
21
  }
22
22
 
23
23
  function parseKTX(arrayBuffer) {
24
- const uint8Array = new Uint8Array(arrayBuffer);
25
- const ktx = (0, _ktxParse.read)(uint8Array);
26
- const mipMapLevels = Math.max(1, ktx.levels.length);
27
- const width = ktx.pixelWidth;
28
- const height = ktx.pixelHeight;
29
- const internalFormat = (0, _ktxFormatHelper.mapVkFormatToWebGL)(ktx.vkFormat);
24
+ var uint8Array = new Uint8Array(arrayBuffer);
25
+ var ktx = (0, _ktxParse.read)(uint8Array);
26
+ var mipMapLevels = Math.max(1, ktx.levels.length);
27
+ var width = ktx.pixelWidth;
28
+ var height = ktx.pixelHeight;
29
+ var internalFormat = (0, _ktxFormatHelper.mapVkFormatToWebGL)(ktx.vkFormat);
30
30
  return (0, _extractMipmapImages.extractMipmapImages)(ktx.levels, {
31
- mipMapLevels,
32
- width,
33
- height,
34
- sizeFunction: level => level.uncompressedByteLength,
35
- internalFormat
31
+ mipMapLevels: mipMapLevels,
32
+ width: width,
33
+ height: height,
34
+ sizeFunction: function sizeFunction(level) {
35
+ return level.uncompressedByteLength;
36
+ },
37
+ internalFormat: internalFormat
36
38
  });
37
39
  }
38
40
  //# sourceMappingURL=parse-ktx.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-ktx.ts"],"names":["KTX2_ID","isKTX","data","id","Uint8Array","notKTX","byteLength","length","parseKTX","arrayBuffer","uint8Array","ktx","mipMapLevels","Math","max","levels","width","pixelWidth","height","pixelHeight","internalFormat","vkFormat","sizeFunction","level","uncompressedByteLength"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;AAEA,MAAMA,OAAO,GAAG,CAEd,IAFc,EAER,IAFQ,EAEF,IAFE,EAEI,IAFJ,EAEU,IAFV,EAEgB,IAFhB,EAEsB,IAFtB,EAE4B,IAF5B,EAEkC,IAFlC,EAEwC,IAFxC,EAE8C,IAF9C,EAEoD,IAFpD,CAAhB;;AAMO,SAASC,KAAT,CAAeC,IAAf,EAAkC;AAEvC,QAAMC,EAAE,GAAG,IAAIC,UAAJ,CAAeF,IAAf,CAAX;AACA,QAAMG,MAAM,GACVF,EAAE,CAACG,UAAH,GAAgBN,OAAO,CAACO,MAAxB,IACAJ,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CADjB,IAEAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAFjB,IAGAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAHjB,IAIAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAJjB,IAKAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CALjB,IAMAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CANjB,IAOAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAPjB,IAQAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CARjB,IASAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CATjB,IAUAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAVjB,IAWAG,EAAE,CAAC,EAAD,CAAF,KAAWH,OAAO,CAAC,EAAD,CAXlB,IAYAG,EAAE,CAAC,EAAD,CAAF,KAAWH,OAAO,CAAC,EAAD,CAbpB;AAeA,SAAO,CAACK,MAAR;AACD;;AAEM,SAASG,QAAT,CAAkBC,WAAlB,EAA4C;AACjD,QAAMC,UAAU,GAAG,IAAIN,UAAJ,CAAeK,WAAf,CAAnB;AACA,QAAME,GAAG,GAAG,oBAAKD,UAAL,CAAZ;AACA,QAAME,YAAY,GAAGC,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYH,GAAG,CAACI,MAAJ,CAAWR,MAAvB,CAArB;AACA,QAAMS,KAAK,GAAGL,GAAG,CAACM,UAAlB;AACA,QAAMC,MAAM,GAAGP,GAAG,CAACQ,WAAnB;AACA,QAAMC,cAAc,GAAG,yCAAmBT,GAAG,CAACU,QAAvB,CAAvB;AAEA,SAAO,8CAAoBV,GAAG,CAACI,MAAxB,EAAgC;AACrCH,IAAAA,YADqC;AAErCI,IAAAA,KAFqC;AAGrCE,IAAAA,MAHqC;AAIrCI,IAAAA,YAAY,EAAGC,KAAD,IAAwBA,KAAK,CAACC,sBAJP;AAKrCJ,IAAAA;AALqC,GAAhC,CAAP;AAOD","sourcesContent":["import {read} from 'ktx-parse';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\nimport {mapVkFormatToWebGL} from '../utils/ktx-format-helper';\n\nconst KTX2_ID = [\n // '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n\n// eslint-disable-next-line complexity\nexport function isKTX(data: ArrayBuffer) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX =\n id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n\n return !notKTX;\n}\n\nexport function parseKTX(arrayBuffer: ArrayBuffer) {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level: any): number => level.uncompressedByteLength,\n internalFormat\n });\n}\n"],"file":"parse-ktx.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-ktx.ts"],"names":["KTX2_ID","isKTX","data","id","Uint8Array","notKTX","byteLength","length","parseKTX","arrayBuffer","uint8Array","ktx","mipMapLevels","Math","max","levels","width","pixelWidth","height","pixelHeight","internalFormat","vkFormat","sizeFunction","level","uncompressedByteLength"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;AAEA,IAAMA,OAAO,GAAG,CAEd,IAFc,EAER,IAFQ,EAEF,IAFE,EAEI,IAFJ,EAEU,IAFV,EAEgB,IAFhB,EAEsB,IAFtB,EAE4B,IAF5B,EAEkC,IAFlC,EAEwC,IAFxC,EAE8C,IAF9C,EAEoD,IAFpD,CAAhB;;AAMO,SAASC,KAAT,CAAeC,IAAf,EAAkC;AAEvC,MAAMC,EAAE,GAAG,IAAIC,UAAJ,CAAeF,IAAf,CAAX;AACA,MAAMG,MAAM,GACVF,EAAE,CAACG,UAAH,GAAgBN,OAAO,CAACO,MAAxB,IACAJ,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CADjB,IAEAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAFjB,IAGAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAHjB,IAIAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAJjB,IAKAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CALjB,IAMAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CANjB,IAOAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAPjB,IAQAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CARjB,IASAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CATjB,IAUAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAVjB,IAWAG,EAAE,CAAC,EAAD,CAAF,KAAWH,OAAO,CAAC,EAAD,CAXlB,IAYAG,EAAE,CAAC,EAAD,CAAF,KAAWH,OAAO,CAAC,EAAD,CAbpB;AAeA,SAAO,CAACK,MAAR;AACD;;AAEM,SAASG,QAAT,CAAkBC,WAAlB,EAA4C;AACjD,MAAMC,UAAU,GAAG,IAAIN,UAAJ,CAAeK,WAAf,CAAnB;AACA,MAAME,GAAG,GAAG,oBAAKD,UAAL,CAAZ;AACA,MAAME,YAAY,GAAGC,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYH,GAAG,CAACI,MAAJ,CAAWR,MAAvB,CAArB;AACA,MAAMS,KAAK,GAAGL,GAAG,CAACM,UAAlB;AACA,MAAMC,MAAM,GAAGP,GAAG,CAACQ,WAAnB;AACA,MAAMC,cAAc,GAAG,yCAAmBT,GAAG,CAACU,QAAvB,CAAvB;AAEA,SAAO,8CAAoBV,GAAG,CAACI,MAAxB,EAAgC;AACrCH,IAAAA,YAAY,EAAZA,YADqC;AAErCI,IAAAA,KAAK,EAALA,KAFqC;AAGrCE,IAAAA,MAAM,EAANA,MAHqC;AAIrCI,IAAAA,YAAY,EAAE,sBAACC,KAAD;AAAA,aAAwBA,KAAK,CAACC,sBAA9B;AAAA,KAJuB;AAKrCJ,IAAAA,cAAc,EAAdA;AALqC,GAAhC,CAAP;AAOD","sourcesContent":["import {read} from 'ktx-parse';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\nimport {mapVkFormatToWebGL} from '../utils/ktx-format-helper';\n\nconst KTX2_ID = [\n // '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n\n// eslint-disable-next-line complexity\nexport function isKTX(data: ArrayBuffer) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX =\n id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n\n return !notKTX;\n}\n\nexport function parseKTX(arrayBuffer: ArrayBuffer) {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level: any): number => level.uncompressedByteLength,\n internalFormat\n });\n}\n"],"file":"parse-ktx.js"}
@@ -6,13 +6,13 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.parseNPY = parseNPY;
7
7
 
8
8
  function systemIsLittleEndian() {
9
- const a = new Uint32Array([0x12345678]);
10
- const b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
9
+ var a = new Uint32Array([0x12345678]);
10
+ var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
11
11
  return !(b[0] === 0x12);
12
12
  }
13
13
 
14
- const LITTLE_ENDIAN_OS = systemIsLittleEndian();
15
- const DTYPES = {
14
+ var LITTLE_ENDIAN_OS = systemIsLittleEndian();
15
+ var DTYPES = {
16
16
  u1: Uint8Array,
17
17
  i1: Int8Array,
18
18
  u2: Uint16Array,
@@ -30,37 +30,40 @@ function parseNPY(arrayBuffer, options) {
30
30
  return null;
31
31
  }
32
32
 
33
- const view = new DataView(arrayBuffer);
34
- const {
35
- header,
36
- headerEndOffset
37
- } = parseHeader(view);
38
- const numpyType = header.descr;
39
- const ArrayType = DTYPES[numpyType.slice(1, 3)];
33
+ var view = new DataView(arrayBuffer);
34
+
35
+ var _parseHeader = parseHeader(view),
36
+ header = _parseHeader.header,
37
+ headerEndOffset = _parseHeader.headerEndOffset;
38
+
39
+ var numpyType = header.descr;
40
+ var ArrayType = DTYPES[numpyType.slice(1, 3)];
40
41
 
41
42
  if (!ArrayType) {
42
43
  console.warn("Decoding of npy dtype not implemented: ".concat(numpyType));
43
44
  return null;
44
45
  }
45
46
 
46
- const nArrayElements = (_header$shape = header.shape) === null || _header$shape === void 0 ? void 0 : _header$shape.reduce((a, b) => a * b);
47
- const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;
48
- const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));
47
+ var nArrayElements = (_header$shape = header.shape) === null || _header$shape === void 0 ? void 0 : _header$shape.reduce(function (a, b) {
48
+ return a * b;
49
+ });
50
+ var arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;
51
+ var data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));
49
52
 
50
53
  if (numpyType[0] === '>' && LITTLE_ENDIAN_OS || numpyType[0] === '<' && !LITTLE_ENDIAN_OS) {
51
54
  console.warn('Data is wrong endianness, byte swapping not yet implemented.');
52
55
  }
53
56
 
54
57
  return {
55
- data,
56
- header
58
+ data: data,
59
+ header: header
57
60
  };
58
61
  }
59
62
 
60
63
  function parseHeader(view) {
61
- const majorVersion = view.getUint8(6);
62
- let offset = 8;
63
- let headerLength;
64
+ var majorVersion = view.getUint8(6);
65
+ var offset = 8;
66
+ var headerLength;
64
67
 
65
68
  if (majorVersion >= 2) {
66
69
  headerLength = view.getUint32(8, true);
@@ -70,14 +73,14 @@ function parseHeader(view) {
70
73
  offset += 2;
71
74
  }
72
75
 
73
- const encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';
74
- const decoder = new TextDecoder(encoding);
75
- const headerArray = new Uint8Array(view.buffer, offset, headerLength);
76
- const headerText = decoder.decode(headerArray);
76
+ var encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';
77
+ var decoder = new TextDecoder(encoding);
78
+ var headerArray = new Uint8Array(view.buffer, offset, headerLength);
79
+ var headerText = decoder.decode(headerArray);
77
80
  offset += headerLength;
78
- const header = JSON.parse(headerText.replace(/'/g, '"').replace('False', 'false').replace('(', '[').replace(/,*\),*/g, ']'));
81
+ var header = JSON.parse(headerText.replace(/'/g, '"').replace('False', 'false').replace('(', '[').replace(/,*\),*/g, ']'));
79
82
  return {
80
- header,
83
+ header: header,
81
84
  headerEndOffset: offset
82
85
  };
83
86
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-npy.ts"],"names":["systemIsLittleEndian","a","Uint32Array","b","Uint8Array","buffer","byteOffset","byteLength","LITTLE_ENDIAN_OS","DTYPES","u1","i1","Int8Array","u2","Uint16Array","i2","Int16Array","u4","i4","Int32Array","f4","Float32Array","f8","Float64Array","parseNPY","arrayBuffer","options","view","DataView","header","headerEndOffset","parseHeader","numpyType","descr","ArrayType","slice","console","warn","nArrayElements","shape","reduce","arrayByteLength","BYTES_PER_ELEMENT","data","majorVersion","getUint8","offset","headerLength","getUint32","getUint16","encoding","decoder","TextDecoder","headerArray","headerText","decode","JSON","parse","replace"],"mappings":"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","sourcesContent":["type NumpyHeader = {descr: string; shape: number[]};\n\nfunction systemIsLittleEndian() {\n const a = new Uint32Array([0x12345678]);\n const b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return !(b[0] === 0x12);\n}\n\nconst LITTLE_ENDIAN_OS = systemIsLittleEndian();\n\n// The basic string format consists of 3 characters:\n// 1. a character describing the byteorder of the data (<: little-endian, >: big-endian, |: not-relevant)\n// 2. a character code giving the basic type of the array\n// 3. an integer providing the number of bytes the type uses.\n// https://numpy.org/doc/stable/reference/arrays.interface.html\n//\n// Here I only include the second and third characters, and check endianness\n// separately\nconst DTYPES: Record<string, any> = {\n u1: Uint8Array,\n i1: Int8Array,\n u2: Uint16Array,\n i2: Int16Array,\n u4: Uint32Array,\n i4: Int32Array,\n f4: Float32Array,\n f8: Float64Array\n};\n\nexport function parseNPY(arrayBuffer: ArrayBuffer, options?: unknown) {\n if (!arrayBuffer) {\n return null;\n }\n\n const view = new DataView(arrayBuffer);\n const {header, headerEndOffset} = parseHeader(view);\n\n const numpyType = header.descr;\n const ArrayType = DTYPES[numpyType.slice(1, 3)];\n if (!ArrayType) {\n // eslint-disable-next-line no-console, no-undef\n console.warn(`Decoding of npy dtype not implemented: ${numpyType}`);\n return null;\n }\n\n const nArrayElements = header.shape?.reduce((a: number, b: number): number => a * b);\n const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;\n\n const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));\n\n // Swap endianness if needed\n if ((numpyType[0] === '>' && LITTLE_ENDIAN_OS) || (numpyType[0] === '<' && !LITTLE_ENDIAN_OS)) {\n // eslint-disable-next-line no-console, no-undef\n console.warn('Data is wrong endianness, byte swapping not yet implemented.');\n }\n\n return {\n data,\n header\n };\n}\n\n/**\n * Parse NPY header\n *\n * @param view\n * @return\n */\nfunction parseHeader(view: DataView): {header: NumpyHeader; headerEndOffset: number} {\n const majorVersion = view.getUint8(6);\n // const minorVersion = view.getUint8(7);\n\n let offset = 8;\n let headerLength;\n if (majorVersion >= 2) {\n headerLength = view.getUint32(8, true);\n offset += 4;\n } else {\n headerLength = view.getUint16(8, true);\n offset += 2;\n }\n\n const encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';\n const decoder = new TextDecoder(encoding);\n const headerArray = new Uint8Array(view.buffer, offset, headerLength);\n const headerText = decoder.decode(headerArray);\n offset += headerLength;\n\n const header = JSON.parse(\n headerText\n .replace(/'/g, '\"')\n .replace('False', 'false')\n .replace('(', '[')\n .replace(/,*\\),*/g, ']')\n );\n\n return {header, headerEndOffset: offset};\n}\n"],"file":"parse-npy.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-npy.ts"],"names":["systemIsLittleEndian","a","Uint32Array","b","Uint8Array","buffer","byteOffset","byteLength","LITTLE_ENDIAN_OS","DTYPES","u1","i1","Int8Array","u2","Uint16Array","i2","Int16Array","u4","i4","Int32Array","f4","Float32Array","f8","Float64Array","parseNPY","arrayBuffer","options","view","DataView","parseHeader","header","headerEndOffset","numpyType","descr","ArrayType","slice","console","warn","nArrayElements","shape","reduce","arrayByteLength","BYTES_PER_ELEMENT","data","majorVersion","getUint8","offset","headerLength","getUint32","getUint16","encoding","decoder","TextDecoder","headerArray","headerText","decode","JSON","parse","replace"],"mappings":"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","sourcesContent":["type NumpyHeader = {descr: string; shape: number[]};\n\nfunction systemIsLittleEndian() {\n const a = new Uint32Array([0x12345678]);\n const b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return !(b[0] === 0x12);\n}\n\nconst LITTLE_ENDIAN_OS = systemIsLittleEndian();\n\n// The basic string format consists of 3 characters:\n// 1. a character describing the byteorder of the data (<: little-endian, >: big-endian, |: not-relevant)\n// 2. a character code giving the basic type of the array\n// 3. an integer providing the number of bytes the type uses.\n// https://numpy.org/doc/stable/reference/arrays.interface.html\n//\n// Here I only include the second and third characters, and check endianness\n// separately\nconst DTYPES: Record<string, any> = {\n u1: Uint8Array,\n i1: Int8Array,\n u2: Uint16Array,\n i2: Int16Array,\n u4: Uint32Array,\n i4: Int32Array,\n f4: Float32Array,\n f8: Float64Array\n};\n\nexport function parseNPY(arrayBuffer: ArrayBuffer, options?: unknown) {\n if (!arrayBuffer) {\n return null;\n }\n\n const view = new DataView(arrayBuffer);\n const {header, headerEndOffset} = parseHeader(view);\n\n const numpyType = header.descr;\n const ArrayType = DTYPES[numpyType.slice(1, 3)];\n if (!ArrayType) {\n // eslint-disable-next-line no-console, no-undef\n console.warn(`Decoding of npy dtype not implemented: ${numpyType}`);\n return null;\n }\n\n const nArrayElements = header.shape?.reduce((a: number, b: number): number => a * b);\n const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;\n\n const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));\n\n // Swap endianness if needed\n if ((numpyType[0] === '>' && LITTLE_ENDIAN_OS) || (numpyType[0] === '<' && !LITTLE_ENDIAN_OS)) {\n // eslint-disable-next-line no-console, no-undef\n console.warn('Data is wrong endianness, byte swapping not yet implemented.');\n }\n\n return {\n data,\n header\n };\n}\n\n/**\n * Parse NPY header\n *\n * @param view\n * @return\n */\nfunction parseHeader(view: DataView): {header: NumpyHeader; headerEndOffset: number} {\n const majorVersion = view.getUint8(6);\n // const minorVersion = view.getUint8(7);\n\n let offset = 8;\n let headerLength;\n if (majorVersion >= 2) {\n headerLength = view.getUint32(8, true);\n offset += 4;\n } else {\n headerLength = view.getUint16(8, true);\n offset += 2;\n }\n\n const encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';\n const decoder = new TextDecoder(encoding);\n const headerArray = new Uint8Array(view.buffer, offset, headerLength);\n const headerText = decoder.decode(headerArray);\n offset += headerLength;\n\n const header = JSON.parse(\n headerText\n .replace(/'/g, '\"')\n .replace('False', 'false')\n .replace('(', '[')\n .replace(/,*\\),*/g, ']')\n );\n\n return {header, headerEndOffset: offset};\n}\n"],"file":"parse-npy.js"}
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.isPVR = isPVR;
7
7
  exports.parsePVR = parsePVR;
8
8
 
9
- var _glConstants = require("../gl-constants");
9
+ var _glExtensions = require("../gl-extensions");
10
10
 
11
11
  var _extractMipmapImages = require("../utils/extract-mipmap-images");
12
12
 
13
- const PVR_CONSTANTS = {
13
+ var PVR_CONSTANTS = {
14
14
  MAGIC_NUMBER: 0x03525650,
15
15
  MAGIC_NUMBER_EXTRA: 0x50565203,
16
16
  HEADER_LENGTH: 13,
@@ -23,36 +23,36 @@ const PVR_CONSTANTS = {
23
23
  MIPMAPCOUNT_INDEX: 11,
24
24
  METADATA_SIZE_INDEX: 12
25
25
  };
26
- const PVR_PIXEL_FORMATS = {
27
- 0: [_glConstants.GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],
28
- 1: [_glConstants.GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],
29
- 2: [_glConstants.GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],
30
- 3: [_glConstants.GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],
31
- 6: [_glConstants.GL.COMPRESSED_RGB_ETC1_WEBGL],
32
- 7: [_glConstants.GL.COMPRESSED_RGB_S3TC_DXT1_EXT],
33
- 9: [_glConstants.GL.COMPRESSED_RGBA_S3TC_DXT3_EXT],
34
- 11: [_glConstants.GL.COMPRESSED_RGBA_S3TC_DXT5_EXT],
35
- 22: [_glConstants.GL.COMPRESSED_RGB8_ETC2],
36
- 23: [_glConstants.GL.COMPRESSED_RGBA8_ETC2_EAC],
37
- 24: [_glConstants.GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],
38
- 25: [_glConstants.GL.COMPRESSED_R11_EAC],
39
- 26: [_glConstants.GL.COMPRESSED_RG11_EAC],
40
- 27: [_glConstants.GL.COMPRESSED_RGBA_ASTC_4X4_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR],
41
- 28: [_glConstants.GL.COMPRESSED_RGBA_ASTC_5X4_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR],
42
- 29: [_glConstants.GL.COMPRESSED_RGBA_ASTC_5X5_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR],
43
- 30: [_glConstants.GL.COMPRESSED_RGBA_ASTC_6X5_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR],
44
- 31: [_glConstants.GL.COMPRESSED_RGBA_ASTC_6X6_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR],
45
- 32: [_glConstants.GL.COMPRESSED_RGBA_ASTC_8X5_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR],
46
- 33: [_glConstants.GL.COMPRESSED_RGBA_ASTC_8X6_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR],
47
- 34: [_glConstants.GL.COMPRESSED_RGBA_ASTC_8X8_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR],
48
- 35: [_glConstants.GL.COMPRESSED_RGBA_ASTC_10X5_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR],
49
- 36: [_glConstants.GL.COMPRESSED_RGBA_ASTC_10X6_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR],
50
- 37: [_glConstants.GL.COMPRESSED_RGBA_ASTC_10X8_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR],
51
- 38: [_glConstants.GL.COMPRESSED_RGBA_ASTC_10X10_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR],
52
- 39: [_glConstants.GL.COMPRESSED_RGBA_ASTC_12X10_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR],
53
- 40: [_glConstants.GL.COMPRESSED_RGBA_ASTC_12X12_KHR, _glConstants.GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR]
26
+ var PVR_PIXEL_FORMATS = {
27
+ 0: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],
28
+ 1: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],
29
+ 2: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],
30
+ 3: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],
31
+ 6: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL],
32
+ 7: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT],
33
+ 9: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT],
34
+ 11: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT],
35
+ 22: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2],
36
+ 23: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC],
37
+ 24: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],
38
+ 25: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC],
39
+ 26: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC],
40
+ 27: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR],
41
+ 28: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X4_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR],
42
+ 29: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X5_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR],
43
+ 30: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X5_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR],
44
+ 31: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X6_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR],
45
+ 32: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X5_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR],
46
+ 33: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X6_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR],
47
+ 34: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X8_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR],
48
+ 35: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X5_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR],
49
+ 36: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X6_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR],
50
+ 37: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X8_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR],
51
+ 38: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X10_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR],
52
+ 39: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X10_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR],
53
+ 40: [_glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X12_KHR, _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR]
54
54
  };
55
- const PVR_SIZE_FUNCTIONS = {
55
+ var PVR_SIZE_FUNCTIONS = {
56
56
  0: pvrtc2bppSize,
57
57
  1: pvrtc2bppSize,
58
58
  2: pvrtc4bppSize,
@@ -83,29 +83,29 @@ const PVR_SIZE_FUNCTIONS = {
83
83
  };
84
84
 
85
85
  function isPVR(data) {
86
- const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);
87
- const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];
86
+ var header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);
87
+ var version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];
88
88
  return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;
89
89
  }
90
90
 
91
91
  function parsePVR(data) {
92
- const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);
93
- const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];
94
- const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];
95
- const pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];
96
- const internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];
97
- const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];
98
- const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];
99
- const width = header[PVR_CONSTANTS.WIDTH_INDEX];
100
- const height = header[PVR_CONSTANTS.HEIGHT_INDEX];
101
- const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];
102
- const image = new Uint8Array(data, dataOffset);
92
+ var header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);
93
+ var pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];
94
+ var colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];
95
+ var pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];
96
+ var internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];
97
+ var sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];
98
+ var mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];
99
+ var width = header[PVR_CONSTANTS.WIDTH_INDEX];
100
+ var height = header[PVR_CONSTANTS.HEIGHT_INDEX];
101
+ var dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];
102
+ var image = new Uint8Array(data, dataOffset);
103
103
  return (0, _extractMipmapImages.extractMipmapImages)(image, {
104
- mipMapLevels,
105
- width,
106
- height,
107
- sizeFunction,
108
- internalFormat
104
+ mipMapLevels: mipMapLevels,
105
+ width: width,
106
+ height: height,
107
+ sizeFunction: sizeFunction,
108
+ internalFormat: internalFormat
109
109
  });
110
110
  }
111
111
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-pvr.ts"],"names":["PVR_CONSTANTS","MAGIC_NUMBER","MAGIC_NUMBER_EXTRA","HEADER_LENGTH","HEADER_SIZE","MAGIC_NUMBER_INDEX","PIXEL_FORMAT_INDEX","COLOUR_SPACE_INDEX","HEIGHT_INDEX","WIDTH_INDEX","MIPMAPCOUNT_INDEX","METADATA_SIZE_INDEX","PVR_PIXEL_FORMATS","GL","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB8_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_RGBA_ASTC_4X4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR","COMPRESSED_RGBA_ASTC_5X4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR","COMPRESSED_RGBA_ASTC_5X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR","COMPRESSED_RGBA_ASTC_6X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR","COMPRESSED_RGBA_ASTC_6X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR","COMPRESSED_RGBA_ASTC_8X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR","COMPRESSED_RGBA_ASTC_8X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR","COMPRESSED_RGBA_ASTC_8X8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR","COMPRESSED_RGBA_ASTC_10X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR","COMPRESSED_RGBA_ASTC_10X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR","COMPRESSED_RGBA_ASTC_10X8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR","COMPRESSED_RGBA_ASTC_10X10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR","COMPRESSED_RGBA_ASTC_12X10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR","COMPRESSED_RGBA_ASTC_12X12_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR","PVR_SIZE_FUNCTIONS","pvrtc2bppSize","pvrtc4bppSize","dxtEtcSmallSize","dxtEtcAstcBigSize","atc5x4Size","atc5x5Size","atc6x5Size","atc6x6Size","atc8x5Size","atc8x6Size","atc8x8Size","atc10x5Size","atc10x6Size","atc10x8Size","atc10x10Size","atc12x10Size","atc12x12Size","isPVR","data","header","Uint32Array","version","parsePVR","pvrFormat","colourSpace","pixelFormats","internalFormat","length","sizeFunction","mipMapLevels","width","height","dataOffset","image","Uint8Array","Math","max","floor"],"mappings":"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","sourcesContent":["import {TextureLevel} from '../../types';\n/* eslint-disable camelcase */\n// Forked from PicoGL: https://github.com/tsherif/picogl.js/blob/master/examples/utils/utils.js\n// Copyright (c) 2017 Tarek Sherif, The MIT License (MIT)\nimport {GL} from '../gl-constants';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst PVR_CONSTANTS: Record<string, number> = {\n MAGIC_NUMBER: 0x03525650,\n MAGIC_NUMBER_EXTRA: 0x50565203,\n HEADER_LENGTH: 13,\n HEADER_SIZE: 52,\n MAGIC_NUMBER_INDEX: 0,\n PIXEL_FORMAT_INDEX: 2,\n COLOUR_SPACE_INDEX: 4,\n HEIGHT_INDEX: 6,\n WIDTH_INDEX: 7,\n MIPMAPCOUNT_INDEX: 11,\n METADATA_SIZE_INDEX: 12\n};\n\nconst PVR_PIXEL_FORMATS: Record<number, number[]> = {\n 0: [GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],\n 1: [GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],\n 2: [GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],\n 3: [GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],\n 6: [GL.COMPRESSED_RGB_ETC1_WEBGL],\n 7: [GL.COMPRESSED_RGB_S3TC_DXT1_EXT],\n 9: [GL.COMPRESSED_RGBA_S3TC_DXT3_EXT],\n 11: [GL.COMPRESSED_RGBA_S3TC_DXT5_EXT],\n 22: [GL.COMPRESSED_RGB8_ETC2],\n 23: [GL.COMPRESSED_RGBA8_ETC2_EAC],\n 24: [GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],\n 25: [GL.COMPRESSED_R11_EAC],\n 26: [GL.COMPRESSED_RG11_EAC],\n 27: [GL.COMPRESSED_RGBA_ASTC_4X4_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR],\n 28: [GL.COMPRESSED_RGBA_ASTC_5X4_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR],\n 29: [GL.COMPRESSED_RGBA_ASTC_5X5_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR],\n 30: [GL.COMPRESSED_RGBA_ASTC_6X5_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR],\n 31: [GL.COMPRESSED_RGBA_ASTC_6X6_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR],\n 32: [GL.COMPRESSED_RGBA_ASTC_8X5_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR],\n 33: [GL.COMPRESSED_RGBA_ASTC_8X6_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR],\n 34: [GL.COMPRESSED_RGBA_ASTC_8X8_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR],\n 35: [GL.COMPRESSED_RGBA_ASTC_10X5_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR],\n 36: [GL.COMPRESSED_RGBA_ASTC_10X6_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR],\n 37: [GL.COMPRESSED_RGBA_ASTC_10X8_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR],\n 38: [GL.COMPRESSED_RGBA_ASTC_10X10_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR],\n 39: [GL.COMPRESSED_RGBA_ASTC_12X10_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR],\n 40: [GL.COMPRESSED_RGBA_ASTC_12X12_KHR, GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR]\n};\n\nconst PVR_SIZE_FUNCTIONS: Record<number, (width: number, height: number) => number> = {\n 0: pvrtc2bppSize,\n 1: pvrtc2bppSize,\n 2: pvrtc4bppSize,\n 3: pvrtc4bppSize,\n 6: dxtEtcSmallSize,\n 7: dxtEtcSmallSize,\n 9: dxtEtcAstcBigSize,\n 11: dxtEtcAstcBigSize,\n 22: dxtEtcSmallSize,\n 23: dxtEtcAstcBigSize,\n 24: dxtEtcSmallSize,\n 25: dxtEtcSmallSize,\n 26: dxtEtcAstcBigSize,\n 27: dxtEtcAstcBigSize,\n 28: atc5x4Size,\n 29: atc5x5Size,\n 30: atc6x5Size,\n 31: atc6x6Size,\n 32: atc8x5Size,\n 33: atc8x6Size,\n 34: atc8x8Size,\n 35: atc10x5Size,\n 36: atc10x6Size,\n 37: atc10x8Size,\n 38: atc10x10Size,\n 39: atc12x10Size,\n 40: atc12x12Size\n};\n\n/**\n * Check if data is in \"PVR\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"PVR\" format, else - false\n */\nexport function isPVR(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];\n\n return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;\n}\n\n/**\n * Parse texture data as \"PVR\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n * @see http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf\n */\nexport function parsePVR(data: ArrayBuffer): TextureLevel[] {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n\n const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];\n const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];\n const pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];\n const internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];\n\n const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];\n\n const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];\n\n const width = header[PVR_CONSTANTS.WIDTH_INDEX];\n const height = header[PVR_CONSTANTS.HEIGHT_INDEX];\n\n const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];\n\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc2bppSize(width: number, height: number): number {\n width = Math.max(width, 16);\n height = Math.max(height, 8);\n\n return (width * height) / 4;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc4bppSize(width: number, height: number): number {\n width = Math.max(width, 8);\n height = Math.max(height, 8);\n\n return (width * height) / 2;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// Size for:\n// COMPRESSED_RGB_S3TC_DXT1_EXT\n// COMPRESSED_R11_EAC\n// COMPRESSED_SIGNED_R11_EAC\n// COMPRESSED_RGB8_ETC2\n// COMPRESSED_SRGB8_ETC2\n// COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\n// COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\nfunction dxtEtcSmallSize(width: number, height: number): number {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\n// Size for:\n// COMPRESSED_RGBA_S3TC_DXT3_EXT\n// COMPRESSED_RGBA_S3TC_DXT5_EXT\n// COMPRESSED_RG11_EAC\n// COMPRESSED_SIGNED_RG11_EAC\n// COMPRESSED_RGBA8_ETC2_EAC\n// COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n// COMPRESSED_RGBA_ASTC_4x4_KHR\nfunction dxtEtcAstcBigSize(width: number, height: number): number {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x4Size(width: number, height: number): number {\n return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x5Size(width: number, height: number): number {\n return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x5Size(width: number, height: number): number {\n return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x6Size(width: number, height: number): number {\n return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x5Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x6Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x8Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x5Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x6Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x8Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x10Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x10Size(width: number, height: number): number {\n return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x12Size(width: number, height: number): number {\n return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16;\n}\n"],"file":"parse-pvr.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-pvr.ts"],"names":["PVR_CONSTANTS","MAGIC_NUMBER","MAGIC_NUMBER_EXTRA","HEADER_LENGTH","HEADER_SIZE","MAGIC_NUMBER_INDEX","PIXEL_FORMAT_INDEX","COLOUR_SPACE_INDEX","HEIGHT_INDEX","WIDTH_INDEX","MIPMAPCOUNT_INDEX","METADATA_SIZE_INDEX","PVR_PIXEL_FORMATS","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB8_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_RGBA_ASTC_4X4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR","COMPRESSED_RGBA_ASTC_5X4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR","COMPRESSED_RGBA_ASTC_5X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR","COMPRESSED_RGBA_ASTC_6X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR","COMPRESSED_RGBA_ASTC_6X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR","COMPRESSED_RGBA_ASTC_8X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR","COMPRESSED_RGBA_ASTC_8X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR","COMPRESSED_RGBA_ASTC_8X8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR","COMPRESSED_RGBA_ASTC_10X5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR","COMPRESSED_RGBA_ASTC_10X6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR","COMPRESSED_RGBA_ASTC_10X8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR","COMPRESSED_RGBA_ASTC_10X10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR","COMPRESSED_RGBA_ASTC_12X10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR","COMPRESSED_RGBA_ASTC_12X12_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR","PVR_SIZE_FUNCTIONS","pvrtc2bppSize","pvrtc4bppSize","dxtEtcSmallSize","dxtEtcAstcBigSize","atc5x4Size","atc5x5Size","atc6x5Size","atc6x6Size","atc8x5Size","atc8x6Size","atc8x8Size","atc10x5Size","atc10x6Size","atc10x8Size","atc10x10Size","atc12x10Size","atc12x12Size","isPVR","data","header","Uint32Array","version","parsePVR","pvrFormat","colourSpace","pixelFormats","internalFormat","length","sizeFunction","mipMapLevels","width","height","dataOffset","image","Uint8Array","Math","max","floor"],"mappings":"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","sourcesContent":["import {TextureLevel} from '../../types';\n/* eslint-disable camelcase */\n// Forked from PicoGL: https://github.com/tsherif/picogl.js/blob/master/examples/utils/utils.js\n// Copyright (c) 2017 Tarek Sherif, The MIT License (MIT)\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst PVR_CONSTANTS: Record<string, number> = {\n MAGIC_NUMBER: 0x03525650,\n MAGIC_NUMBER_EXTRA: 0x50565203,\n HEADER_LENGTH: 13,\n HEADER_SIZE: 52,\n MAGIC_NUMBER_INDEX: 0,\n PIXEL_FORMAT_INDEX: 2,\n COLOUR_SPACE_INDEX: 4,\n HEIGHT_INDEX: 6,\n WIDTH_INDEX: 7,\n MIPMAPCOUNT_INDEX: 11,\n METADATA_SIZE_INDEX: 12\n};\n\nconst PVR_PIXEL_FORMATS: Record<number, number[]> = {\n 0: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],\n 1: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],\n 2: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],\n 3: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],\n 6: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL],\n 7: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT],\n 9: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT],\n 11: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT],\n 22: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2],\n 23: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC],\n 24: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],\n 25: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC],\n 26: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC],\n 27: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR\n ],\n 28: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X4_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR\n ],\n 29: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR\n ],\n 30: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR\n ],\n 31: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR\n ],\n 32: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR\n ],\n 33: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR\n ],\n 34: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X8_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR\n ],\n 35: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR\n ],\n 36: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR\n ],\n 37: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X8_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR\n ],\n 38: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X10_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR\n ],\n 39: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X10_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR\n ],\n 40: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X12_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR\n ]\n};\n\nconst PVR_SIZE_FUNCTIONS: Record<number, (width: number, height: number) => number> = {\n 0: pvrtc2bppSize,\n 1: pvrtc2bppSize,\n 2: pvrtc4bppSize,\n 3: pvrtc4bppSize,\n 6: dxtEtcSmallSize,\n 7: dxtEtcSmallSize,\n 9: dxtEtcAstcBigSize,\n 11: dxtEtcAstcBigSize,\n 22: dxtEtcSmallSize,\n 23: dxtEtcAstcBigSize,\n 24: dxtEtcSmallSize,\n 25: dxtEtcSmallSize,\n 26: dxtEtcAstcBigSize,\n 27: dxtEtcAstcBigSize,\n 28: atc5x4Size,\n 29: atc5x5Size,\n 30: atc6x5Size,\n 31: atc6x6Size,\n 32: atc8x5Size,\n 33: atc8x6Size,\n 34: atc8x8Size,\n 35: atc10x5Size,\n 36: atc10x6Size,\n 37: atc10x8Size,\n 38: atc10x10Size,\n 39: atc12x10Size,\n 40: atc12x12Size\n};\n\n/**\n * Check if data is in \"PVR\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"PVR\" format, else - false\n */\nexport function isPVR(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];\n\n return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;\n}\n\n/**\n * Parse texture data as \"PVR\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n * @see http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf\n */\nexport function parsePVR(data: ArrayBuffer): TextureLevel[] {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n\n const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];\n const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];\n const pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];\n const internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];\n\n const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];\n\n const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];\n\n const width = header[PVR_CONSTANTS.WIDTH_INDEX];\n const height = header[PVR_CONSTANTS.HEIGHT_INDEX];\n\n const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];\n\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc2bppSize(width: number, height: number): number {\n width = Math.max(width, 16);\n height = Math.max(height, 8);\n\n return (width * height) / 4;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc4bppSize(width: number, height: number): number {\n width = Math.max(width, 8);\n height = Math.max(height, 8);\n\n return (width * height) / 2;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// Size for:\n// COMPRESSED_RGB_S3TC_DXT1_EXT\n// COMPRESSED_R11_EAC\n// COMPRESSED_SIGNED_R11_EAC\n// COMPRESSED_RGB8_ETC2\n// COMPRESSED_SRGB8_ETC2\n// COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\n// COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\nfunction dxtEtcSmallSize(width: number, height: number): number {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\n// Size for:\n// COMPRESSED_RGBA_S3TC_DXT3_EXT\n// COMPRESSED_RGBA_S3TC_DXT5_EXT\n// COMPRESSED_RG11_EAC\n// COMPRESSED_SIGNED_RG11_EAC\n// COMPRESSED_RGBA8_ETC2_EAC\n// COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n// COMPRESSED_RGBA_ASTC_4x4_KHR\nfunction dxtEtcAstcBigSize(width: number, height: number): number {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x4Size(width: number, height: number): number {\n return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x5Size(width: number, height: number): number {\n return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x5Size(width: number, height: number): number {\n return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x6Size(width: number, height: number): number {\n return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x5Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x6Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x8Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x5Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x6Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x8Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x10Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x10Size(width: number, height: number): number {\n return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x12Size(width: number, height: number): number {\n return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16;\n}\n"],"file":"parse-pvr.js"}