@loaders.gl/textures 3.1.6 → 3.2.0-alpha.1

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 (86) hide show
  1. package/dist/basis-worker.js +57 -26
  2. package/dist/compressed-texture-loader.d.ts +1 -1
  3. package/dist/compressed-texture-loader.js +1 -1
  4. package/dist/compressed-texture-worker.js +58 -27
  5. package/dist/crunch-worker.js +61 -29
  6. package/dist/dist.min.js +13 -13
  7. package/dist/es5/compressed-texture-loader.js +1 -1
  8. package/dist/es5/compressed-texture-loader.js.map +1 -1
  9. package/dist/es5/index.js.map +1 -1
  10. package/dist/es5/lib/parsers/basis-module-loader.js +1 -1
  11. package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -1
  12. package/dist/es5/lib/parsers/parse-basis.js +8 -8
  13. package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
  14. package/dist/es5/lib/parsers/parse-compressed-texture.js.map +1 -1
  15. package/dist/es5/lib/parsers/parse-crunch.js +8 -7
  16. package/dist/es5/lib/parsers/parse-crunch.js.map +1 -1
  17. package/dist/es5/lib/parsers/parse-dds.js.map +1 -1
  18. package/dist/es5/lib/parsers/parse-ktx.js.map +1 -1
  19. package/dist/es5/lib/parsers/parse-npy.js.map +1 -1
  20. package/dist/es5/lib/parsers/parse-pvr.js.map +1 -1
  21. package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -1
  22. package/dist/es5/lib/utils/texture-formats.js.map +1 -1
  23. package/dist/es5/lib/utils/version.js +1 -1
  24. package/dist/es5/lib/utils/version.js.map +1 -1
  25. package/dist/esm/compressed-texture-loader.js +1 -1
  26. package/dist/esm/compressed-texture-loader.js.map +1 -1
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/lib/parsers/basis-module-loader.js +1 -1
  29. package/dist/esm/lib/parsers/basis-module-loader.js.map +1 -1
  30. package/dist/esm/lib/parsers/parse-basis.js +8 -8
  31. package/dist/esm/lib/parsers/parse-basis.js.map +1 -1
  32. package/dist/esm/lib/parsers/parse-compressed-texture.js.map +1 -1
  33. package/dist/esm/lib/parsers/parse-crunch.js +13 -12
  34. package/dist/esm/lib/parsers/parse-crunch.js.map +1 -1
  35. package/dist/esm/lib/parsers/parse-dds.js.map +1 -1
  36. package/dist/esm/lib/parsers/parse-ktx.js.map +1 -1
  37. package/dist/esm/lib/parsers/parse-npy.js.map +1 -1
  38. package/dist/esm/lib/parsers/parse-pvr.js.map +1 -1
  39. package/dist/esm/lib/utils/extract-mipmap-images.js.map +1 -1
  40. package/dist/esm/lib/utils/texture-formats.js.map +1 -1
  41. package/dist/esm/lib/utils/version.js +1 -1
  42. package/dist/esm/lib/utils/version.js.map +1 -1
  43. package/dist/esm/types.js +1 -1
  44. package/dist/index.d.ts +1 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/lib/parsers/basis-module-loader.js +1 -1
  47. package/dist/lib/parsers/parse-basis.d.ts +8 -6
  48. package/dist/lib/parsers/parse-basis.d.ts.map +1 -1
  49. package/dist/lib/parsers/parse-basis.js +25 -25
  50. package/dist/lib/parsers/parse-compressed-texture.d.ts +1 -1
  51. package/dist/lib/parsers/parse-compressed-texture.d.ts.map +1 -1
  52. package/dist/lib/parsers/parse-crunch.d.ts +1 -1
  53. package/dist/lib/parsers/parse-crunch.d.ts.map +1 -1
  54. package/dist/lib/parsers/parse-crunch.js +14 -13
  55. package/dist/lib/parsers/parse-dds.d.ts +1 -1
  56. package/dist/lib/parsers/parse-dds.d.ts.map +1 -1
  57. package/dist/lib/parsers/parse-ktx.d.ts +2 -1
  58. package/dist/lib/parsers/parse-ktx.d.ts.map +1 -1
  59. package/dist/lib/parsers/parse-npy.d.ts.map +1 -1
  60. package/dist/lib/parsers/parse-npy.js +1 -0
  61. package/dist/lib/parsers/parse-pvr.d.ts +1 -1
  62. package/dist/lib/parsers/parse-pvr.d.ts.map +1 -1
  63. package/dist/lib/parsers/parse-pvr.js +2 -2
  64. package/dist/lib/utils/extract-mipmap-images.d.ts +8 -1
  65. package/dist/lib/utils/extract-mipmap-images.d.ts.map +1 -1
  66. package/dist/lib/utils/version.d.ts.map +1 -1
  67. package/dist/lib/utils/version.js +2 -1
  68. package/dist/npy-worker.js +46 -15
  69. package/dist/types.d.ts +0 -20
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/types.js +0 -1
  72. package/package.json +6 -5
  73. package/src/compressed-texture-loader.ts +1 -1
  74. package/src/index.ts +1 -1
  75. package/src/lib/parsers/basis-module-loader.ts +1 -1
  76. package/src/lib/parsers/parse-basis.ts +68 -36
  77. package/src/lib/parsers/parse-compressed-texture.ts +1 -1
  78. package/src/lib/parsers/parse-crunch.ts +15 -14
  79. package/src/lib/parsers/parse-dds.ts +1 -1
  80. package/src/lib/parsers/parse-ktx.ts +2 -1
  81. package/src/lib/parsers/parse-npy.ts +2 -0
  82. package/src/lib/parsers/parse-pvr.ts +2 -1
  83. package/src/lib/utils/extract-mipmap-images.ts +9 -1
  84. package/src/lib/utils/texture-formats.ts +1 -1
  85. package/src/lib/utils/version.ts +2 -1
  86. package/src/types.ts +0 -30
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/compressed-texture-loader.ts"],"names":["DEFAULT_TEXTURE_LOADER_OPTIONS","libraryPath","useBasis","CompressedTextureWorkerLoader","name","id","module","version","VERSION","worker","extensions","mimeTypes","binary","options","CompressedTextureLoader","parse","arrayBuffer","basis","format","alpha","noAlpha","containerFormat","_TypecheckCompressedTextureWorkerLoader","_TypecheckCompressedTextureLoader"],"mappings":";;;;;;;;;;;;;;;AACA;;AACA;;AACA;;;;;;AASA,IAAMA,8BAA8B,GAAG;AACrC,wBAAsB;AACpBC,IAAAA,WAAW,EAAE,OADO;AAEpBC,IAAAA,QAAQ,EAAE;AAFU;AADe,CAAvC;AAUO,IAAMC,6BAA6B,GAAG;AAC3CC,EAAAA,IAAI,EAAE,oBADqC;AAE3CC,EAAAA,EAAE,EAAE,oBAFuC;AAG3CC,EAAAA,MAAM,EAAE,UAHmC;AAI3CC,EAAAA,OAAO,EAAEC,gBAJkC;AAK3CC,EAAAA,MAAM,EAAE,IALmC;AAM3CC,EAAAA,UAAU,EAAE,CACV,KADU,EAEV,MAFU,EAGV,KAHU,EAIV,KAJU,CAN+B;AAY3CC,EAAAA,SAAS,EAAE,CACT,YADS,EAET,WAFS,EAGT,kBAHS,EAIT,aAJS,EAKT,0BALS,CAZgC;AAmB3CC,EAAAA,MAAM,EAAE,IAnBmC;AAoB3CC,EAAAA,OAAO,EAAEb;AApBkC,CAAtC;;;AA0BA,IAAMc,uBAAuB,mCAC/BX,6BAD+B;AAElCY,EAAAA,KAAK;AAAA,2EAAE,iBAAOC,WAAP,EAAoBH,OAApB;AAAA;AAAA;AAAA;AAAA;AAAA,mBACDA,OAAO,CAAC,oBAAD,CAAP,CAA8BX,QAD7B;AAAA;AAAA;AAAA;;AAEHW,cAAAA,OAAO,CAACI,KAAR;AACEC,gBAAAA,MAAM,EAAE;AACNC,kBAAAA,KAAK,EAAE,KADD;AAENC,kBAAAA,OAAO,EAAE;AAFH;AADV,iBAKKP,OAAO,CAACI,KALb;AAMEI,gBAAAA,eAAe,EAAE,MANnB;AAOEf,gBAAAA,MAAM,EAAE;AAPV;AAFG;AAAA,qBAWU,yBAAWU,WAAX,EAAwBH,OAAxB,CAXV;;AAAA;AAAA;;AAAA;AAAA,+CAaE,oDAAuBG,WAAvB,CAbF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAF6B,EAA7B;;;AAoBA,IAAMM,uCAA+C,GAAGnB,6BAAxD;;AACA,IAAMoB,iCAAmD,GAAGT,uBAA5D","sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport {parseCompressedTexture} from './lib/parsers/parse-compressed-texture';\nimport parseBasis from './lib/parsers/parse-basis';\n\nexport type TextureLoaderOptions = {\n 'compressed-texture'?: {\n libraryPath?: string;\n useBasis?: boolean;\n };\n};\n\nconst DEFAULT_TEXTURE_LOADER_OPTIONS = {\n 'compressed-texture': {\n libraryPath: 'libs/',\n useBasis: false\n }\n};\n\n/**\n * Worker Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureWorkerLoader = {\n name: 'Texture Containers',\n id: 'compressed-texture',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: [\n 'ktx',\n 'ktx2',\n 'dds', // WEBGL_compressed_texture_s3tc, WEBGL_compressed_texture_atc\n 'pvr' // WEBGL_compressed_texture_pvrtc\n ],\n mimeTypes: [\n 'image/ktx2',\n 'image/ktx',\n 'image/vnd-ms.dds',\n 'image/x-dds',\n 'application/octet-stream'\n ],\n binary: true,\n options: DEFAULT_TEXTURE_LOADER_OPTIONS\n};\n\n/**\n * Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureLoader = {\n ...CompressedTextureWorkerLoader,\n parse: async (arrayBuffer, options) => {\n if (options['compressed-texture'].useBasis) {\n options.basis = {\n format: {\n alpha: 'BC3',\n noAlpha: 'BC1'\n },\n ...options.basis,\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n return await parseBasis(arrayBuffer, options);\n }\n return parseCompressedTexture(arrayBuffer);\n }\n};\n\n// TYPE TESTS - TODO find a better way than exporting junk\nexport const _TypecheckCompressedTextureWorkerLoader: Loader = CompressedTextureWorkerLoader;\nexport const _TypecheckCompressedTextureLoader: LoaderWithParser = CompressedTextureLoader;\n"],"file":"compressed-texture-loader.js"}
1
+ {"version":3,"sources":["../../src/compressed-texture-loader.ts"],"names":["DEFAULT_TEXTURE_LOADER_OPTIONS","libraryPath","useBasis","CompressedTextureWorkerLoader","name","id","module","version","VERSION","worker","extensions","mimeTypes","binary","options","CompressedTextureLoader","parse","arrayBuffer","basis","format","alpha","noAlpha","containerFormat","_TypecheckCompressedTextureWorkerLoader","_TypecheckCompressedTextureLoader"],"mappings":";;;;;;;;;;;;;;;AACA;;AACA;;AACA;;;;;;AASA,IAAMA,8BAA8B,GAAG;AACrC,wBAAsB;AACpBC,IAAAA,WAAW,EAAE,OADO;AAEpBC,IAAAA,QAAQ,EAAE;AAFU;AADe,CAAvC;AAUO,IAAMC,6BAA6B,GAAG;AAC3CC,EAAAA,IAAI,EAAE,oBADqC;AAE3CC,EAAAA,EAAE,EAAE,oBAFuC;AAG3CC,EAAAA,MAAM,EAAE,UAHmC;AAI3CC,EAAAA,OAAO,EAAEC,gBAJkC;AAK3CC,EAAAA,MAAM,EAAE,IALmC;AAM3CC,EAAAA,UAAU,EAAE,CACV,KADU,EAEV,MAFU,EAGV,KAHU,EAIV,KAJU,CAN+B;AAY3CC,EAAAA,SAAS,EAAE,CACT,YADS,EAET,WAFS,EAGT,kBAHS,EAIT,aAJS,EAKT,0BALS,CAZgC;AAmB3CC,EAAAA,MAAM,EAAE,IAnBmC;AAoB3CC,EAAAA,OAAO,EAAEb;AApBkC,CAAtC;;;AA0BA,IAAMc,uBAAuB,mCAC/BX,6BAD+B;AAElCY,EAAAA,KAAK;AAAA,2EAAE,iBAAOC,WAAP,EAAoBH,OAApB;AAAA;AAAA;AAAA;AAAA;AAAA,mBACDA,OAAO,CAAC,oBAAD,CAAP,CAA8BX,QAD7B;AAAA;AAAA;AAAA;;AAEHW,cAAAA,OAAO,CAACI,KAAR;AACEC,gBAAAA,MAAM,EAAE;AACNC,kBAAAA,KAAK,EAAE,KADD;AAENC,kBAAAA,OAAO,EAAE;AAFH;AADV,iBAKKP,OAAO,CAACI,KALb;AAMEI,gBAAAA,eAAe,EAAE,MANnB;AAOEf,gBAAAA,MAAM,EAAE;AAPV;AAFG;AAAA,qBAWW,yBAAWU,WAAX,EAAwBH,OAAxB,CAXX;;AAAA;AAAA,6DAW6C,CAX7C;;AAAA;AAAA,+CAaE,oDAAuBG,WAAvB,CAbF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAF6B,EAA7B;;;AAoBA,IAAMM,uCAA+C,GAAGnB,6BAAxD;;AACA,IAAMoB,iCAAmD,GAAGT,uBAA5D","sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport {parseCompressedTexture} from './lib/parsers/parse-compressed-texture';\nimport parseBasis from './lib/parsers/parse-basis';\n\nexport type TextureLoaderOptions = {\n 'compressed-texture'?: {\n libraryPath?: string;\n useBasis?: boolean;\n };\n};\n\nconst DEFAULT_TEXTURE_LOADER_OPTIONS = {\n 'compressed-texture': {\n libraryPath: 'libs/',\n useBasis: false\n }\n};\n\n/**\n * Worker Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureWorkerLoader = {\n name: 'Texture Containers',\n id: 'compressed-texture',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: [\n 'ktx',\n 'ktx2',\n 'dds', // WEBGL_compressed_texture_s3tc, WEBGL_compressed_texture_atc\n 'pvr' // WEBGL_compressed_texture_pvrtc\n ],\n mimeTypes: [\n 'image/ktx2',\n 'image/ktx',\n 'image/vnd-ms.dds',\n 'image/x-dds',\n 'application/octet-stream'\n ],\n binary: true,\n options: DEFAULT_TEXTURE_LOADER_OPTIONS\n};\n\n/**\n * Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureLoader = {\n ...CompressedTextureWorkerLoader,\n parse: async (arrayBuffer, options) => {\n if (options['compressed-texture'].useBasis) {\n options.basis = {\n format: {\n alpha: 'BC3',\n noAlpha: 'BC1'\n },\n ...options.basis,\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n return (await parseBasis(arrayBuffer, options))[0];\n }\n return parseCompressedTexture(arrayBuffer);\n }\n};\n\n// TYPE TESTS - TODO find a better way than exporting junk\nexport const _TypecheckCompressedTextureWorkerLoader: Loader = CompressedTextureWorkerLoader;\nexport const _TypecheckCompressedTextureLoader: LoaderWithParser = CompressedTextureLoader;\n"],"file":"compressed-texture-loader.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AAGA;;AACA;;AACA;;AAGA;;AACA;;AACA","sourcesContent":["// Types\nexport type {GPUTextureFormat} from './types';\nexport type {TextureLoaderOptions} from './compressed-texture-loader';\n\n// Loaders\nexport {BasisLoader, BasisWorkerLoader} from './basis-loader';\nexport {CompressedTextureLoader, CompressedTextureWorkerLoader} from './compressed-texture-loader';\nexport {CrunchLoader} from './crunch-loader';\nexport {NPYLoader, NPYWorkerLoader} from './npy-loader';\n\n// Writers\nexport {CompressedTextureWriter} from './compressed-texture-writer';\nexport {KTX2BasisUniversalTextureWriter} from './ktx2-basis-universal-texture-writer';\n\n// Texture Loading API\nexport {loadImageTexture} from './lib/texture-api/load-image';\nexport {loadImageTextureArray} from './lib/texture-api/load-image-array';\nexport {loadImageTextureCube} from './lib/texture-api/load-image-cube';\n\n// Utilities\nexport {GL_EXTENSIONS_CONSTANTS} from './lib/gl-extensions';\nexport {selectSupportedBasisFormat} from './lib/parsers/parse-basis';\nexport {getSupportedGPUTextureFormats} from './lib/utils/texture-formats';\n\n// DEPRECATED\nexport {CrunchLoader as CrunchWorkerLoader} from './crunch-loader';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AAGA;;AACA;;AACA;;AAGA;;AACA;;AACA","sourcesContent":["// Types\nexport type {GPUTextureFormat} from '@loaders.gl/schema';\nexport type {TextureLoaderOptions} from './compressed-texture-loader';\n\n// Loaders\nexport {BasisLoader, BasisWorkerLoader} from './basis-loader';\nexport {CompressedTextureLoader, CompressedTextureWorkerLoader} from './compressed-texture-loader';\nexport {CrunchLoader} from './crunch-loader';\nexport {NPYLoader, NPYWorkerLoader} from './npy-loader';\n\n// Writers\nexport {CompressedTextureWriter} from './compressed-texture-writer';\nexport {KTX2BasisUniversalTextureWriter} from './ktx2-basis-universal-texture-writer';\n\n// Texture Loading API\nexport {loadImageTexture} from './lib/texture-api/load-image';\nexport {loadImageTextureArray} from './lib/texture-api/load-image-array';\nexport {loadImageTextureCube} from './lib/texture-api/load-image-cube';\n\n// Utilities\nexport {GL_EXTENSIONS_CONSTANTS} from './lib/gl-extensions';\nexport {selectSupportedBasisFormat} from './lib/parsers/parse-basis';\nexport {getSupportedGPUTextureFormats} from './lib/utils/texture-formats';\n\n// DEPRECATED\nexport {CrunchLoader as CrunchWorkerLoader} from './crunch-loader';\n"],"file":"index.js"}
@@ -16,7 +16,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
16
16
 
17
17
  var _workerUtils = require("@loaders.gl/worker-utils");
18
18
 
19
- var VERSION = typeof "3.1.6" !== 'undefined' ? "3.1.6" : 'latest';
19
+ var VERSION = typeof "3.2.0-alpha.1" !== 'undefined' ? "3.2.0-alpha.1" : 'beta';
20
20
  var BASIS_CDN_ENCODER_WASM = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION, "/dist/libs/basis_encoder.wasm");
21
21
  var BASIS_CDN_ENCODER_JS = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION, "/dist/libs/basis_encoder.js");
22
22
  var loadBasisTranscoderPromise;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/basis-module-loader.ts"],"names":["VERSION","BASIS_CDN_ENCODER_WASM","BASIS_CDN_ENCODER_JS","loadBasisTranscoderPromise","loadBasisTrascoderModule","options","modules","basis","loadBasisTrascoder","BASIS","wasmBinary","Promise","all","globalThis","initializeBasisTrascoderModule","BasisModule","resolve","then","module","BasisFile","initializeBasis","loadBasisEncoderPromise","loadBasisEncoderModule","basisEncoder","loadBasisEncoder","BASIS_ENCODER","initializeBasisEncoderModule","BasisEncoderModule","KTX2File","BasisEncoder"],"mappings":"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","sourcesContent":["// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n// @ts-nocheck\nimport {loadLibrary} from '@loaders.gl/worker-utils';\n\nconst BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION}/dist/libs/basis_encoder.wasm`;\nconst BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION}/dist/libs/basis_encoder.js`;\n\nlet loadBasisTranscoderPromise;\n\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nexport async function loadBasisTrascoderModule(options) {\n const modules = options.modules || {};\n if (modules.basis) {\n return modules.basis;\n }\n\n loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTrascoder(options);\n return await loadBasisTranscoderPromise;\n}\n\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nasync function loadBasisTrascoder(options) {\n let BASIS = null;\n let wasmBinary = null;\n\n [BASIS, wasmBinary] = await Promise.all([\n await loadLibrary('basis_transcoder.js', 'textures', options),\n await loadLibrary('basis_transcoder.wasm', 'textures', options)\n ]);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS = BASIS || globalThis.BASIS;\n return await initializeBasisTrascoderModule(BASIS, wasmBinary);\n}\n\n/**\n * Initialize wasm transcoder module\n * @param BasisModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile} promise\n */\nfunction initializeBasisTrascoderModule(BasisModule, wasmBinary) {\n const options: {wasmBinary?} = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisModule(options).then((module) => {\n const {BasisFile, initializeBasis} = module;\n initializeBasis();\n resolve({BasisFile});\n });\n });\n}\n\nlet loadBasisEncoderPromise;\n\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nexport async function loadBasisEncoderModule(options) {\n const modules = options.modules || {};\n if (modules.basisEncoder) {\n return modules.basisEncoder;\n }\n\n loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);\n return await loadBasisEncoderPromise;\n}\n\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nasync function loadBasisEncoder(options) {\n let BASIS_ENCODER = null;\n let wasmBinary = null;\n\n [BASIS_ENCODER, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_CDN_ENCODER_JS, 'textures', options),\n await loadLibrary(BASIS_CDN_ENCODER_WASM, 'textures', options)\n ]);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;\n return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);\n}\n\n/**\n * Initialize wasm transcoder module\n * @param BasisEncoderModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile, KTX2File} promise\n */\nfunction initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {\n const options: {wasmBinary?} = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisEncoderModule(options).then((module) => {\n const {BasisFile, KTX2File, initializeBasis, BasisEncoder} = module;\n initializeBasis();\n resolve({BasisFile, KTX2File, BasisEncoder});\n });\n });\n}\n"],"file":"basis-module-loader.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/basis-module-loader.ts"],"names":["VERSION","BASIS_CDN_ENCODER_WASM","BASIS_CDN_ENCODER_JS","loadBasisTranscoderPromise","loadBasisTrascoderModule","options","modules","basis","loadBasisTrascoder","BASIS","wasmBinary","Promise","all","globalThis","initializeBasisTrascoderModule","BasisModule","resolve","then","module","BasisFile","initializeBasis","loadBasisEncoderPromise","loadBasisEncoderModule","basisEncoder","loadBasisEncoder","BASIS_ENCODER","initializeBasisEncoderModule","BasisEncoderModule","KTX2File","BasisEncoder"],"mappings":"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","sourcesContent":["// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';\n\n// @ts-nocheck\nimport {loadLibrary} from '@loaders.gl/worker-utils';\n\nconst BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION}/dist/libs/basis_encoder.wasm`;\nconst BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION}/dist/libs/basis_encoder.js`;\n\nlet loadBasisTranscoderPromise;\n\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nexport async function loadBasisTrascoderModule(options) {\n const modules = options.modules || {};\n if (modules.basis) {\n return modules.basis;\n }\n\n loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTrascoder(options);\n return await loadBasisTranscoderPromise;\n}\n\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nasync function loadBasisTrascoder(options) {\n let BASIS = null;\n let wasmBinary = null;\n\n [BASIS, wasmBinary] = await Promise.all([\n await loadLibrary('basis_transcoder.js', 'textures', options),\n await loadLibrary('basis_transcoder.wasm', 'textures', options)\n ]);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS = BASIS || globalThis.BASIS;\n return await initializeBasisTrascoderModule(BASIS, wasmBinary);\n}\n\n/**\n * Initialize wasm transcoder module\n * @param BasisModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile} promise\n */\nfunction initializeBasisTrascoderModule(BasisModule, wasmBinary) {\n const options: {wasmBinary?} = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisModule(options).then((module) => {\n const {BasisFile, initializeBasis} = module;\n initializeBasis();\n resolve({BasisFile});\n });\n });\n}\n\nlet loadBasisEncoderPromise;\n\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nexport async function loadBasisEncoderModule(options) {\n const modules = options.modules || {};\n if (modules.basisEncoder) {\n return modules.basisEncoder;\n }\n\n loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);\n return await loadBasisEncoderPromise;\n}\n\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nasync function loadBasisEncoder(options) {\n let BASIS_ENCODER = null;\n let wasmBinary = null;\n\n [BASIS_ENCODER, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_CDN_ENCODER_JS, 'textures', options),\n await loadLibrary(BASIS_CDN_ENCODER_WASM, 'textures', options)\n ]);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;\n return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);\n}\n\n/**\n * Initialize wasm transcoder module\n * @param BasisEncoderModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile, KTX2File} promise\n */\nfunction initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {\n const options: {wasmBinary?} = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisEncoderModule(options).then((module) => {\n const {BasisFile, KTX2File, initializeBasis, BasisEncoder} = module;\n initializeBasis();\n resolve({BasisFile, KTX2File, BasisEncoder});\n });\n });\n}\n"],"file":"basis-module-loader.js"}
@@ -182,7 +182,7 @@ function parseBasisFile(BasisFile, data, options) {
182
182
 
183
183
  try {
184
184
  if (!basisFile.startTranscoding()) {
185
- return null;
185
+ throw new Error('Failed to start basis transcoding');
186
186
  }
187
187
 
188
188
  var imageCount = basisFile.getNumImages();
@@ -220,7 +220,7 @@ function transcodeImage(basisFile, imageIndex, levelIndex, options) {
220
220
  var decodedData = new Uint8Array(decodedSize);
221
221
 
222
222
  if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
223
- return null;
223
+ throw new Error('failed to start Basis transcoding');
224
224
  }
225
225
 
226
226
  return {
@@ -228,8 +228,8 @@ function transcodeImage(basisFile, imageIndex, levelIndex, options) {
228
228
  height: height,
229
229
  data: decodedData,
230
230
  compressed: compressed,
231
- hasAlpha: hasAlpha,
232
- format: format
231
+ format: format,
232
+ hasAlpha: hasAlpha
233
233
  };
234
234
  }
235
235
 
@@ -238,7 +238,7 @@ function parseKTX2File(KTX2File, data, options) {
238
238
 
239
239
  try {
240
240
  if (!ktx2File.startTranscoding()) {
241
- return null;
241
+ throw new Error('failed to start KTX2 transcoding');
242
242
  }
243
243
 
244
244
  var levelsCount = ktx2File.getLevels();
@@ -249,7 +249,7 @@ function parseKTX2File(KTX2File, data, options) {
249
249
  break;
250
250
  }
251
251
 
252
- return levels;
252
+ return [levels];
253
253
  } finally {
254
254
  ktx2File.close();
255
255
  ktx2File.delete();
@@ -271,7 +271,7 @@ function transcodeKTX2Image(ktx2File, levelIndex, options) {
271
271
  var decodedData = new Uint8Array(decodedSize);
272
272
 
273
273
  if (!ktx2File.transcodeImage(decodedData, levelIndex, 0, 0, basisFormat, 0, -1, -1)) {
274
- return null;
274
+ throw new Error('Failed to transcode KTX2 image');
275
275
  }
276
276
 
277
277
  return {
@@ -279,7 +279,7 @@ function transcodeKTX2Image(ktx2File, levelIndex, options) {
279
279
  height: height,
280
280
  data: decodedData,
281
281
  compressed: compressed,
282
- alphaFlag: alphaFlag,
282
+ hasAlpha: alphaFlag,
283
283
  format: format
284
284
  };
285
285
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-basis.ts"],"names":["OutputFormat","etc1","basisFormat","compressed","format","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","fileConstructors","parseKTX2File","KTX2File","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","getImageLevelInfo","alphaFlag","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","has"],"mappings":"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","sourcesContent":["import {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nconst OutputFormat = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param {ArrayBuffer} data\n * @param {*} options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data, options) {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param {*} BasisFile - initialized transcoder module\n * @param {*} data\n * @param {*} options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options) {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n return null;\n }\n\n const imageCount = basisFile.getNumImages();\n const images: any[] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: any[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param {*} basisFile\n * @param {*} imageIndex\n * @param {*} levelIndex\n * @param {*} options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options) {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n return null;\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha,\n format\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param {*} KTX2File\n * @param {*} data\n * @param {*} options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data, options) {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n return null;\n }\n const levelsCount = ktx2File.getLevels();\n const levels: any[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return levels;\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param {*} ktx2File\n * @param {*} levelIndex\n * @param {*} options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex, options) {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n return null;\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param {*} options\n * @param {*} hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha) {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat() {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"file":"parse-basis.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-basis.ts"],"names":["OutputFormat","etc1","basisFormat","compressed","format","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","fileConstructors","parseKTX2File","KTX2File","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","getImageLevelInfo","alphaFlag","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","has"],"mappings":"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","sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"file":"parse-basis.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-compressed-texture.ts"],"names":["parseCompressedTexture","data","Error"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AAOO,SAASA,sBAAT,CAAgCC,IAAhC,EAAmE;AACxE,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AAGf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AACf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AACf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,QAAM,IAAIC,KAAJ,CAAU,yCAAV,CAAN;AACD","sourcesContent":["import type {TextureLevel} from '../../types';\nimport {isKTX, parseKTX} from './parse-ktx';\nimport {isDDS, parseDDS} from './parse-dds';\nimport {isPVR, parsePVR} from './parse-pvr';\n\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data: ArrayBuffer): TextureLevel[] {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n"],"file":"parse-compressed-texture.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-compressed-texture.ts"],"names":["parseCompressedTexture","data","Error"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AAOO,SAASA,sBAAT,CAAgCC,IAAhC,EAAmE;AACxE,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AAGf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AACf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AACf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,QAAM,IAAIC,KAAJ,CAAU,yCAAV,CAAN;AACD","sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {isKTX, parseKTX} from './parse-ktx';\nimport {isDDS, parseDDS} from './parse-dds';\nimport {isPVR, parsePVR} from './parse-pvr';\n\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data: ArrayBuffer): TextureLevel[] {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n"],"file":"parse-compressed-texture.js"}
@@ -11,6 +11,8 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
11
11
 
12
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
13
 
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
14
16
  var _crunchModuleLoader = require("./crunch-module-loader");
15
17
 
16
18
  var _glExtensions = require("../gl-extensions");
@@ -21,25 +23,24 @@ var _parseDds = require("./parse-dds");
21
23
 
22
24
  var _extractMipmapImages = require("../utils/extract-mipmap-images");
23
25
 
26
+ var _DXT_FORMAT_MAP;
27
+
24
28
  var CRN_FORMAT = {
25
29
  cCRNFmtInvalid: -1,
26
30
  cCRNFmtDXT1: 0,
27
31
  cCRNFmtDXT3: 1,
28
32
  cCRNFmtDXT5: 2
29
33
  };
30
- var DXT_FORMAT_MAP = {};
31
- DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT1] = {
34
+ var DXT_FORMAT_MAP = (_DXT_FORMAT_MAP = {}, (0, _defineProperty2.default)(_DXT_FORMAT_MAP, CRN_FORMAT.cCRNFmtDXT1, {
32
35
  pixelFormat: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
33
36
  sizeFunction: _parseDds.getDxt1LevelSize
34
- };
35
- DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT3] = {
37
+ }), (0, _defineProperty2.default)(_DXT_FORMAT_MAP, CRN_FORMAT.cCRNFmtDXT3, {
36
38
  pixelFormat: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
37
39
  sizeFunction: _parseDds.getDxtXLevelSize
38
- };
39
- DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5] = {
40
+ }), (0, _defineProperty2.default)(_DXT_FORMAT_MAP, CRN_FORMAT.cCRNFmtDXT5, {
40
41
  pixelFormat: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
41
42
  sizeFunction: _parseDds.getDxtXLevelSize
42
- };
43
+ }), _DXT_FORMAT_MAP);
43
44
  var cachedDstSize = 0;
44
45
  var dst;
45
46
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-crunch.ts"],"names":["CRN_FORMAT","cCRNFmtInvalid","cCRNFmtDXT1","cCRNFmtDXT3","cCRNFmtDXT5","DXT_FORMAT_MAP","pixelFormat","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","sizeFunction","getDxt1LevelSize","COMPRESSED_RGBA_S3TC_DXT3_EXT","getDxtXLevelSize","COMPRESSED_RGBA_S3TC_DXT5_EXT","cachedDstSize","dst","parseCrunch","data","options","crunchModule","srcSize","byteLength","bytes","Uint8Array","src","_malloc","arrayBufferCopy","HEAPU8","format","_crn_get_dxt_format","Boolean","mipMapLevels","_crn_get_levels","width","_crn_get_width","height","_crn_get_height","dstSize","i","_free","_crn_decompress","image","buffer","slice","internalFormat","srcData","dstData","dstByteOffset","numBytes","dst32Offset","tail","src32","Uint32Array","dst32","length"],"mappings":"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","sourcesContent":["import type {TextureLevel} from '../../types';\nimport {loadCrunchModule} from './crunch-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {getDxt1LevelSize, getDxtXLevelSize} from './parse-dds';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\n// Taken from crnlib.h\nconst CRN_FORMAT = {\n cCRNFmtInvalid: -1,\n\n cCRNFmtDXT1: 0,\n // cCRNFmtDXT3 is not currently supported when writing to CRN - only DDS.\n cCRNFmtDXT3: 1,\n cCRNFmtDXT5: 2\n\n // Crunch supports more formats than this.\n};\n\n// Mapping of Crunch formats to DXT formats.\nconst DXT_FORMAT_MAP = {};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT1] = {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n sizeFunction: getDxt1LevelSize\n};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT3] = {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n sizeFunction: getDxtXLevelSize\n};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5] = {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n sizeFunction: getDxtXLevelSize\n};\n\nlet cachedDstSize = 0;\nlet dst: number;\n\n/**\n * Parse texture data as \"CRN\" format.\n * Function is \"async\" as emscriptified decoder module is loaded asyncronously\n * @param data - binary data of compressed texture\n * @returns Promise of Array of the texture levels\n */\nexport async function parseCrunch(data, options: any): Promise<TextureLevel[]> {\n const crunchModule = await loadCrunchModule(options);\n\n // Copy the contents of the arrayBuffer into emscriptens heap.\n const srcSize = data.byteLength;\n const bytes = new Uint8Array(data);\n const src = crunchModule._malloc(srcSize);\n arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);\n\n // Determine what type of compressed data the file contains.\n const format = crunchModule._crn_get_dxt_format(src, srcSize);\n assert(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');\n\n // Gather basic metrics about the DXT data.\n const mipMapLevels = crunchModule._crn_get_levels(src, srcSize);\n const width = crunchModule._crn_get_width(src, srcSize);\n const height = crunchModule._crn_get_height(src, srcSize);\n // const bytesPerBlock = crunchModule._crn_get_bytes_per_block(src, srcSize);\n\n // Determine the size of the decoded DXT data.\n const sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;\n let dstSize = 0;\n for (let i = 0; i < mipMapLevels; ++i) {\n dstSize += sizeFunction(width >> i, height >> i);\n }\n\n // Allocate enough space on the emscripten heap to hold the decoded DXT data\n // or reuse the existing allocation if a previous call to this function has\n // already acquired a large enough buffer.\n if (cachedDstSize < dstSize) {\n if (dst) {\n crunchModule._free(dst);\n }\n dst = crunchModule._malloc(dstSize);\n cachedDstSize = dstSize;\n }\n\n // Decompress the DXT data from the Crunch file into the allocated space.\n crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);\n\n // Release the crunch file data from the emscripten heap.\n crunchModule._free(src);\n\n const image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat: DXT_FORMAT_MAP[format].pixelFormat\n });\n}\n\n/**\n * Copy an array of bytes into or out of the emscripten heap\n * @param {Uint8Array} srcData - Source data array\n * @param {Uint8Array} dstData - Destination data array\n * @param {number} dstByteOffset - Destination data offset\n * @param {number} numBytes - number of bytes to copy\n * @returns {void}\n */\nfunction arrayBufferCopy(srcData, dstData, dstByteOffset, numBytes) {\n let i;\n const dst32Offset = dstByteOffset / 4;\n const tail = numBytes % 4;\n const src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);\n const dst32 = new Uint32Array(dstData.buffer);\n for (i = 0; i < src32.length; i++) {\n dst32[dst32Offset + i] = src32[i];\n }\n for (i = numBytes - tail; i < numBytes; i++) {\n dstData[dstByteOffset + i] = srcData[i];\n }\n}\n"],"file":"parse-crunch.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-crunch.ts"],"names":["CRN_FORMAT","cCRNFmtInvalid","cCRNFmtDXT1","cCRNFmtDXT3","cCRNFmtDXT5","DXT_FORMAT_MAP","pixelFormat","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","sizeFunction","getDxt1LevelSize","COMPRESSED_RGBA_S3TC_DXT3_EXT","getDxtXLevelSize","COMPRESSED_RGBA_S3TC_DXT5_EXT","cachedDstSize","dst","parseCrunch","data","options","crunchModule","srcSize","byteLength","bytes","Uint8Array","src","_malloc","arrayBufferCopy","HEAPU8","format","_crn_get_dxt_format","Boolean","mipMapLevels","_crn_get_levels","width","_crn_get_width","height","_crn_get_height","dstSize","i","_free","_crn_decompress","image","buffer","slice","internalFormat","srcData","dstData","dstByteOffset","numBytes","dst32Offset","tail","src32","Uint32Array","dst32","length"],"mappings":"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","sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {loadCrunchModule} from './crunch-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {getDxt1LevelSize, getDxtXLevelSize} from './parse-dds';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\n// Taken from crnlib.h\nconst CRN_FORMAT = {\n cCRNFmtInvalid: -1,\n\n cCRNFmtDXT1: 0,\n // cCRNFmtDXT3 is not currently supported when writing to CRN - only DDS.\n cCRNFmtDXT3: 1,\n cCRNFmtDXT5: 2\n\n // Crunch supports more formats than this.\n};\n\n/** Mapping of Crunch formats to DXT formats. */\nconst DXT_FORMAT_MAP = {\n [CRN_FORMAT.cCRNFmtDXT1]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n sizeFunction: getDxt1LevelSize\n },\n [CRN_FORMAT.cCRNFmtDXT3]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n sizeFunction: getDxtXLevelSize\n },\n [CRN_FORMAT.cCRNFmtDXT5]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n sizeFunction: getDxtXLevelSize\n }\n};\n\nlet cachedDstSize = 0;\nlet dst: number;\n\n/**\n * Parse texture data as \"CRN\" format.\n * Function is \"async\" as emscriptified decoder module is loaded asyncronously\n * @param data - binary data of compressed texture\n * @returns Promise of Array of the texture levels\n */\nexport async function parseCrunch(data, options: any): Promise<TextureLevel[]> {\n const crunchModule = await loadCrunchModule(options);\n\n // Copy the contents of the arrayBuffer into emscriptens heap.\n const srcSize = data.byteLength;\n const bytes = new Uint8Array(data);\n const src = crunchModule._malloc(srcSize);\n arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);\n\n // Determine what type of compressed data the file contains.\n const format = crunchModule._crn_get_dxt_format(src, srcSize);\n assert(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');\n\n // Gather basic metrics about the DXT data.\n const mipMapLevels = crunchModule._crn_get_levels(src, srcSize);\n const width = crunchModule._crn_get_width(src, srcSize);\n const height = crunchModule._crn_get_height(src, srcSize);\n // const bytesPerBlock = crunchModule._crn_get_bytes_per_block(src, srcSize);\n\n // Determine the size of the decoded DXT data.\n const sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;\n let dstSize = 0;\n for (let i = 0; i < mipMapLevels; ++i) {\n dstSize += sizeFunction(width >> i, height >> i);\n }\n\n // Allocate enough space on the emscripten heap to hold the decoded DXT data\n // or reuse the existing allocation if a previous call to this function has\n // already acquired a large enough buffer.\n if (cachedDstSize < dstSize) {\n if (dst) {\n crunchModule._free(dst);\n }\n dst = crunchModule._malloc(dstSize);\n cachedDstSize = dstSize;\n }\n\n // Decompress the DXT data from the Crunch file into the allocated space.\n crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);\n\n // Release the crunch file data from the emscripten heap.\n crunchModule._free(src);\n\n const image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat: DXT_FORMAT_MAP[format].pixelFormat\n });\n}\n\n/**\n * Copy an array of bytes into or out of the emscripten heap\n * @param {Uint8Array} srcData - Source data array\n * @param {Uint8Array} dstData - Destination data array\n * @param {number} dstByteOffset - Destination data offset\n * @param {number} numBytes - number of bytes to copy\n * @returns {void}\n */\nfunction arrayBufferCopy(srcData, dstData, dstByteOffset, numBytes) {\n let i;\n const dst32Offset = dstByteOffset / 4;\n const tail = numBytes % 4;\n const src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);\n const dst32 = new Uint32Array(dstData.buffer);\n for (i = 0; i < src32.length; i++) {\n dst32[dst32Offset + i] = src32[i];\n }\n for (i = numBytes - tail; i < numBytes; i++) {\n dstData[dstByteOffset + i] = srcData[i];\n }\n}\n"],"file":"parse-crunch.js"}
@@ -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_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":";;;;;;;;;;AACA;;AACA;;AACA;;AAEA,IAAMA,aAAa,GAAG;AACpBC,EAAAA,YAAY,EAAE,UADM;AAEpBC,EAAAA,aAAa,EAAE,EAFK;AAGpBC,EAAAA,kBAAkB,EAAE,CAHA;AAIpBC,EAAAA,iBAAiB,EAAE,CAJC;AAKpBC,EAAAA,kBAAkB,EAAE,CALA;AAMpBC,EAAAA,mBAAmB,EAAE,CAND;AAOpBC,EAAAA,kBAAkB,EAAE,CAPA;AAQpBC,EAAAA,iBAAiB,EAAE,CARC;AASpBC,EAAAA,qBAAqB,EAAE,EATH;AAUpBC,EAAAA,sBAAsB,EAAE,EAVJ;AAWpBC,EAAAA,gBAAgB,EAAE,OAXE;AAYpBC,EAAAA,WAAW,EAAE;AAZO,CAAtB;AAeA,IAAMC,iBAAyC,GAAG;AAChDC,EAAAA,IAAI,EAAEC,sCAAwBC,4BADkB;AAEhDC,EAAAA,IAAI,EAAEF,sCAAwBG,6BAFkB;AAGhDC,EAAAA,IAAI,EAAEJ,sCAAwBK,6BAHkB;AAIhD,UAAQL,sCAAwBM,wBAJgB;AAKhDC,EAAAA,IAAI,EAAEP,sCAAwBQ,wCALkB;AAMhDC,EAAAA,IAAI,EAAET,sCAAwBU;AANkB,CAAlD;AASA,IAAMC,eAAe,GAAGC,gBAAxB;AACA,IAAMC,gBAAgB,GAAGC,gBAAzB;AACA,IAAMC,gBAAgB,GAAGD,gBAAzB;AAEA,IAAME,kBAA6E,GAAG;AACpFjB,EAAAA,IAAI,EAAEa,gBAD8E;AAEpFV,EAAAA,IAAI,EAAEY,gBAF8E;AAGpFV,EAAAA,IAAI,EAAEU,gBAH8E;AAIpF,UAAQH,eAJ4E;AAKpFJ,EAAAA,IAAI,EAAEM,gBAL8E;AAMpFJ,EAAAA,IAAI,EAAEM;AAN8E,CAAtF;;AAcO,SAASE,KAAT,CAAeC,IAAf,EAA2C;AAChD,MAAMC,MAAM,GAAG,IAAIC,WAAJ,CAAgBF,IAAhB,EAAsB,CAAtB,EAAyBjC,aAAa,CAACE,aAAvC,CAAf;AACA,MAAMkC,KAAK,GAAGF,MAAM,CAAClC,aAAa,CAACG,kBAAf,CAApB;AACA,SAAOiC,KAAK,KAAKpC,aAAa,CAACC,YAA/B;AACD;;AAOM,SAASoC,QAAT,CAAkBJ,IAAlB,EAAqD;AAC1D,MAAMC,MAAM,GAAG,IAAII,UAAJ,CAAeL,IAAf,EAAqB,CAArB,EAAwBjC,aAAa,CAACE,aAAtC,CAAf;AACA,MAAMqC,iBAAiB,GAAGL,MAAM,CAAClC,aAAa,CAACU,sBAAf,CAAhC;AACA,2BACE8B,OAAO,CAACN,MAAM,CAAClC,aAAa,CAACS,qBAAf,CAAN,GAA8CT,aAAa,CAACY,WAA7D,CADT,EAEE,qDAFF;AAIA,MAAM6B,MAAM,GAAGC,aAAa,CAACH,iBAAD,CAA5B;AACA,MAAMI,cAAc,GAAG9B,iBAAiB,CAAC4B,MAAD,CAAxC;AACA,MAAMG,YAAY,GAAGb,kBAAkB,CAACU,MAAD,CAAvC;AACA,2BAAOE,cAAc,IAAIC,YAAzB,sCAAoEL,iBAApE;AAEA,MAAIM,YAAY,GAAG,CAAnB;;AACA,MAAIX,MAAM,CAAClC,aAAa,CAACK,kBAAf,CAAN,GAA2CL,aAAa,CAACW,gBAA7D,EAA+E;AAC7EkC,IAAAA,YAAY,GAAGC,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYb,MAAM,CAAClC,aAAa,CAACQ,iBAAf,CAAlB,CAAf;AACD;;AACD,MAAMwC,KAAK,GAAGd,MAAM,CAAClC,aAAa,CAACO,kBAAf,CAApB;AACA,MAAM0C,MAAM,GAAGf,MAAM,CAAClC,aAAa,CAACM,mBAAf,CAArB;AACA,MAAM4C,UAAU,GAAGhB,MAAM,CAAClC,aAAa,CAACI,iBAAf,CAAN,GAA0C,CAA7D;AACA,MAAM+C,KAAK,GAAG,IAAIC,UAAJ,CAAenB,IAAf,EAAqBiB,UAArB,CAAd;AAEA,SAAO,8CAAoBC,KAApB,EAA2B;AAChCN,IAAAA,YAAY,EAAZA,YADgC;AAEhCG,IAAAA,KAAK,EAALA,KAFgC;AAGhCC,IAAAA,MAAM,EAANA,MAHgC;AAIhCL,IAAAA,YAAY,EAAZA,YAJgC;AAKhCD,IAAAA,cAAc,EAAdA;AALgC,GAA3B,CAAP;AAOD;;AAQM,SAAShB,gBAAT,CAA0BqB,KAA1B,EAAyCC,MAAzC,EAAiE;AACtE,SAAO,CAAED,KAAK,GAAG,CAAT,IAAe,CAAhB,KAAuBC,MAAM,GAAG,CAAV,IAAgB,CAAtC,IAA2C,CAAlD;AACD;;AAQM,SAASpB,gBAAT,CAA0BmB,KAA1B,EAAyCC,MAAzC,EAAiE;AACtE,SAAO,CAAED,KAAK,GAAG,CAAT,IAAe,CAAhB,KAAuBC,MAAM,GAAG,CAAV,IAAgB,CAAtC,IAA2C,EAAlD;AACD;;AAOD,SAASP,aAAT,CAAuBW,KAAvB,EAA8C;AAC5C,SAAOC,MAAM,CAACC,YAAP,CACLF,KAAK,GAAG,IADH,EAEJA,KAAK,IAAI,CAAV,GAAe,IAFV,EAGJA,KAAK,IAAI,EAAV,GAAgB,IAHX,EAIJA,KAAK,IAAI,EAAV,GAAgB,IAJX,CAAP;AAMD","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"}
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 '@loaders.gl/schema';\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"}
@@ -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,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"}
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":";;;;;;;;AACA;;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,EAA4D;AACjE,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 type {TextureLevel} from '@loaders.gl/schema';\nimport {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): TextureLevel[] {\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 +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","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"}
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":["// import type {TextureLevel} from '@loaders.gl/schema';\n\ntype 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 +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_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"}
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":["/* 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)\n\nimport type {TextureLevel} from '@loaders.gl/schema';\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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/extract-mipmap-images.ts"],"names":["extractMipmapImages","data","options","images","Array","mipMapLevels","levelWidth","width","levelHeight","height","offset","i","levelSize","getLevelSize","levelData","getLevelData","compressed","format","internalFormat","Math","max","index","isArray","Uint8Array","buffer","byteOffset","sizeFunction"],"mappings":";;;;;;;AAYO,SAASA,mBAAT,CACLC,IADK,EAELC,OAFK,EAGW;AAChB,MAAMC,MAAM,GAAG,IAAIC,KAAJ,CAAUF,OAAO,CAACG,YAAlB,CAAf;AAEA,MAAIC,UAAU,GAAGJ,OAAO,CAACK,KAAzB;AACA,MAAIC,WAAW,GAAGN,OAAO,CAACO,MAA1B;AACA,MAAIC,MAAM,GAAG,CAAb;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGT,OAAO,CAACG,YAA5B,EAA0C,EAAEM,CAA5C,EAA+C;AAE7C,QAAMC,SAAS,GAAGC,YAAY,CAACX,OAAD,EAAUI,UAAV,EAAsBE,WAAtB,EAAmCP,IAAnC,EAAyCU,CAAzC,CAA9B;AAEA,QAAMG,SAAS,GAAGC,YAAY,CAACd,IAAD,EAAOU,CAAP,EAAUD,MAAV,EAAkBE,SAAlB,CAA9B;AAEAT,IAAAA,MAAM,CAACQ,CAAD,CAAN,GAAY;AACVK,MAAAA,UAAU,EAAE,IADF;AAEVC,MAAAA,MAAM,EAAEf,OAAO,CAACgB,cAFN;AAGVjB,MAAAA,IAAI,EAAEa,SAHI;AAIVP,MAAAA,KAAK,EAAED,UAJG;AAKVG,MAAAA,MAAM,EAAED,WALE;AAMVI,MAAAA,SAAS,EAATA;AANU,KAAZ;AASAN,IAAAA,UAAU,GAAGa,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYd,UAAU,IAAI,CAA1B,CAAb;AACAE,IAAAA,WAAW,GAAGW,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYZ,WAAW,IAAI,CAA3B,CAAd;AAEAE,IAAAA,MAAM,IAAIE,SAAV;AACD;;AACD,SAAOT,MAAP;AACD;;AAED,SAASY,YAAT,CACEd,IADF,EAEEoB,KAFF,EAGEX,MAHF,EAIEE,SAJF,EAKc;AACZ,MAAI,CAACR,KAAK,CAACkB,OAAN,CAAcrB,IAAd,CAAL,EAA0B;AACxB,WAAO,IAAIsB,UAAJ,CAAetB,IAAI,CAACuB,MAApB,EAA4BvB,IAAI,CAACwB,UAAL,GAAkBf,MAA9C,EAAsDE,SAAtD,CAAP;AACD;;AAED,SAAOX,IAAI,CAACoB,KAAD,CAAJ,CAAYP,SAAnB;AACD;;AAED,SAASD,YAAT,CACEX,OADF,EAEEI,UAFF,EAGEE,WAHF,EAIEP,IAJF,EAKEoB,KALF,EAMU;AACR,MAAI,CAACjB,KAAK,CAACkB,OAAN,CAAcrB,IAAd,CAAL,EAA0B;AACxB,WAAOC,OAAO,CAACwB,YAAR,CAAqBpB,UAArB,EAAiCE,WAAjC,CAAP;AACD;;AACD,SAAON,OAAO,CAACwB,YAAR,CAAqBzB,IAAI,CAACoB,KAAD,CAAzB,CAAP;AACD","sourcesContent":["import {CompressedTextureExtractOptions, TextureLevel} from '../../types';\n\n/**\n * Extract mipmap images from compressed texture buffer\n * @param data - binary data of compressed texture or Array of level objects\n * @param options.mipMapLevels - number of mipmap level inside image\n * @param options.width - width of 0 - level\n * @param options.height - height of 0 - level\n * @param options.sizeFunction - format-related function to calculate level size in bytes\n * @param options.internalFormat - WebGL compatible format code\n * @returns Array of the texture levels\n */\nexport function extractMipmapImages(\n data: Uint8Array | object[],\n options: CompressedTextureExtractOptions\n): TextureLevel[] {\n const images = new Array(options.mipMapLevels);\n\n let levelWidth = options.width;\n let levelHeight = options.height;\n let offset = 0;\n\n for (let i = 0; i < options.mipMapLevels; ++i) {\n // @ts-expect-error\n const levelSize = getLevelSize(options, levelWidth, levelHeight, data, i);\n // @ts-expect-error\n const levelData = getLevelData(data, i, offset, levelSize);\n\n images[i] = {\n compressed: true,\n format: options.internalFormat,\n data: levelData,\n width: levelWidth,\n height: levelHeight,\n levelSize\n };\n\n levelWidth = Math.max(1, levelWidth >> 1);\n levelHeight = Math.max(1, levelHeight >> 1);\n\n offset += levelSize;\n }\n return images;\n}\n\nfunction getLevelData(\n data: Uint8Array,\n index: number,\n offset: number,\n levelSize: number\n): Uint8Array {\n if (!Array.isArray(data)) {\n return new Uint8Array(data.buffer, data.byteOffset + offset, levelSize);\n }\n\n return data[index].levelData;\n}\n\nfunction getLevelSize(\n options: CompressedTextureExtractOptions,\n levelWidth: number,\n levelHeight: number,\n data: Uint8Array[] | object[],\n index: number\n): number {\n if (!Array.isArray(data)) {\n return options.sizeFunction(levelWidth, levelHeight);\n }\n return options.sizeFunction(data[index]);\n}\n"],"file":"extract-mipmap-images.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/extract-mipmap-images.ts"],"names":["extractMipmapImages","data","options","images","Array","mipMapLevels","levelWidth","width","levelHeight","height","offset","i","levelSize","getLevelSize","levelData","getLevelData","compressed","format","internalFormat","Math","max","index","isArray","Uint8Array","buffer","byteOffset","sizeFunction"],"mappings":";;;;;;;AAoBO,SAASA,mBAAT,CACLC,IADK,EAELC,OAFK,EAGW;AAChB,MAAMC,MAAM,GAAG,IAAIC,KAAJ,CAAUF,OAAO,CAACG,YAAlB,CAAf;AAEA,MAAIC,UAAU,GAAGJ,OAAO,CAACK,KAAzB;AACA,MAAIC,WAAW,GAAGN,OAAO,CAACO,MAA1B;AACA,MAAIC,MAAM,GAAG,CAAb;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGT,OAAO,CAACG,YAA5B,EAA0C,EAAEM,CAA5C,EAA+C;AAE7C,QAAMC,SAAS,GAAGC,YAAY,CAACX,OAAD,EAAUI,UAAV,EAAsBE,WAAtB,EAAmCP,IAAnC,EAAyCU,CAAzC,CAA9B;AAEA,QAAMG,SAAS,GAAGC,YAAY,CAACd,IAAD,EAAOU,CAAP,EAAUD,MAAV,EAAkBE,SAAlB,CAA9B;AAEAT,IAAAA,MAAM,CAACQ,CAAD,CAAN,GAAY;AACVK,MAAAA,UAAU,EAAE,IADF;AAEVC,MAAAA,MAAM,EAAEf,OAAO,CAACgB,cAFN;AAGVjB,MAAAA,IAAI,EAAEa,SAHI;AAIVP,MAAAA,KAAK,EAAED,UAJG;AAKVG,MAAAA,MAAM,EAAED,WALE;AAMVI,MAAAA,SAAS,EAATA;AANU,KAAZ;AASAN,IAAAA,UAAU,GAAGa,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYd,UAAU,IAAI,CAA1B,CAAb;AACAE,IAAAA,WAAW,GAAGW,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYZ,WAAW,IAAI,CAA3B,CAAd;AAEAE,IAAAA,MAAM,IAAIE,SAAV;AACD;;AACD,SAAOT,MAAP;AACD;;AAED,SAASY,YAAT,CACEd,IADF,EAEEoB,KAFF,EAGEX,MAHF,EAIEE,SAJF,EAKc;AACZ,MAAI,CAACR,KAAK,CAACkB,OAAN,CAAcrB,IAAd,CAAL,EAA0B;AACxB,WAAO,IAAIsB,UAAJ,CAAetB,IAAI,CAACuB,MAApB,EAA4BvB,IAAI,CAACwB,UAAL,GAAkBf,MAA9C,EAAsDE,SAAtD,CAAP;AACD;;AAED,SAAOX,IAAI,CAACoB,KAAD,CAAJ,CAAYP,SAAnB;AACD;;AAED,SAASD,YAAT,CACEX,OADF,EAEEI,UAFF,EAGEE,WAHF,EAIEP,IAJF,EAKEoB,KALF,EAMU;AACR,MAAI,CAACjB,KAAK,CAACkB,OAAN,CAAcrB,IAAd,CAAL,EAA0B;AACxB,WAAOC,OAAO,CAACwB,YAAR,CAAqBpB,UAArB,EAAiCE,WAAjC,CAAP;AACD;;AACD,SAAON,OAAO,CAACwB,YAAR,CAAqBzB,IAAI,CAACoB,KAAD,CAAzB,CAAP;AACD","sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\n\nexport type CompressedTextureExtractOptions = {\n mipMapLevels: number;\n width: number;\n height: number;\n sizeFunction: Function;\n internalFormat: number;\n};\n\n/**\n * Extract mipmap images from compressed texture buffer\n * @param data - binary data of compressed texture or Array of level objects\n * @param options.mipMapLevels - number of mipmap level inside image\n * @param options.width - width of 0 - level\n * @param options.height - height of 0 - level\n * @param options.sizeFunction - format-related function to calculate level size in bytes\n * @param options.internalFormat - WebGL compatible format code\n * @returns Array of the texture levels\n */\nexport function extractMipmapImages(\n data: Uint8Array | object[],\n options: CompressedTextureExtractOptions\n): TextureLevel[] {\n const images = new Array(options.mipMapLevels);\n\n let levelWidth = options.width;\n let levelHeight = options.height;\n let offset = 0;\n\n for (let i = 0; i < options.mipMapLevels; ++i) {\n // @ts-expect-error\n const levelSize = getLevelSize(options, levelWidth, levelHeight, data, i);\n // @ts-expect-error\n const levelData = getLevelData(data, i, offset, levelSize);\n\n images[i] = {\n compressed: true,\n format: options.internalFormat,\n data: levelData,\n width: levelWidth,\n height: levelHeight,\n levelSize\n };\n\n levelWidth = Math.max(1, levelWidth >> 1);\n levelHeight = Math.max(1, levelHeight >> 1);\n\n offset += levelSize;\n }\n return images;\n}\n\nfunction getLevelData(\n data: Uint8Array,\n index: number,\n offset: number,\n levelSize: number\n): Uint8Array {\n if (!Array.isArray(data)) {\n return new Uint8Array(data.buffer, data.byteOffset + offset, levelSize);\n }\n\n return data[index].levelData;\n}\n\nfunction getLevelSize(\n options: CompressedTextureExtractOptions,\n levelWidth: number,\n levelHeight: number,\n data: Uint8Array[] | object[],\n index: number\n): number {\n if (!Array.isArray(data)) {\n return options.sizeFunction(levelWidth, levelHeight);\n }\n return options.sizeFunction(data[index]);\n}\n"],"file":"extract-mipmap-images.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/texture-formats.ts"],"names":["BROWSER_PREFIXES","WEBGL_EXTENSIONS","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_pvrtc","WEBGL_compressed_texture_atc","WEBGL_compressed_texture_astc","EXT_texture_compression_rgtc","formats","getSupportedGPUTextureFormats","gl","getWebGLContext","undefined","Set","prefix","extension","getExtension","gpuTextureFormat","add","canvas","document","createElement","getContext","error"],"mappings":";;;;;;;;;;;;;AAEA,IAAMA,gBAAgB,GAAG,CAAC,EAAD,EAAK,SAAL,EAAgB,MAAhB,CAAzB;AAEA,IAAMC,gBAAmD,GAAG;AAE1DC,EAAAA,6BAA6B,EAAE,KAF2B;AAG1DC,EAAAA,kCAAkC,EAAE,UAHsB;AAI1DC,EAAAA,6BAA6B,EAAE,MAJ2B;AAK1DC,EAAAA,4BAA4B,EAAE,MAL4B;AAM1DC,EAAAA,8BAA8B,EAAE,OAN0B;AAO1DC,EAAAA,4BAA4B,EAAE,KAP4B;AAQ1DC,EAAAA,6BAA6B,EAAE,MAR2B;AAS1DC,EAAAA,4BAA4B,EAAE;AAT4B,CAA5D;AAaA,IAAIC,OAAqC,GAAG,IAA5C;;AAQO,SAASC,6BAAT,CAAuCC,EAAvC,EAAgF;AACrF,MAAI,CAACF,OAAL,EAAc;AACZE,IAAAA,EAAE,GAAGA,EAAE,IAAIC,eAAe,EAArB,IAA2BC,SAAhC;AAEAJ,IAAAA,OAAO,GAAG,IAAIK,GAAJ,EAAV;;AAHY,+CAKSf,gBALT;AAAA;;AAAA;AAKZ,0DAAuC;AAAA,YAA5BgB,MAA4B;;AACrC,aAAK,IAAMC,SAAX,IAAwBhB,gBAAxB,EAA0C;AACxC,cAAIW,EAAE,IAAIA,EAAE,CAACM,YAAH,WAAmBF,MAAnB,SAA4BC,SAA5B,EAAV,EAAoD;AAClD,gBAAME,gBAAgB,GAAGlB,gBAAgB,CAACgB,SAAD,CAAzC;AACAP,YAAAA,OAAO,CAACU,GAAR,CAAYD,gBAAZ;AACD;AACF;AACF;AAZW;AAAA;AAAA;AAAA;AAAA;AAab;;AAED,SAAOT,OAAP;AACD;;AAKD,SAASG,eAAT,GAA2B;AACzB,MAAI;AACF,QAAMQ,MAAM,GAAGC,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf;AACA,WAAOF,MAAM,CAACG,UAAP,CAAkB,OAAlB,CAAP;AACD,GAHD,CAGE,OAAOC,KAAP,EAAc;AACd,WAAO,IAAP;AACD;AACF","sourcesContent":["import type {GPUTextureFormat} from '../../types';\n\nconst BROWSER_PREFIXES = ['', 'WEBKIT_', 'MOZ_'];\n\nconst WEBGL_EXTENSIONS: {[key: string]: GPUTextureFormat} = {\n /* eslint-disable camelcase */\n WEBGL_compressed_texture_s3tc: 'dxt',\n WEBGL_compressed_texture_s3tc_srgb: 'dxt-srgb',\n WEBGL_compressed_texture_etc1: 'etc1',\n WEBGL_compressed_texture_etc: 'etc2',\n WEBGL_compressed_texture_pvrtc: 'pvrtc',\n WEBGL_compressed_texture_atc: 'atc',\n WEBGL_compressed_texture_astc: 'astc',\n EXT_texture_compression_rgtc: 'rgtc'\n /* eslint-enable camelcase */\n};\n\nlet formats: Set<GPUTextureFormat> | null = null;\n\n/**\n * Returns a list of formats.\n * Creates a temporary WebGLRenderingContext if none is provided.\n *\n * @param gl - Optional context.\n */\nexport function getSupportedGPUTextureFormats(gl?: WebGLRenderingContext): Set<string> {\n if (!formats) {\n gl = gl || getWebGLContext() || undefined;\n\n formats = new Set<GPUTextureFormat>();\n\n for (const prefix of BROWSER_PREFIXES) {\n for (const extension in WEBGL_EXTENSIONS) {\n if (gl && gl.getExtension(`${prefix}${extension}`)) {\n const gpuTextureFormat = WEBGL_EXTENSIONS[extension];\n formats.add(gpuTextureFormat);\n }\n }\n }\n }\n\n return formats;\n}\n\n/**\n * @returns {WebGLRenderingContext?}\n */\nfunction getWebGLContext() {\n try {\n const canvas = document.createElement('canvas');\n return canvas.getContext('webgl');\n } catch (error) {\n return null;\n }\n}\n"],"file":"texture-formats.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/texture-formats.ts"],"names":["BROWSER_PREFIXES","WEBGL_EXTENSIONS","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_pvrtc","WEBGL_compressed_texture_atc","WEBGL_compressed_texture_astc","EXT_texture_compression_rgtc","formats","getSupportedGPUTextureFormats","gl","getWebGLContext","undefined","Set","prefix","extension","getExtension","gpuTextureFormat","add","canvas","document","createElement","getContext","error"],"mappings":";;;;;;;;;;;;;AAEA,IAAMA,gBAAgB,GAAG,CAAC,EAAD,EAAK,SAAL,EAAgB,MAAhB,CAAzB;AAEA,IAAMC,gBAAmD,GAAG;AAE1DC,EAAAA,6BAA6B,EAAE,KAF2B;AAG1DC,EAAAA,kCAAkC,EAAE,UAHsB;AAI1DC,EAAAA,6BAA6B,EAAE,MAJ2B;AAK1DC,EAAAA,4BAA4B,EAAE,MAL4B;AAM1DC,EAAAA,8BAA8B,EAAE,OAN0B;AAO1DC,EAAAA,4BAA4B,EAAE,KAP4B;AAQ1DC,EAAAA,6BAA6B,EAAE,MAR2B;AAS1DC,EAAAA,4BAA4B,EAAE;AAT4B,CAA5D;AAaA,IAAIC,OAAqC,GAAG,IAA5C;;AAQO,SAASC,6BAAT,CAAuCC,EAAvC,EAAgF;AACrF,MAAI,CAACF,OAAL,EAAc;AACZE,IAAAA,EAAE,GAAGA,EAAE,IAAIC,eAAe,EAArB,IAA2BC,SAAhC;AAEAJ,IAAAA,OAAO,GAAG,IAAIK,GAAJ,EAAV;;AAHY,+CAKSf,gBALT;AAAA;;AAAA;AAKZ,0DAAuC;AAAA,YAA5BgB,MAA4B;;AACrC,aAAK,IAAMC,SAAX,IAAwBhB,gBAAxB,EAA0C;AACxC,cAAIW,EAAE,IAAIA,EAAE,CAACM,YAAH,WAAmBF,MAAnB,SAA4BC,SAA5B,EAAV,EAAoD;AAClD,gBAAME,gBAAgB,GAAGlB,gBAAgB,CAACgB,SAAD,CAAzC;AACAP,YAAAA,OAAO,CAACU,GAAR,CAAYD,gBAAZ;AACD;AACF;AACF;AAZW;AAAA;AAAA;AAAA;AAAA;AAab;;AAED,SAAOT,OAAP;AACD;;AAKD,SAASG,eAAT,GAA2B;AACzB,MAAI;AACF,QAAMQ,MAAM,GAAGC,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf;AACA,WAAOF,MAAM,CAACG,UAAP,CAAkB,OAAlB,CAAP;AACD,GAHD,CAGE,OAAOC,KAAP,EAAc;AACd,WAAO,IAAP;AACD;AACF","sourcesContent":["import type {GPUTextureFormat} from '@loaders.gl/schema';\n\nconst BROWSER_PREFIXES = ['', 'WEBKIT_', 'MOZ_'];\n\nconst WEBGL_EXTENSIONS: {[key: string]: GPUTextureFormat} = {\n /* eslint-disable camelcase */\n WEBGL_compressed_texture_s3tc: 'dxt',\n WEBGL_compressed_texture_s3tc_srgb: 'dxt-srgb',\n WEBGL_compressed_texture_etc1: 'etc1',\n WEBGL_compressed_texture_etc: 'etc2',\n WEBGL_compressed_texture_pvrtc: 'pvrtc',\n WEBGL_compressed_texture_atc: 'atc',\n WEBGL_compressed_texture_astc: 'astc',\n EXT_texture_compression_rgtc: 'rgtc'\n /* eslint-enable camelcase */\n};\n\nlet formats: Set<GPUTextureFormat> | null = null;\n\n/**\n * Returns a list of formats.\n * Creates a temporary WebGLRenderingContext if none is provided.\n *\n * @param gl - Optional context.\n */\nexport function getSupportedGPUTextureFormats(gl?: WebGLRenderingContext): Set<string> {\n if (!formats) {\n gl = gl || getWebGLContext() || undefined;\n\n formats = new Set<GPUTextureFormat>();\n\n for (const prefix of BROWSER_PREFIXES) {\n for (const extension in WEBGL_EXTENSIONS) {\n if (gl && gl.getExtension(`${prefix}${extension}`)) {\n const gpuTextureFormat = WEBGL_EXTENSIONS[extension];\n formats.add(gpuTextureFormat);\n }\n }\n }\n }\n\n return formats;\n}\n\n/**\n * @returns {WebGLRenderingContext?}\n */\nfunction getWebGLContext() {\n try {\n const canvas = document.createElement('canvas');\n return canvas.getContext('webgl');\n } catch (error) {\n return null;\n }\n}\n"],"file":"texture-formats.js"}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VERSION = void 0;
7
- var VERSION = typeof "3.1.6" !== 'undefined' ? "3.1.6" : 'latest';
7
+ var VERSION = typeof "3.2.0-alpha.1" !== 'undefined' ? "3.2.0-alpha.1" : 'beta';
8
8
  exports.VERSION = VERSION;
9
9
  //# sourceMappingURL=version.js.map