@loaders.gl/gltf 3.0.12 → 3.1.0-alpha.4

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 (103) hide show
  1. package/dist/dist.min.js +1 -1
  2. package/dist/dist.min.js.map +1 -1
  3. package/dist/es5/bundle.js +2 -4
  4. package/dist/es5/bundle.js.map +1 -1
  5. package/dist/es5/gltf-loader.js.map +1 -1
  6. package/dist/es5/index.js +0 -8
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/lib/api/gltf-extensions.js +146 -0
  9. package/dist/es5/lib/api/gltf-extensions.js.map +1 -0
  10. package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -1
  11. package/dist/es5/lib/api/normalize-gltf-v1.js +1 -1
  12. package/dist/es5/lib/api/normalize-gltf-v1.js.map +1 -1
  13. package/dist/es5/lib/extensions/EXT_meshopt_compression.js +32 -21
  14. package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +1 -1
  15. package/dist/es5/lib/extensions/EXT_texture_webp.js +60 -0
  16. package/dist/es5/lib/extensions/EXT_texture_webp.js.map +1 -0
  17. package/dist/es5/lib/extensions/KHR_binary_gltf.js +13 -13
  18. package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +1 -1
  19. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +55 -32
  20. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
  21. package/dist/es5/lib/extensions/KHR_texture_basisu.js +49 -0
  22. package/dist/es5/lib/extensions/KHR_texture_basisu.js.map +1 -0
  23. package/dist/es5/lib/extensions/{KHR_lights_punctual.js → deprecated/KHR_lights_punctual.js} +13 -10
  24. package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
  25. package/dist/es5/lib/extensions/{KHR_materials_unlit.js → deprecated/KHR_materials_unlit.js} +10 -7
  26. package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
  27. package/dist/es5/lib/extensions/{KHR_techniques_webgl.js → deprecated/KHR_techniques_webgl.js} +10 -7
  28. package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
  29. package/dist/es5/lib/gltf-utils/gltf-constants.js +0 -13
  30. package/dist/es5/lib/gltf-utils/gltf-constants.js.map +1 -1
  31. package/dist/es5/lib/parsers/parse-gltf.js +71 -28
  32. package/dist/es5/lib/parsers/parse-gltf.js.map +1 -1
  33. package/dist/es5/lib/utils/version.js +1 -1
  34. package/dist/es5/lib/utils/version.js.map +1 -1
  35. package/dist/es5/webp/webp.js +104 -0
  36. package/dist/es5/webp/webp.js.map +1 -0
  37. package/dist/esm/bundle.js +2 -4
  38. package/dist/esm/bundle.js.map +1 -1
  39. package/dist/esm/gltf-loader.js.map +1 -1
  40. package/dist/esm/index.js +0 -1
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/lib/api/gltf-extensions.js +35 -0
  43. package/dist/esm/lib/api/gltf-extensions.js.map +1 -0
  44. package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -1
  45. package/dist/esm/lib/api/normalize-gltf-v1.js +1 -1
  46. package/dist/esm/lib/api/normalize-gltf-v1.js.map +1 -1
  47. package/dist/esm/lib/extensions/EXT_meshopt_compression.js +16 -8
  48. package/dist/esm/lib/extensions/EXT_meshopt_compression.js.map +1 -1
  49. package/dist/esm/lib/extensions/EXT_texture_webp.js +32 -0
  50. package/dist/esm/lib/extensions/EXT_texture_webp.js.map +1 -0
  51. package/dist/esm/lib/extensions/KHR_binary_gltf.js +8 -8
  52. package/dist/esm/lib/extensions/KHR_binary_gltf.js.map +1 -1
  53. package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js +9 -1
  54. package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
  55. package/dist/esm/lib/extensions/KHR_texture_basisu.js +22 -0
  56. package/dist/esm/lib/extensions/KHR_texture_basisu.js.map +1 -0
  57. package/dist/esm/lib/extensions/{KHR_lights_punctual.js → deprecated/KHR_lights_punctual.js} +4 -3
  58. package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
  59. package/dist/esm/lib/extensions/{KHR_materials_unlit.js → deprecated/KHR_materials_unlit.js} +3 -2
  60. package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
  61. package/dist/esm/lib/extensions/{KHR_techniques_webgl.js → deprecated/KHR_techniques_webgl.js} +3 -2
  62. package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
  63. package/dist/esm/lib/gltf-utils/gltf-constants.js +0 -6
  64. package/dist/esm/lib/gltf-utils/gltf-constants.js.map +1 -1
  65. package/dist/esm/lib/parsers/parse-gltf.js +23 -5
  66. package/dist/esm/lib/parsers/parse-gltf.js.map +1 -1
  67. package/dist/esm/lib/utils/version.js +1 -1
  68. package/dist/esm/lib/utils/version.js.map +1 -1
  69. package/dist/esm/webp/webp.js +29 -0
  70. package/dist/esm/webp/webp.js.map +1 -0
  71. package/package.json +6 -6
  72. package/src/bundle.ts +2 -3
  73. package/src/gltf-loader.ts +7 -4
  74. package/src/index.ts +8 -4
  75. package/src/lib/api/gltf-extensions.ts +71 -0
  76. package/src/lib/api/gltf-scenegraph.ts +4 -6
  77. package/src/lib/api/normalize-gltf-v1.js +2 -1
  78. package/src/lib/extensions/EXT_meshopt_compression.ts +32 -23
  79. package/src/lib/extensions/EXT_texture_webp.ts +45 -0
  80. package/src/lib/extensions/KHR_binary_gltf.ts +19 -10
  81. package/src/lib/extensions/KHR_draco_mesh_compression.ts +31 -11
  82. package/src/lib/extensions/KHR_texture_basisu.ts +36 -0
  83. package/src/lib/extensions/{KHR_lights_punctual.ts → deprecated/KHR_lights_punctual.ts} +7 -4
  84. package/src/lib/extensions/{KHR_materials_unlit.ts → deprecated/KHR_materials_unlit.ts} +6 -3
  85. package/src/lib/extensions/{KHR_techniques_webgl.ts → deprecated/KHR_techniques_webgl.ts} +6 -3
  86. package/src/lib/gltf-utils/gltf-constants.ts +0 -12
  87. package/src/lib/parsers/parse-gltf.ts +55 -19
  88. package/src/lib/types/gltf-json-schema.ts +96 -3
  89. package/src/lib/types/gltf-types.ts +19 -21
  90. package/src/webp/webp.ts +41 -0
  91. package/dist/dist.es5.min.js +0 -2
  92. package/dist/dist.es5.min.js.map +0 -1
  93. package/dist/es5/lib/extensions/KHR_lights_punctual.js.map +0 -1
  94. package/dist/es5/lib/extensions/KHR_materials_unlit.js.map +0 -1
  95. package/dist/es5/lib/extensions/KHR_techniques_webgl.js.map +0 -1
  96. package/dist/es5/lib/extensions/gltf-extensions.js +0 -92
  97. package/dist/es5/lib/extensions/gltf-extensions.js.map +0 -1
  98. package/dist/esm/lib/extensions/KHR_lights_punctual.js.map +0 -1
  99. package/dist/esm/lib/extensions/KHR_materials_unlit.js.map +0 -1
  100. package/dist/esm/lib/extensions/KHR_techniques_webgl.js.map +0 -1
  101. package/dist/esm/lib/extensions/gltf-extensions.js +0 -24
  102. package/dist/esm/lib/extensions/gltf-extensions.js.map +0 -1
  103. package/src/lib/extensions/gltf-extensions.ts +0 -48
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/lib/extensions/deprecated/KHR_techniques_webgl.ts"],"names":["KHR_TECHNIQUES_WEBGL","name","decode","gltfData","gltfScenegraph","GLTFScenegraph","json","extension","getExtension","techniques","resolveTechniques","materials","material","materialExtension","getObjectExtension","technique","Object","assign","values","resolveValues","removeObjectExtension","removeExtension","encode","options","techniquesExtension","programs","shaders","textDecoder","TextDecoder","forEach","shader","Number","isFinite","bufferView","code","getTypedArrayForBufferView","Error","program","fragmentShader","vertexShader","keys","uniforms","uniform","value","index","undefined","texture","getTexture"],"mappings":"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","sourcesContent":["// GLTF EXTENSION: KHR_techniques_webgl\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_techniques_webgl\n\nimport type {GLTF} from '../../types/gltf-types';\n\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\n\nconst KHR_TECHNIQUES_WEBGL = 'KHR_techniques_webgl';\n\nexport const name = KHR_TECHNIQUES_WEBGL;\n\nexport async function decode(gltfData: {json: GLTF}): Promise<void> {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n const extension = gltfScenegraph.getExtension(KHR_TECHNIQUES_WEBGL);\n if (extension) {\n const techniques = resolveTechniques(extension, gltfScenegraph);\n\n for (const material of json.materials || []) {\n const materialExtension = gltfScenegraph.getObjectExtension(material, KHR_TECHNIQUES_WEBGL);\n if (materialExtension) {\n // @ts-ignore TODO\n material.technique = Object.assign(\n {},\n materialExtension,\n // @ts-ignore\n techniques[materialExtension.technique]\n );\n // @ts-ignore TODO\n material.technique.values = resolveValues(material.technique, gltfScenegraph);\n }\n gltfScenegraph.removeObjectExtension(material, KHR_TECHNIQUES_WEBGL);\n }\n\n gltfScenegraph.removeExtension(KHR_TECHNIQUES_WEBGL);\n }\n}\n// eslint-disable-next-line\nexport async function encode(gltfData, options): Promise<void> {\n // TODO\n}\n\nfunction resolveTechniques(\n techniquesExtension: {[key: string]: any},\n // programs: {[key: string]: any}[],\n // shaders: {[key: string]: any}[],\n // techniques: {[key: string]: any}[]\n gltfScenegraph\n) {\n const {programs = [], shaders = [], techniques = []} = techniquesExtension;\n const textDecoder = new TextDecoder();\n\n shaders.forEach((shader) => {\n if (Number.isFinite(shader.bufferView)) {\n shader.code = textDecoder.decode(\n gltfScenegraph.getTypedArrayForBufferView(shader.bufferView)\n );\n } else {\n // TODO: handle URI shader\n throw new Error('KHR_techniques_webgl: no shader code');\n }\n });\n\n programs.forEach((program) => {\n program.fragmentShader = shaders[program.fragmentShader];\n program.vertexShader = shaders[program.vertexShader];\n });\n\n techniques.forEach((technique) => {\n technique.program = programs[technique.program];\n });\n\n return techniques;\n}\n\nfunction resolveValues(technique, gltfScenegraph) {\n const values = Object.assign({}, technique.values);\n\n // merge values from uniforms\n Object.keys(technique.uniforms || {}).forEach((uniform) => {\n if (technique.uniforms[uniform].value && !(uniform in values)) {\n values[uniform] = technique.uniforms[uniform].value;\n }\n });\n\n // resolve textures\n Object.keys(values).forEach((uniform) => {\n if (typeof values[uniform] === 'object' && values[uniform].index !== undefined) {\n // Assume this is a texture\n // TODO: find if there are any other types that can be referenced\n values[uniform].texture = gltfScenegraph.getTexture(values[uniform].index);\n }\n });\n\n return values;\n}\n"],"file":"KHR_techniques_webgl.js"}
@@ -6,19 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getBytesFromComponentType = getBytesFromComponentType;
7
7
  exports.getSizeFromAccessorType = getSizeFromAccessorType;
8
8
  exports.getGLEnumFromSamplerParameter = getGLEnumFromSamplerParameter;
9
- exports.EXT_MESHOPT_COMPRESSION = exports.KHR_TECHNIQUES_WEBGL = exports.KHR_MATERIALS_UNLIT = exports.KHR_LIGHTS_PUNCTUAL = exports.KHR_DRACO_MESH_COMPRESSION = exports.KHR_BINARY_GLTF = void 0;
10
- var KHR_BINARY_GLTF = 'KHR_binary_glTF';
11
- exports.KHR_BINARY_GLTF = KHR_BINARY_GLTF;
12
- var KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';
13
- exports.KHR_DRACO_MESH_COMPRESSION = KHR_DRACO_MESH_COMPRESSION;
14
- var KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';
15
- exports.KHR_LIGHTS_PUNCTUAL = KHR_LIGHTS_PUNCTUAL;
16
- var KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';
17
- exports.KHR_MATERIALS_UNLIT = KHR_MATERIALS_UNLIT;
18
- var KHR_TECHNIQUES_WEBGL = 'KHR_techniques_webgl';
19
- exports.KHR_TECHNIQUES_WEBGL = KHR_TECHNIQUES_WEBGL;
20
- var EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';
21
- exports.EXT_MESHOPT_COMPRESSION = EXT_MESHOPT_COMPRESSION;
22
9
  var COMPONENTS = {
23
10
  SCALAR: 1,
24
11
  VEC2: 2,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/gltf-utils/gltf-constants.ts"],"names":["KHR_BINARY_GLTF","KHR_DRACO_MESH_COMPRESSION","KHR_LIGHTS_PUNCTUAL","KHR_MATERIALS_UNLIT","KHR_TECHNIQUES_WEBGL","EXT_MESHOPT_COMPRESSION","COMPONENTS","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","BYTES","getBytesFromComponentType","componentType","getSizeFromAccessorType","type","getGLEnumFromSamplerParameter","parameter","GL_TEXTURE_MAG_FILTER","GL_TEXTURE_MIN_FILTER","GL_TEXTURE_WRAP_S","GL_TEXTURE_WRAP_T","PARAMETER_MAP","magFilter","minFilter","wrapS","wrapT"],"mappings":";;;;;;;;;AACO,IAAMA,eAAe,GAAG,iBAAxB;;AAGA,IAAMC,0BAA0B,GAAG,4BAAnC;;AACA,IAAMC,mBAAmB,GAAG,qBAA5B;;AACA,IAAMC,mBAAmB,GAAG,qBAA5B;;AACA,IAAMC,oBAAoB,GAAG,sBAA7B;;AAGA,IAAMC,uBAAuB,GAAG,yBAAhC;;AAEP,IAAMC,UAAU,GAAG;AACjBC,EAAAA,MAAM,EAAE,CADS;AAEjBC,EAAAA,IAAI,EAAE,CAFW;AAGjBC,EAAAA,IAAI,EAAE,CAHW;AAIjBC,EAAAA,IAAI,EAAE,CAJW;AAKjBC,EAAAA,IAAI,EAAE,CALW;AAMjBC,EAAAA,IAAI,EAAE,CANW;AAOjBC,EAAAA,IAAI,EAAE;AAPW,CAAnB;AAUA,IAAMC,KAAK,GAAG;AACZ,QAAM,CADM;AAEZ,QAAM,CAFM;AAGZ,QAAM,CAHM;AAIZ,QAAM,CAJM;AAKZ,QAAM,CALM;AAMZ,QAAM;AANM,CAAd;;AAWO,SAASC,yBAAT,CAAmCC,aAAnC,EAAkD;AACvD,SAAOF,KAAK,CAACE,aAAD,CAAZ;AACD;;AAEM,SAASC,uBAAT,CAAiCC,IAAjC,EAAuC;AAC5C,SAAOZ,UAAU,CAACY,IAAD,CAAjB;AACD;;AAEM,SAASC,6BAAT,CAAuCC,SAAvC,EAAkD;AACvD,MAAMC,qBAAqB,GAAG,MAA9B;AACA,MAAMC,qBAAqB,GAAG,MAA9B;AACA,MAAMC,iBAAiB,GAAG,MAA1B;AACA,MAAMC,iBAAiB,GAAG,MAA1B;AAEA,MAAMC,aAAa,GAAG;AACpBC,IAAAA,SAAS,EAAEL,qBADS;AAEpBM,IAAAA,SAAS,EAAEL,qBAFS;AAGpBM,IAAAA,KAAK,EAAEL,iBAHa;AAIpBM,IAAAA,KAAK,EAAEL;AAJa,GAAtB;AAOA,SAAOC,aAAa,CAACL,SAAD,CAApB;AACD","sourcesContent":["// GLTF 1.0 extensions\nexport const KHR_BINARY_GLTF = 'KHR_binary_glTF';\n\n// GLTF 2.0 extensions\nexport const KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\nexport const KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';\nexport const KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';\nexport const KHR_TECHNIQUES_WEBGL = 'KHR_techniques_webgl';\n\n// External extensions\nexport const EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';\n\nconst COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst BYTES = {\n 5120: 1, // BYTE\n 5121: 1, // UNSIGNED_BYTE\n 5122: 2, // SHORT\n 5123: 2, // UNSIGNED_SHORT\n 5125: 4, // UNSIGNED_INT\n 5126: 4 // FLOAT\n};\n\n// ENUM LOOKUP\n\nexport function getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nexport function getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nexport function getGLEnumFromSamplerParameter(parameter) {\n const GL_TEXTURE_MAG_FILTER = 0x2800;\n const GL_TEXTURE_MIN_FILTER = 0x2801;\n const GL_TEXTURE_WRAP_S = 0x2802;\n const GL_TEXTURE_WRAP_T = 0x2803;\n\n const PARAMETER_MAP = {\n magFilter: GL_TEXTURE_MAG_FILTER,\n minFilter: GL_TEXTURE_MIN_FILTER,\n wrapS: GL_TEXTURE_WRAP_S,\n wrapT: GL_TEXTURE_WRAP_T\n };\n\n return PARAMETER_MAP[parameter];\n}\n"],"file":"gltf-constants.js"}
1
+ {"version":3,"sources":["../../../../src/lib/gltf-utils/gltf-constants.ts"],"names":["COMPONENTS","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","BYTES","getBytesFromComponentType","componentType","getSizeFromAccessorType","type","getGLEnumFromSamplerParameter","parameter","GL_TEXTURE_MAG_FILTER","GL_TEXTURE_MIN_FILTER","GL_TEXTURE_WRAP_S","GL_TEXTURE_WRAP_T","PARAMETER_MAP","magFilter","minFilter","wrapS","wrapT"],"mappings":";;;;;;;;AAAA,IAAMA,UAAU,GAAG;AACjBC,EAAAA,MAAM,EAAE,CADS;AAEjBC,EAAAA,IAAI,EAAE,CAFW;AAGjBC,EAAAA,IAAI,EAAE,CAHW;AAIjBC,EAAAA,IAAI,EAAE,CAJW;AAKjBC,EAAAA,IAAI,EAAE,CALW;AAMjBC,EAAAA,IAAI,EAAE,CANW;AAOjBC,EAAAA,IAAI,EAAE;AAPW,CAAnB;AAUA,IAAMC,KAAK,GAAG;AACZ,QAAM,CADM;AAEZ,QAAM,CAFM;AAGZ,QAAM,CAHM;AAIZ,QAAM,CAJM;AAKZ,QAAM,CALM;AAMZ,QAAM;AANM,CAAd;;AAWO,SAASC,yBAAT,CAAmCC,aAAnC,EAAkD;AACvD,SAAOF,KAAK,CAACE,aAAD,CAAZ;AACD;;AAEM,SAASC,uBAAT,CAAiCC,IAAjC,EAAuC;AAC5C,SAAOZ,UAAU,CAACY,IAAD,CAAjB;AACD;;AAEM,SAASC,6BAAT,CAAuCC,SAAvC,EAAkD;AACvD,MAAMC,qBAAqB,GAAG,MAA9B;AACA,MAAMC,qBAAqB,GAAG,MAA9B;AACA,MAAMC,iBAAiB,GAAG,MAA1B;AACA,MAAMC,iBAAiB,GAAG,MAA1B;AAEA,MAAMC,aAAa,GAAG;AACpBC,IAAAA,SAAS,EAAEL,qBADS;AAEpBM,IAAAA,SAAS,EAAEL,qBAFS;AAGpBM,IAAAA,KAAK,EAAEL,iBAHa;AAIpBM,IAAAA,KAAK,EAAEL;AAJa,GAAtB;AAOA,SAAOC,aAAa,CAACL,SAAD,CAApB;AACD","sourcesContent":["const COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst BYTES = {\n 5120: 1, // BYTE\n 5121: 1, // UNSIGNED_BYTE\n 5122: 2, // SHORT\n 5123: 2, // UNSIGNED_SHORT\n 5125: 4, // UNSIGNED_INT\n 5126: 4 // FLOAT\n};\n\n// ENUM LOOKUP\n\nexport function getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nexport function getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nexport function getGLEnumFromSamplerParameter(parameter) {\n const GL_TEXTURE_MAG_FILTER = 0x2800;\n const GL_TEXTURE_MIN_FILTER = 0x2801;\n const GL_TEXTURE_WRAP_S = 0x2802;\n const GL_TEXTURE_WRAP_T = 0x2803;\n\n const PARAMETER_MAP = {\n magFilter: GL_TEXTURE_MAG_FILTER,\n minFilter: GL_TEXTURE_MIN_FILTER,\n wrapS: GL_TEXTURE_WRAP_S,\n wrapT: GL_TEXTURE_WRAP_T\n };\n\n return PARAMETER_MAP[parameter];\n}\n"],"file":"gltf-constants.js"}
@@ -24,7 +24,7 @@ var _resolveUrl = require("../gltf-utils/resolve-url");
24
24
 
25
25
  var _getTypedArray = require("../gltf-utils/get-typed-array");
26
26
 
27
- var _gltfExtensions = require("../extensions/gltf-extensions");
27
+ var _gltfExtensions = require("../api/gltf-extensions");
28
28
 
29
29
  var _normalizeGltfV = require("../api/normalize-gltf-v1");
30
30
 
@@ -36,6 +36,12 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
36
36
 
37
37
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
38
38
 
39
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
40
+
41
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
42
+
43
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
44
+
39
45
  function isGLTF(arrayBuffer, options) {
40
46
  var byteOffset = 0;
41
47
  return (0, _parseGlb.isGLB)(arrayBuffer, byteOffset, options);
@@ -68,17 +74,18 @@ function _parseGLTF() {
68
74
  (0, _normalizeGltfV.normalizeGLTFV1)(gltf, {
69
75
  normalize: options === null || options === void 0 ? void 0 : (_options$gltf = options.gltf) === null || _options$gltf === void 0 ? void 0 : _options$gltf.normalize
70
76
  });
77
+ (0, _gltfExtensions.preprocessExtensions)(gltf, options, context);
71
78
  promises = [];
72
79
 
73
80
  if (!(options !== null && options !== void 0 && (_options$gltf2 = options.gltf) !== null && _options$gltf2 !== void 0 && _options$gltf2.loadBuffers && gltf.json.buffers)) {
74
- _context.next = 9;
81
+ _context.next = 10;
75
82
  break;
76
83
  }
77
84
 
78
- _context.next = 9;
85
+ _context.next = 10;
79
86
  return loadBuffers(gltf, options, context);
80
87
 
81
- case 9:
88
+ case 10:
82
89
  if (options !== null && options !== void 0 && (_options$gltf3 = options.gltf) !== null && _options$gltf3 !== void 0 && _options$gltf3.loadImages) {
83
90
  _promise = loadImages(gltf, options, context);
84
91
  promises.push(_promise);
@@ -86,13 +93,13 @@ function _parseGLTF() {
86
93
 
87
94
  promise = (0, _gltfExtensions.decodeExtensions)(gltf, options, context);
88
95
  promises.push(promise);
89
- _context.next = 14;
96
+ _context.next = 15;
90
97
  return Promise.all(promises);
91
98
 
92
- case 14:
99
+ case 15:
93
100
  return _context.abrupt("return", options !== null && options !== void 0 && (_options$gltf4 = options.gltf) !== null && _options$gltf4 !== void 0 && _options$gltf4.postProcess ? (0, _postProcessGltf.postProcessGLTF)(gltf, options) : gltf);
94
101
 
95
- case 15:
102
+ case 16:
96
103
  case "end":
97
104
  return _context.stop();
98
105
  }
@@ -146,39 +153,40 @@ function loadBuffers(_x3, _x4, _x5) {
146
153
 
147
154
  function _loadBuffers() {
148
155
  _loadBuffers = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(gltf, options, context) {
149
- var i, buffer, _context$fetch, _response$arrayBuffer, fetch, uri, response, arrayBuffer;
156
+ var buffers, i, buffer, _context$fetch, _response$arrayBuffer, fetch, uri, response, arrayBuffer;
150
157
 
151
158
  return _regenerator.default.wrap(function _callee2$(_context2) {
152
159
  while (1) {
153
160
  switch (_context2.prev = _context2.next) {
154
161
  case 0:
162
+ buffers = gltf.json.buffers || [];
155
163
  i = 0;
156
164
 
157
- case 1:
158
- if (!(i < gltf.json.buffers.length)) {
159
- _context2.next = 18;
165
+ case 2:
166
+ if (!(i < buffers.length)) {
167
+ _context2.next = 19;
160
168
  break;
161
169
  }
162
170
 
163
- buffer = gltf.json.buffers[i];
171
+ buffer = buffers[i];
164
172
 
165
173
  if (!buffer.uri) {
166
- _context2.next = 15;
174
+ _context2.next = 16;
167
175
  break;
168
176
  }
169
177
 
170
178
  fetch = context.fetch;
171
179
  (0, _assert.assert)(fetch);
172
180
  uri = (0, _resolveUrl.resolveUrl)(buffer.uri, options);
173
- _context2.next = 9;
181
+ _context2.next = 10;
174
182
  return context === null || context === void 0 ? void 0 : (_context$fetch = context.fetch) === null || _context$fetch === void 0 ? void 0 : _context$fetch.call(context, uri);
175
183
 
176
- case 9:
184
+ case 10:
177
185
  response = _context2.sent;
178
- _context2.next = 12;
186
+ _context2.next = 13;
179
187
  return response === null || response === void 0 ? void 0 : (_response$arrayBuffer = response.arrayBuffer) === null || _response$arrayBuffer === void 0 ? void 0 : _response$arrayBuffer.call(response);
180
188
 
181
- case 12:
189
+ case 13:
182
190
  arrayBuffer = _context2.sent;
183
191
  gltf.buffers[i] = {
184
192
  arrayBuffer: arrayBuffer,
@@ -187,12 +195,12 @@ function _loadBuffers() {
187
195
  };
188
196
  delete buffer.uri;
189
197
 
190
- case 15:
198
+ case 16:
191
199
  ++i;
192
- _context2.next = 1;
200
+ _context2.next = 2;
193
201
  break;
194
202
 
195
- case 18:
203
+ case 19:
196
204
  case "end":
197
205
  return _context2.stop();
198
206
  }
@@ -208,25 +216,35 @@ function loadImages(_x6, _x7, _x8) {
208
216
 
209
217
  function _loadImages() {
210
218
  _loadImages = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(gltf, options, context) {
211
- var images, promises, i;
219
+ var imageIndices, images, promises, _iterator2, _step2, imageIndex;
220
+
212
221
  return _regenerator.default.wrap(function _callee3$(_context3) {
213
222
  while (1) {
214
223
  switch (_context3.prev = _context3.next) {
215
224
  case 0:
225
+ imageIndices = getReferencesImageIndices(gltf);
216
226
  images = gltf.json.images || [];
217
227
  promises = [];
218
-
219
- for (i = 0; i < images.length; ++i) {
220
- promises.push(loadImage(gltf, images[i], i, options, context));
228
+ _iterator2 = _createForOfIteratorHelper(imageIndices);
229
+
230
+ try {
231
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
232
+ imageIndex = _step2.value;
233
+ promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));
234
+ }
235
+ } catch (err) {
236
+ _iterator2.e(err);
237
+ } finally {
238
+ _iterator2.f();
221
239
  }
222
240
 
223
- _context3.next = 5;
241
+ _context3.next = 7;
224
242
  return Promise.all(promises);
225
243
 
226
- case 5:
244
+ case 7:
227
245
  return _context3.abrupt("return", _context3.sent);
228
246
 
229
- case 6:
247
+ case 8:
230
248
  case "end":
231
249
  return _context3.stop();
232
250
  }
@@ -236,6 +254,30 @@ function _loadImages() {
236
254
  return _loadImages.apply(this, arguments);
237
255
  }
238
256
 
257
+ function getReferencesImageIndices(gltf) {
258
+ var imageIndices = new Set();
259
+ var textures = gltf.json.textures || [];
260
+
261
+ var _iterator = _createForOfIteratorHelper(textures),
262
+ _step;
263
+
264
+ try {
265
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
266
+ var texture = _step.value;
267
+
268
+ if (texture.source !== undefined) {
269
+ imageIndices.add(texture.source);
270
+ }
271
+ }
272
+ } catch (err) {
273
+ _iterator.e(err);
274
+ } finally {
275
+ _iterator.f();
276
+ }
277
+
278
+ return Array.from(imageIndices).sort();
279
+ }
280
+
239
281
  function loadImage(_x9, _x10, _x11, _x12, _x13) {
240
282
  return _loadImage.apply(this, arguments);
241
283
  }
@@ -278,9 +320,10 @@ function _loadImage() {
278
320
 
279
321
  case 13:
280
322
  parsedImage = _context4.sent;
323
+ gltf.images = gltf.images || [];
281
324
  gltf.images[index] = parsedImage;
282
325
 
283
- case 15:
326
+ case 16:
284
327
  case "end":
285
328
  return _context4.stop();
286
329
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"names":["isGLTF","arrayBuffer","options","byteOffset","parseGLTF","gltf","arrayBufferOrString","context","parseGLTFContainerSync","normalize","promises","loadBuffers","json","buffers","loadImages","promise","push","Promise","all","postProcess","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","glb","type","_glb","Array","length","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","fetch","response","loadImage","image","index","parse","Number","isFinite","bufferView","array","ImageLoader","parsedImage"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase, max-statements, no-restricted-globals */\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport type {GLB} from '../types/glb-types';\nimport type {GLBParseOptions} from './parse-glb';\n\nimport {ImageLoader} from '@loaders.gl/images';\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {resolveUrl} from '../gltf-utils/resolve-url';\nimport {getTypedArrayForBufferView} from '../gltf-utils/get-typed-array';\nimport {decodeExtensions} from '../extensions/gltf-extensions';\nimport {normalizeGLTFV1} from '../api/normalize-gltf-v1';\nimport {postProcessGLTF} from '../api/post-process-gltf';\nimport parseGLBSync, {isGLB} from './parse-glb';\n\nexport type GLTFParseOptions = {\n excludeExtensions?: string[];\n decompressMeshes?: boolean;\n normalize?: boolean;\n loadBuffers?: boolean;\n loadImages?: boolean;\n postProcess?: boolean;\n};\n\n// export type GLTFOptions = {\n// gltf?: GLTFParseOptions;\n// };\n\nexport function isGLTF(arrayBuffer, options?): boolean {\n const byteOffset = 0;\n return isGLB(arrayBuffer, byteOffset, options);\n}\n\nexport async function parseGLTF(\n gltf,\n arrayBufferOrString,\n byteOffset = 0,\n options: {\n gltf?: GLTFParseOptions;\n glb?: GLBParseOptions;\n },\n context: LoaderContext\n) {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n const promises: Promise<any>[] = [];\n\n // Load linked buffers asynchronously and decodes base64 buffers in parallel\n if (options?.gltf?.loadBuffers && gltf.json.buffers) {\n await loadBuffers(gltf, options, context);\n }\n\n if (options?.gltf?.loadImages) {\n const promise = loadImages(gltf, options, context);\n promises.push(promise);\n }\n\n const promise = decodeExtensions(gltf, options, context);\n promises.push(promise);\n\n // Parallelize image loading and buffer loading/extension decoding\n await Promise.all(promises);\n\n // Post processing resolves indices to objects, buffers\n return options?.gltf?.postProcess ? postProcessGLTF(gltf, options) : gltf;\n}\n\n// `data` - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\nfunction parseGLTFContainerSync(gltf, data, byteOffset, options) {\n // Initialize gltf container\n if (options.uri) {\n gltf.baseUri = options.uri;\n }\n\n // If data is binary and starting with magic bytes, assume binary JSON text, convert to string\n if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(data);\n }\n\n if (typeof data === 'string') {\n // If string, try to parse as JSON\n gltf.json = parseJSON(data);\n } else if (data instanceof ArrayBuffer) {\n // If still ArrayBuffer, parse as GLB container\n const glb: GLB = {} as GLB;\n byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);\n\n assert(glb.type === 'glTF', `Invalid GLB magic string ${glb.type}`);\n\n gltf._glb = glb;\n gltf.json = glb.json;\n } else {\n assert(false, 'GLTF: must be ArrayBuffer or string');\n }\n\n // Populate buffers\n // Create an external buffers array to hold binary data\n const buffers = gltf.json.buffers || [];\n gltf.buffers = new Array(buffers.length).fill(null);\n\n // Populates JSON and some bin chunk info\n if (gltf._glb && gltf._glb.header.hasBinChunk) {\n const {binChunks} = gltf._glb;\n gltf.buffers[0] = {\n arrayBuffer: binChunks[0].arrayBuffer,\n byteOffset: binChunks[0].byteOffset,\n byteLength: binChunks[0].byteLength\n };\n\n // TODO - this modifies JSON and is a post processing thing\n // gltf.json.buffers[0].data = gltf.buffers[0].arrayBuffer;\n // gltf.json.buffers[0].byteOffset = gltf.buffers[0].byteOffset;\n }\n\n // Populate images\n const images = gltf.json.images || [];\n gltf.images = new Array(images.length).fill({});\n}\n\n// Asynchronously fetch and parse buffers, store in buffers array outside of json\nasync function loadBuffers(gltf, options, context: LoaderContext) {\n for (let i = 0; i < gltf.json.buffers.length; ++i) {\n const buffer = gltf.json.buffers[i];\n if (buffer.uri) {\n const {fetch} = context;\n assert(fetch);\n\n const uri = resolveUrl(buffer.uri, options);\n const response = await context?.fetch?.(uri);\n const arrayBuffer = await response?.arrayBuffer?.();\n\n gltf.buffers[i] = {\n arrayBuffer,\n byteOffset: 0,\n byteLength: arrayBuffer.byteLength\n };\n\n delete buffer.uri;\n }\n }\n}\n\nasync function loadImages(gltf, options, context: LoaderContext) {\n const images = gltf.json.images || [];\n\n const promises: Promise<any>[] = [];\n for (let i = 0; i < images.length; ++i) {\n promises.push(loadImage(gltf, images[i], i, options, context));\n }\n\n return await Promise.all(promises);\n}\n\n// Asynchronously fetches and parses one image, store in images array outside of json\nasync function loadImage(gltf, image, index: number, options, context: LoaderContext) {\n const {fetch, parse} = context;\n\n let arrayBuffer;\n\n if (image.uri) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n }\n\n if (Number.isFinite(image.bufferView)) {\n const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);\n arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);\n }\n\n assert(arrayBuffer, 'glTF image has no data');\n\n // Call `parse`\n const parsedImage = await parse(arrayBuffer, ImageLoader, {}, context);\n // TODO making sure ImageLoader is overridable by using array of loaders\n // const parsedImage = await parse(arrayBuffer, [ImageLoader]);\n\n gltf.images[index] = parsedImage;\n}\n"],"file":"parse-gltf.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"names":["isGLTF","arrayBuffer","options","byteOffset","parseGLTF","gltf","arrayBufferOrString","context","parseGLTFContainerSync","normalize","promises","loadBuffers","json","buffers","loadImages","promise","push","Promise","all","postProcess","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","glb","type","_glb","Array","length","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","fetch","response","imageIndices","getReferencesImageIndices","imageIndex","loadImage","Set","textures","texture","source","undefined","add","from","sort","image","index","parse","Number","isFinite","bufferView","array","ImageLoader","parsedImage"],"mappings":";;;;;;;;;;;;;;;;AAMA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;AAeO,SAASA,MAAT,CAAgBC,WAAhB,EAA6BC,OAA7B,EAAgD;AACrD,MAAMC,UAAU,GAAG,CAAnB;AACA,SAAO,qBAAMF,WAAN,EAAmBE,UAAnB,EAA+BD,OAA/B,CAAP;AACD;;SAEqBE,S;;;;;yEAAf,iBACLC,IADK,EAELC,mBAFK;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAGLH,YAAAA,UAHK,2DAGQ,CAHR;AAILD,YAAAA,OAJK;AAKLK,YAAAA,OALK;AAOLC,YAAAA,sBAAsB,CAACH,IAAD,EAAOC,mBAAP,EAA4BH,UAA5B,EAAwCD,OAAxC,CAAtB;AAEA,iDAAgBG,IAAhB,EAAsB;AAACI,cAAAA,SAAS,EAAEP,OAAF,aAAEA,OAAF,wCAAEA,OAAO,CAAEG,IAAX,kDAAE,cAAeI;AAA3B,aAAtB;AAEA,sDAAqBJ,IAArB,EAA2BH,OAA3B,EAAoCK,OAApC;AAEMG,YAAAA,QAbD,GAa4B,EAb5B;;AAAA,kBAgBDR,OAAO,SAAP,IAAAA,OAAO,WAAP,sBAAAA,OAAO,CAAEG,IAAT,0DAAeM,WAAf,IAA8BN,IAAI,CAACO,IAAL,CAAUC,OAhBvC;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAiBGF,WAAW,CAACN,IAAD,EAAOH,OAAP,EAAgBK,OAAhB,CAjBd;;AAAA;AAoBL,gBAAIL,OAAJ,aAAIA,OAAJ,iCAAIA,OAAO,CAAEG,IAAb,2CAAI,eAAeS,UAAnB,EAA+B;AACvBC,cAAAA,QADuB,GACbD,UAAU,CAACT,IAAD,EAAOH,OAAP,EAAgBK,OAAhB,CADG;AAE7BG,cAAAA,QAAQ,CAACM,IAAT,CAAcD,QAAd;AACD;;AAEKA,YAAAA,OAzBD,GAyBW,sCAAiBV,IAAjB,EAAuBH,OAAvB,EAAgCK,OAAhC,CAzBX;AA0BLG,YAAAA,QAAQ,CAACM,IAAT,CAAcD,OAAd;AA1BK;AAAA,mBA6BCE,OAAO,CAACC,GAAR,CAAYR,QAAZ,CA7BD;;AAAA;AAAA,6CAgCER,OAAO,SAAP,IAAAA,OAAO,WAAP,sBAAAA,OAAO,CAAEG,IAAT,0DAAec,WAAf,GAA6B,sCAAgBd,IAAhB,EAAsBH,OAAtB,CAA7B,GAA8DG,IAhChE;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAoCP,SAASG,sBAAT,CAAgCH,IAAhC,EAAsCe,IAAtC,EAA4CjB,UAA5C,EAAwDD,OAAxD,EAAiE;AAE/D,MAAIA,OAAO,CAACmB,GAAZ,EAAiB;AACfhB,IAAAA,IAAI,CAACiB,OAAL,GAAepB,OAAO,CAACmB,GAAvB;AACD;;AAGD,MAAID,IAAI,YAAYG,WAAhB,IAA+B,CAAC,qBAAMH,IAAN,EAAYjB,UAAZ,EAAwBD,OAAxB,CAApC,EAAsE;AACpE,QAAMsB,WAAW,GAAG,IAAIC,WAAJ,EAApB;AACAL,IAAAA,IAAI,GAAGI,WAAW,CAACE,MAAZ,CAAmBN,IAAnB,CAAP;AACD;;AAED,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAE5Bf,IAAAA,IAAI,CAACO,IAAL,GAAY,4BAAUQ,IAAV,CAAZ;AACD,GAHD,MAGO,IAAIA,IAAI,YAAYG,WAApB,EAAiC;AAEtC,QAAMI,GAAQ,GAAG,EAAjB;AACAxB,IAAAA,UAAU,GAAG,uBAAawB,GAAb,EAAkBP,IAAlB,EAAwBjB,UAAxB,EAAoCD,OAAO,CAACyB,GAA5C,CAAb;AAEA,wBAAOA,GAAG,CAACC,IAAJ,KAAa,MAApB,qCAAwDD,GAAG,CAACC,IAA5D;AAEAvB,IAAAA,IAAI,CAACwB,IAAL,GAAYF,GAAZ;AACAtB,IAAAA,IAAI,CAACO,IAAL,GAAYe,GAAG,CAACf,IAAhB;AACD,GATM,MASA;AACL,wBAAO,KAAP,EAAc,qCAAd;AACD;;AAID,MAAMC,OAAO,GAAGR,IAAI,CAACO,IAAL,CAAUC,OAAV,IAAqB,EAArC;AACAR,EAAAA,IAAI,CAACQ,OAAL,GAAe,IAAIiB,KAAJ,CAAUjB,OAAO,CAACkB,MAAlB,EAA0BC,IAA1B,CAA+B,IAA/B,CAAf;;AAGA,MAAI3B,IAAI,CAACwB,IAAL,IAAaxB,IAAI,CAACwB,IAAL,CAAUI,MAAV,CAAiBC,WAAlC,EAA+C;AAC7C,QAAOC,SAAP,GAAoB9B,IAAI,CAACwB,IAAzB,CAAOM,SAAP;AACA9B,IAAAA,IAAI,CAACQ,OAAL,CAAa,CAAb,IAAkB;AAChBZ,MAAAA,WAAW,EAAEkC,SAAS,CAAC,CAAD,CAAT,CAAalC,WADV;AAEhBE,MAAAA,UAAU,EAAEgC,SAAS,CAAC,CAAD,CAAT,CAAahC,UAFT;AAGhBiC,MAAAA,UAAU,EAAED,SAAS,CAAC,CAAD,CAAT,CAAaC;AAHT,KAAlB;AASD;;AAGD,MAAMC,MAAM,GAAGhC,IAAI,CAACO,IAAL,CAAUyB,MAAV,IAAoB,EAAnC;AACAhC,EAAAA,IAAI,CAACgC,MAAL,GAAc,IAAIP,KAAJ,CAAUO,MAAM,CAACN,MAAjB,EAAyBC,IAAzB,CAA8B,EAA9B,CAAd;AACD;;SAKcrB,W;;;;;2EAAf,kBAA2BN,IAA3B,EAAkDH,OAAlD,EAA2DK,OAA3D;AAAA;;AAAA;AAAA;AAAA;AAAA;AAEQM,YAAAA,OAFR,GAEkBR,IAAI,CAACO,IAAL,CAAUC,OAAV,IAAqB,EAFvC;AAGWyB,YAAAA,CAHX,GAGe,CAHf;;AAAA;AAAA,kBAGkBA,CAAC,GAAGzB,OAAO,CAACkB,MAH9B;AAAA;AAAA;AAAA;;AAIUQ,YAAAA,MAJV,GAImB1B,OAAO,CAACyB,CAAD,CAJ1B;;AAAA,iBAKQC,MAAM,CAAClB,GALf;AAAA;AAAA;AAAA;;AAMamB,YAAAA,KANb,GAMsBjC,OANtB,CAMaiC,KANb;AAOM,gCAAOA,KAAP;AAEMnB,YAAAA,GATZ,GASkB,4BAAWkB,MAAM,CAAClB,GAAlB,EAAuBnB,OAAvB,CATlB;AAAA;AAAA,mBAU6BK,OAV7B,aAU6BA,OAV7B,yCAU6BA,OAAO,CAAEiC,KAVtC,mDAU6B,oBAAAjC,OAAO,EAAUc,GAAV,CAVpC;;AAAA;AAUYoB,YAAAA,QAVZ;AAAA;AAAA,mBAWgCA,QAXhC,aAWgCA,QAXhC,gDAWgCA,QAAQ,CAAExC,WAX1C,0DAWgC,2BAAAwC,QAAQ,CAXxC;;AAAA;AAWYxC,YAAAA,WAXZ;AAaMI,YAAAA,IAAI,CAACQ,OAAL,CAAayB,CAAb,IAAkB;AAChBrC,cAAAA,WAAW,EAAXA,WADgB;AAEhBE,cAAAA,UAAU,EAAE,CAFI;AAGhBiC,cAAAA,UAAU,EAAEnC,WAAW,CAACmC;AAHR,aAAlB;AAMA,mBAAOG,MAAM,CAAClB,GAAd;;AAnBN;AAGsC,cAAEiB,CAHxC;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAgCexB,U;;;;;0EAAf,kBAA0BT,IAA1B,EAAiDH,OAAjD,EAA0DK,OAA1D;AAAA;;AAAA;AAAA;AAAA;AAAA;AACQmC,YAAAA,YADR,GACuBC,yBAAyB,CAACtC,IAAD,CADhD;AAGQgC,YAAAA,MAHR,GAGiBhC,IAAI,CAACO,IAAL,CAAUyB,MAAV,IAAoB,EAHrC;AAKQ3B,YAAAA,QALR,GAKmC,EALnC;AAAA,oDAM2BgC,YAN3B;;AAAA;AAME,qEAAuC;AAA5BE,gBAAAA,UAA4B;AACrClC,gBAAAA,QAAQ,CAACM,IAAT,CAAc6B,SAAS,CAACxC,IAAD,EAAOgC,MAAM,CAACO,UAAD,CAAb,EAA2BA,UAA3B,EAAuC1C,OAAvC,EAAgDK,OAAhD,CAAvB;AACD;AARH;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAUeU,OAAO,CAACC,GAAR,CAAYR,QAAZ,CAVf;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAcA,SAASiC,yBAAT,CAAmCtC,IAAnC,EAAoE;AAClE,MAAMqC,YAAY,GAAG,IAAII,GAAJ,EAArB;AAEA,MAAMC,QAAQ,GAAG1C,IAAI,CAACO,IAAL,CAAUmC,QAAV,IAAsB,EAAvC;;AAHkE,6CAI5CA,QAJ4C;AAAA;;AAAA;AAIlE,wDAAgC;AAAA,UAArBC,OAAqB;;AAC9B,UAAIA,OAAO,CAACC,MAAR,KAAmBC,SAAvB,EAAkC;AAChCR,QAAAA,YAAY,CAACS,GAAb,CAAiBH,OAAO,CAACC,MAAzB;AACD;AACF;AARiE;AAAA;AAAA;AAAA;AAAA;;AAUlE,SAAOnB,KAAK,CAACsB,IAAN,CAAWV,YAAX,EAAyBW,IAAzB,EAAP;AACD;;SAGcR,S;;;;;yEAAf,kBACExC,IADF,EAEEiD,KAFF,EAGEC,KAHF,EAIErD,OAJF,EAKEK,OALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAOSiC,YAAAA,KAPT,GAOyBjC,OAPzB,CAOSiC,KAPT,EAOgBgB,KAPhB,GAOyBjD,OAPzB,CAOgBiD,KAPhB;;AAAA,iBAWMF,KAAK,CAACjC,GAXZ;AAAA;AAAA;AAAA;;AAYUA,YAAAA,GAZV,GAYgB,4BAAWiC,KAAK,CAACjC,GAAjB,EAAsBnB,OAAtB,CAZhB;AAAA;AAAA,mBAa2BsC,KAAK,CAACnB,GAAD,CAbhC;;AAAA;AAaUoB,YAAAA,QAbV;AAAA;AAAA,mBAcwBA,QAAQ,CAACxC,WAAT,EAdxB;;AAAA;AAcIA,YAAAA,WAdJ;;AAAA;AAiBE,gBAAIwD,MAAM,CAACC,QAAP,CAAgBJ,KAAK,CAACK,UAAtB,CAAJ,EAAuC;AAC/BC,cAAAA,KAD+B,GACvB,+CAA2BvD,IAAI,CAACO,IAAhC,EAAsCP,IAAI,CAACQ,OAA3C,EAAoDyC,KAAK,CAACK,UAA1D,CADuB;AAErC1D,cAAAA,WAAW,GAAG,mCAAiB2D,KAAK,CAACrB,MAAvB,EAA+BqB,KAAK,CAACzD,UAArC,EAAiDyD,KAAK,CAACxB,UAAvD,CAAd;AACD;;AAED,gCAAOnC,WAAP,EAAoB,wBAApB;AAtBF;AAAA,mBAyB4BuD,KAAK,CAACvD,WAAD,EAAc4D,mBAAd,EAA2B,EAA3B,EAA+BtD,OAA/B,CAzBjC;;AAAA;AAyBQuD,YAAAA,WAzBR;AA8BEzD,YAAAA,IAAI,CAACgC,MAAL,GAAchC,IAAI,CAACgC,MAAL,IAAe,EAA7B;AACAhC,YAAAA,IAAI,CAACgC,MAAL,CAAYkB,KAAZ,IAAqBO,WAArB;;AA/BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","sourcesContent":["/* eslint-disable camelcase, max-statements, no-restricted-globals */\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {GLB} from '../types/glb-types';\nimport type {GLTFWithBuffers} from '../types/gltf-types';\n\nimport {ImageLoader} from '@loaders.gl/images';\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {resolveUrl} from '../gltf-utils/resolve-url';\nimport {getTypedArrayForBufferView} from '../gltf-utils/get-typed-array';\nimport {preprocessExtensions, decodeExtensions} from '../api/gltf-extensions';\nimport {normalizeGLTFV1} from '../api/normalize-gltf-v1';\nimport {postProcessGLTF} from '../api/post-process-gltf';\nimport parseGLBSync, {isGLB} from './parse-glb';\n\nexport type GLTFParseOptions = {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n postProcess?: boolean;\n excludeExtensions?: string[];\n};\n\n// export type GLTFOptions = {\n// gltf?: GLTFParseOptions;\n// };\n\nexport function isGLTF(arrayBuffer, options?): boolean {\n const byteOffset = 0;\n return isGLB(arrayBuffer, byteOffset, options);\n}\n\nexport async function parseGLTF(\n gltf: GLTFWithBuffers,\n arrayBufferOrString,\n byteOffset = 0,\n options: GLTFLoaderOptions,\n context: LoaderContext\n) {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\n\n const promises: Promise<any>[] = [];\n\n // Load linked buffers asynchronously and decodes base64 buffers in parallel\n if (options?.gltf?.loadBuffers && gltf.json.buffers) {\n await loadBuffers(gltf, options, context);\n }\n\n if (options?.gltf?.loadImages) {\n const promise = loadImages(gltf, options, context);\n promises.push(promise);\n }\n\n const promise = decodeExtensions(gltf, options, context);\n promises.push(promise);\n\n // Parallelize image loading and buffer loading/extension decoding\n await Promise.all(promises);\n\n // Post processing resolves indices to objects, buffers\n return options?.gltf?.postProcess ? postProcessGLTF(gltf, options) : gltf;\n}\n\n// `data` - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\nfunction parseGLTFContainerSync(gltf, data, byteOffset, options) {\n // Initialize gltf container\n if (options.uri) {\n gltf.baseUri = options.uri;\n }\n\n // If data is binary and starting with magic bytes, assume binary JSON text, convert to string\n if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(data);\n }\n\n if (typeof data === 'string') {\n // If string, try to parse as JSON\n gltf.json = parseJSON(data);\n } else if (data instanceof ArrayBuffer) {\n // If still ArrayBuffer, parse as GLB container\n const glb: GLB = {} as GLB;\n byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);\n\n assert(glb.type === 'glTF', `Invalid GLB magic string ${glb.type}`);\n\n gltf._glb = glb;\n gltf.json = glb.json;\n } else {\n assert(false, 'GLTF: must be ArrayBuffer or string');\n }\n\n // Populate buffers\n // Create an external buffers array to hold binary data\n const buffers = gltf.json.buffers || [];\n gltf.buffers = new Array(buffers.length).fill(null);\n\n // Populates JSON and some bin chunk info\n if (gltf._glb && gltf._glb.header.hasBinChunk) {\n const {binChunks} = gltf._glb;\n gltf.buffers[0] = {\n arrayBuffer: binChunks[0].arrayBuffer,\n byteOffset: binChunks[0].byteOffset,\n byteLength: binChunks[0].byteLength\n };\n\n // TODO - this modifies JSON and is a post processing thing\n // gltf.json.buffers[0].data = gltf.buffers[0].arrayBuffer;\n // gltf.json.buffers[0].byteOffset = gltf.buffers[0].byteOffset;\n }\n\n // Populate images\n const images = gltf.json.images || [];\n gltf.images = new Array(images.length).fill({});\n}\n\n/** Asynchronously fetch and parse buffers, store in buffers array outside of json\n * TODO - traverse gltf and determine which buffers are actually needed\n */\nasync function loadBuffers(gltf: GLTFWithBuffers, options, context: LoaderContext) {\n // TODO\n const buffers = gltf.json.buffers || [];\n for (let i = 0; i < buffers.length; ++i) {\n const buffer = buffers[i];\n if (buffer.uri) {\n const {fetch} = context;\n assert(fetch);\n\n const uri = resolveUrl(buffer.uri, options);\n const response = await context?.fetch?.(uri);\n const arrayBuffer = await response?.arrayBuffer?.();\n\n gltf.buffers[i] = {\n arrayBuffer,\n byteOffset: 0,\n byteLength: arrayBuffer.byteLength\n };\n\n delete buffer.uri;\n }\n }\n}\n\n/**\n * Loads all images\n * TODO - traverse gltf and determine which images are actually needed\n * @param gltf\n * @param options\n * @param context\n * @returns\n */\nasync function loadImages(gltf: GLTFWithBuffers, options, context: LoaderContext) {\n const imageIndices = getReferencesImageIndices(gltf);\n\n const images = gltf.json.images || [];\n\n const promises: Promise<any>[] = [];\n for (const imageIndex of imageIndices) {\n promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));\n }\n\n return await Promise.all(promises);\n}\n\n/** Make sure we only load images that are actually referenced by textures */\nfunction getReferencesImageIndices(gltf: GLTFWithBuffers): number[] {\n const imageIndices = new Set<number>();\n\n const textures = gltf.json.textures || [];\n for (const texture of textures) {\n if (texture.source !== undefined) {\n imageIndices.add(texture.source);\n }\n }\n\n return Array.from(imageIndices).sort();\n}\n\n/** Asynchronously fetches and parses one image, store in images array outside of json */\nasync function loadImage(\n gltf: GLTFWithBuffers,\n image,\n index: number,\n options,\n context: LoaderContext\n) {\n const {fetch, parse} = context;\n\n let arrayBuffer;\n\n if (image.uri) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n }\n\n if (Number.isFinite(image.bufferView)) {\n const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);\n arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);\n }\n\n assert(arrayBuffer, 'glTF image has no data');\n\n // Call `parse`\n const parsedImage = await parse(arrayBuffer, ImageLoader, {}, context);\n // TODO making sure ImageLoader is overridable by using array of loaders\n // const parsedImage = await parse(arrayBuffer, [ImageLoader]);\n\n // Store the loaded image\n gltf.images = gltf.images || [];\n gltf.images[index] = parsedImage;\n}\n"],"file":"parse-gltf.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.0.12" !== 'undefined' ? "3.0.12" : 'latest';
7
+ var VERSION = typeof "3.1.0-alpha.4" !== 'undefined' ? "3.1.0-alpha.4" : 'latest';
8
8
  exports.VERSION = VERSION;
9
9
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/version.js"],"names":["VERSION"],"mappings":";;;;;;AAGO,IAAMA,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
1
+ {"version":3,"sources":["../../../../src/lib/utils/version.js"],"names":["VERSION"],"mappings":";;;;;;AAGO,IAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.isWebPSupported = isWebPSupported;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var WEBP_TEST_IMAGES = {
15
+ lossy: 'UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA',
16
+ lossless: 'UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==',
17
+ alpha: 'UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==',
18
+ animation: 'UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA'
19
+ };
20
+ var WEBP_FEATURES = ['lossy', 'lossless', 'alpha', 'animation'];
21
+
22
+ function isWebPSupported() {
23
+ return _isWebPSupported.apply(this, arguments);
24
+ }
25
+
26
+ function _isWebPSupported() {
27
+ _isWebPSupported = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee() {
28
+ var features,
29
+ promises,
30
+ statuses,
31
+ _args = arguments;
32
+ return _regenerator.default.wrap(function _callee$(_context) {
33
+ while (1) {
34
+ switch (_context.prev = _context.next) {
35
+ case 0:
36
+ features = _args.length > 0 && _args[0] !== undefined ? _args[0] : WEBP_FEATURES;
37
+ promises = features.map(function (feature) {
38
+ return checkWebPFeature(feature);
39
+ });
40
+ _context.next = 4;
41
+ return Promise.all(promises);
42
+
43
+ case 4:
44
+ statuses = _context.sent;
45
+ return _context.abrupt("return", statuses.every(function (_) {
46
+ return _;
47
+ }));
48
+
49
+ case 6:
50
+ case "end":
51
+ return _context.stop();
52
+ }
53
+ }
54
+ }, _callee);
55
+ }));
56
+ return _isWebPSupported.apply(this, arguments);
57
+ }
58
+
59
+ function checkWebPFeature(_x) {
60
+ return _checkWebPFeature.apply(this, arguments);
61
+ }
62
+
63
+ function _checkWebPFeature() {
64
+ _checkWebPFeature = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(feature) {
65
+ return _regenerator.default.wrap(function _callee2$(_context2) {
66
+ while (1) {
67
+ switch (_context2.prev = _context2.next) {
68
+ case 0:
69
+ if (!(typeof Image === 'undefined')) {
70
+ _context2.next = 2;
71
+ break;
72
+ }
73
+
74
+ return _context2.abrupt("return", false);
75
+
76
+ case 2:
77
+ _context2.next = 4;
78
+ return new Promise(function (resolve, reject) {
79
+ var img = new Image();
80
+
81
+ img.onload = function () {
82
+ return resolve(img.width > 0 && img.height > 0);
83
+ };
84
+
85
+ img.onerror = function () {
86
+ return resolve(false);
87
+ };
88
+
89
+ img.src = "data:image/webp;base64,".concat(WEBP_TEST_IMAGES[feature]);
90
+ });
91
+
92
+ case 4:
93
+ return _context2.abrupt("return", _context2.sent);
94
+
95
+ case 5:
96
+ case "end":
97
+ return _context2.stop();
98
+ }
99
+ }
100
+ }, _callee2);
101
+ }));
102
+ return _checkWebPFeature.apply(this, arguments);
103
+ }
104
+ //# sourceMappingURL=webp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/webp/webp.ts"],"names":["WEBP_TEST_IMAGES","lossy","lossless","alpha","animation","WEBP_FEATURES","isWebPSupported","features","promises","map","feature","checkWebPFeature","Promise","all","statuses","every","_","Image","resolve","reject","img","onload","width","height","onerror","src"],"mappings":";;;;;;;;;;;;;AAAA,IAAMA,gBAAgB,GAAG;AACvBC,EAAAA,KAAK,EAAE,0DADgB;AAEvBC,EAAAA,QAAQ,EAAE,kDAFa;AAGvBC,EAAAA,KAAK,EACH,kHAJqB;AAKvBC,EAAAA,SAAS,EACP;AANqB,CAAzB;AAWA,IAAMC,aAA4B,GAAG,CAAC,OAAD,EAAU,UAAV,EAAsB,OAAtB,EAA+B,WAA/B,CAArC;;SAMsBC,e;;;;;+EAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+BC,YAAAA,QAA/B,2DAAyDF,aAAzD;AACCG,YAAAA,QADD,GACYD,QAAQ,CAACE,GAAT,CAAa,UAACC,OAAD;AAAA,qBAAaC,gBAAgB,CAACD,OAAD,CAA7B;AAAA,aAAb,CADZ;AAAA;AAAA,mBAEkBE,OAAO,CAACC,GAAR,CAAYL,QAAZ,CAFlB;;AAAA;AAECM,YAAAA,QAFD;AAAA,6CAGEA,QAAQ,CAACC,KAAT,CAAe,UAACC,CAAD;AAAA,qBAAOA,CAAP;AAAA,aAAf,CAHF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAaQL,gB;;;;;gFAAf,kBAAgCD,OAAhC;AAAA;AAAA;AAAA;AAAA;AAAA,kBACM,OAAOO,KAAP,KAAiB,WADvB;AAAA;AAAA;AAAA;;AAAA,8CAEW,KAFX;;AAAA;AAAA;AAAA,mBAIe,IAAIL,OAAJ,CAAY,UAACM,OAAD,EAAUC,MAAV,EAAqB;AAC5C,kBAAMC,GAAG,GAAG,IAAIH,KAAJ,EAAZ;;AACAG,cAAAA,GAAG,CAACC,MAAJ,GAAa;AAAA,uBAAMH,OAAO,CAACE,GAAG,CAACE,KAAJ,GAAY,CAAZ,IAAiBF,GAAG,CAACG,MAAJ,GAAa,CAA/B,CAAb;AAAA,eAAb;;AACAH,cAAAA,GAAG,CAACI,OAAJ,GAAc;AAAA,uBAAMN,OAAO,CAAC,KAAD,CAAb;AAAA,eAAd;;AACAE,cAAAA,GAAG,CAACK,GAAJ,oCAAoCzB,gBAAgB,CAACU,OAAD,CAApD;AACD,aALY,CAJf;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","sourcesContent":["const WEBP_TEST_IMAGES = {\n lossy: 'UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA',\n lossless: 'UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==',\n alpha:\n 'UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==',\n animation:\n 'UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA'\n};\n\nexport type WebPFeature = 'lossy' | 'lossless' | 'alpha' | 'animation';\n\nconst WEBP_FEATURES: WebPFeature[] = ['lossy', 'lossless', 'alpha', 'animation'];\n\n/**\n * Checks if WebP is supported\n * @param features Array, can include 'lossy', 'lossless', 'alpha' or 'animation'\n */\nexport async function isWebPSupported(features: WebPFeature[] = WEBP_FEATURES): Promise<boolean> {\n const promises = features.map((feature) => checkWebPFeature(feature));\n const statuses = await Promise.all(promises);\n return statuses.every((_) => _);\n}\n\n/**\n * Checks if a specific WebP feature is supported\n * @param feature 'feature' can be one of 'lossy', 'lossless', 'alpha' or 'animation'.\n *\n * Based on Google's official recommended checks\n * @see https://developers.google.com/speed/webp/faq#how_can_i_detect_browser_support_for_webp\n */\nasync function checkWebPFeature(feature: WebPFeature): Promise<boolean> {\n if (typeof Image === 'undefined') {\n return false;\n }\n return await new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img.width > 0 && img.height > 0);\n img.onerror = () => resolve(false);\n img.src = `data:image/webp;base64,${WEBP_TEST_IMAGES[feature]}`;\n });\n}\n"],"file":"webp.js"}
@@ -1,7 +1,5 @@
1
1
  const moduleExports = require('./index');
2
2
 
3
- const _global = typeof window === 'undefined' ? global : window;
4
-
5
- _global.loaders = _global.loaders || {};
6
- module.exports = Object.assign(_global.loaders, moduleExports);
3
+ globalThis.loaders = globalThis.loaders || {};
4
+ module.exports = Object.assign(globalThis.loaders, moduleExports);
7
5
  //# sourceMappingURL=bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","_global","window","global","loaders","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACA,MAAMC,OAAO,GAAG,OAAOC,MAAP,KAAkB,WAAlB,GAAgCC,MAAhC,GAAyCD,MAAzD;;AACAD,OAAO,CAACG,OAAR,GAAkBH,OAAO,CAACG,OAAR,IAAmB,EAArC;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcP,OAAO,CAACG,OAAtB,EAA+BL,aAA/B,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nconst _global = typeof window === 'undefined' ? global : window;\n_global.loaders = _global.loaders || {};\nmodule.exports = Object.assign(_global.loaders, moduleExports);\n"],"file":"bundle.js"}
1
+ {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/gltf-loader.ts"],"names":["VERSION","parseGLTF","GLTFLoader","name","id","module","version","extensions","mimeTypes","text","binary","tests","parse","options","gltf","normalize","loadBuffers","loadImages","decompressMeshes","postProcess","log","console","deprecatedOptions","fetchImages","createImages","decompress","arrayBuffer","context","byteOffset"],"mappings":"AAKA,SAAQA,OAAR,QAAsB,qBAAtB;AACA,SAAQC,SAAR,QAAwB,0BAAxB;AAeA,OAAO,MAAMC,UAA4B,GAAG;AAC1CC,EAAAA,IAAI,EAAE,MADoC;AAE1CC,EAAAA,EAAE,EAAE,MAFsC;AAG1CC,EAAAA,MAAM,EAAE,MAHkC;AAI1CC,EAAAA,OAAO,EAAEN,OAJiC;AAK1CO,EAAAA,UAAU,EAAE,CAAC,MAAD,EAAS,KAAT,CAL8B;AAM1CC,EAAAA,SAAS,EAAE,CAAC,iBAAD,EAAoB,mBAApB,CAN+B;AAQ1CC,EAAAA,IAAI,EAAE,IARoC;AAS1CC,EAAAA,MAAM,EAAE,IATkC;AAU1CC,EAAAA,KAAK,EAAE,CAAC,MAAD,CAVmC;AAW1CC,EAAAA,KAX0C;AAa1CC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AACJC,MAAAA,SAAS,EAAE,IADP;AAEJC,MAAAA,WAAW,EAAE,IAFT;AAGJC,MAAAA,UAAU,EAAE,IAHR;AAIJC,MAAAA,gBAAgB,EAAE,IAJd;AAKJC,MAAAA,WAAW,EAAE;AALT,KADC;AAUPC,IAAAA,GAAG,EAAEC;AAVE,GAbiC;AAyB1CC,EAAAA,iBAAiB,EAAE;AACjBC,IAAAA,WAAW,EAAE,iBADI;AAEjBC,IAAAA,YAAY,EAAE,iBAFG;AAGjBC,IAAAA,UAAU,EAAE,uBAHK;AAIjBN,IAAAA,WAAW,EAAE,kBAJI;AAKjBL,IAAAA,IAAI,EAAE;AACJW,MAAAA,UAAU,EAAE;AADR;AALW;AAzBuB,CAArC;AAoCP,OAAO,eAAeb,KAAf,CAAqBc,WAArB,EAAkCb,OAA0B,GAAG,EAA/D,EAAmEc,OAAnE,EAA4E;AAEjFd,EAAAA,OAAO,GAAG,EAAC,GAAGX,UAAU,CAACW,OAAf;AAAwB,OAAGA;AAA3B,GAAV;AAEAA,EAAAA,OAAO,CAACC,IAAR,GAAe,EAAC,GAAGZ,UAAU,CAACW,OAAX,CAAmBC,IAAvB;AAA6B,OAAGD,OAAO,CAACC;AAAxC,GAAf;AAEA,QAAM;AAACc,IAAAA,UAAU,GAAG;AAAd,MAAmBf,OAAzB;AACA,QAAMC,IAAI,GAAG,EAAb;AACA,SAAO,MAAMb,SAAS,CAACa,IAAD,EAAOY,WAAP,EAAoBE,UAApB,EAAgCf,OAAhC,EAAyCc,OAAzC,CAAtB;AACD","sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {DracoLoaderOptions} from '@loaders.gl/draco';\n// import type {ImageLoaderOptions} from '@loaders.gl/images';\n// import type {TextureLoaderOptions} from '@loaders.gl/textures';\nimport type {GLTFParseOptions} from './lib/parsers/parse-gltf';\nimport {VERSION} from './lib/utils/version';\nimport {parseGLTF} from './lib/parsers/parse-gltf';\nimport {GLBLoaderOptions} from './glb-loader';\n\n/**\n * GLTF loader options\n */\nexport type GLTFLoaderOptions = LoaderOptions &\n GLBLoaderOptions &\n DracoLoaderOptions & {\n gltf?: GLTFParseOptions;\n };\n\n/**\n * GLTF loader\n */\nexport const GLTFLoader: LoaderWithParser = {\n name: 'glTF',\n id: 'gltf',\n module: 'gltf',\n version: VERSION,\n extensions: ['gltf', 'glb'],\n mimeTypes: ['model/gltf+json', 'model/gltf-binary'],\n\n text: true,\n binary: true,\n tests: ['glTF'],\n parse,\n\n options: {\n gltf: {\n normalize: true, // Normalize glTF v1 to glTF v2 format (not yet stable)\n loadBuffers: true, // Fetch any linked .BIN buffers, decode base64\n loadImages: true, // Create image objects\n decompressMeshes: true, // Decompress Draco encoded meshes\n postProcess: true // Postprocess glTF and return json structure directly\n },\n\n // common?\n log: console // eslint-disable-line\n },\n deprecatedOptions: {\n fetchImages: 'gltf.loadImages',\n createImages: 'gltf.loadImages',\n decompress: 'gltf.decompressMeshes',\n postProcess: 'gltf.postProcess',\n gltf: {\n decompress: 'gltf.decompressMeshes'\n }\n }\n};\n\nexport async function parse(arrayBuffer, options: GLTFLoaderOptions = {}, context) {\n // Apps can call the parse method directly, we so apply default options here\n options = {...GLTFLoader.options, ...options};\n // @ts-ignore\n options.gltf = {...GLTFLoader.options.gltf, ...options.gltf};\n\n const {byteOffset = 0} = options;\n const gltf = {};\n return await parseGLTF(gltf, arrayBuffer, byteOffset, options, context);\n}\n"],"file":"gltf-loader.js"}
1
+ {"version":3,"sources":["../../src/gltf-loader.ts"],"names":["VERSION","parseGLTF","GLTFLoader","name","id","module","version","extensions","mimeTypes","text","binary","tests","parse","options","gltf","normalize","loadBuffers","loadImages","decompressMeshes","postProcess","log","console","deprecatedOptions","fetchImages","createImages","decompress","arrayBuffer","context","byteOffset"],"mappings":"AAEA,SAAQA,OAAR,QAAsB,qBAAtB;AAKA,SAAQC,SAAR,QAAwB,0BAAxB;AAiBA,OAAO,MAAMC,UAA4B,GAAG;AAC1CC,EAAAA,IAAI,EAAE,MADoC;AAE1CC,EAAAA,EAAE,EAAE,MAFsC;AAG1CC,EAAAA,MAAM,EAAE,MAHkC;AAI1CC,EAAAA,OAAO,EAAEN,OAJiC;AAK1CO,EAAAA,UAAU,EAAE,CAAC,MAAD,EAAS,KAAT,CAL8B;AAM1CC,EAAAA,SAAS,EAAE,CAAC,iBAAD,EAAoB,mBAApB,CAN+B;AAQ1CC,EAAAA,IAAI,EAAE,IARoC;AAS1CC,EAAAA,MAAM,EAAE,IATkC;AAU1CC,EAAAA,KAAK,EAAE,CAAC,MAAD,CAVmC;AAW1CC,EAAAA,KAX0C;AAa1CC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AACJC,MAAAA,SAAS,EAAE,IADP;AAEJC,MAAAA,WAAW,EAAE,IAFT;AAGJC,MAAAA,UAAU,EAAE,IAHR;AAIJC,MAAAA,gBAAgB,EAAE,IAJd;AAKJC,MAAAA,WAAW,EAAE;AALT,KADC;AAUPC,IAAAA,GAAG,EAAEC;AAVE,GAbiC;AAyB1CC,EAAAA,iBAAiB,EAAE;AACjBC,IAAAA,WAAW,EAAE,iBADI;AAEjBC,IAAAA,YAAY,EAAE,iBAFG;AAGjBC,IAAAA,UAAU,EAAE,uBAHK;AAIjBN,IAAAA,WAAW,EAAE,kBAJI;AAKjBL,IAAAA,IAAI,EAAE;AACJW,MAAAA,UAAU,EAAE;AADR;AALW;AAzBuB,CAArC;AAoCP,OAAO,eAAeb,KAAf,CAAqBc,WAArB,EAAkCb,OAA0B,GAAG,EAA/D,EAAmEc,OAAnE,EAA4E;AAEjFd,EAAAA,OAAO,GAAG,EAAC,GAAGX,UAAU,CAACW,OAAf;AAAwB,OAAGA;AAA3B,GAAV;AAEAA,EAAAA,OAAO,CAACC,IAAR,GAAe,EAAC,GAAGZ,UAAU,CAACW,OAAX,CAAmBC,IAAvB;AAA6B,OAAGD,OAAO,CAACC;AAAxC,GAAf;AAEA,QAAM;AAACc,IAAAA,UAAU,GAAG;AAAd,MAAmBf,OAAzB;AACA,QAAMC,IAAI,GAAG,EAAb;AACA,SAAO,MAAMb,SAAS,CAACa,IAAD,EAA0BY,WAA1B,EAAuCE,UAAvC,EAAmDf,OAAnD,EAA4Dc,OAA5D,CAAtB;AACD","sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {DracoLoaderOptions} from '@loaders.gl/draco';\nimport {VERSION} from './lib/utils/version';\nimport type {ImageLoaderOptions} from '@loaders.gl/images';\nimport type {TextureLoaderOptions} from '@loaders.gl/textures';\nimport type {GLTFParseOptions} from './lib/parsers/parse-gltf';\nimport type {GLTFWithBuffers} from './lib/types/gltf-types';\nimport {parseGLTF} from './lib/parsers/parse-gltf';\nimport {GLBLoaderOptions} from './glb-loader';\n\n/**\n * GLTF loader options\n */\nexport type GLTFLoaderOptions = LoaderOptions &\n ImageLoaderOptions &\n TextureLoaderOptions &\n GLBLoaderOptions &\n DracoLoaderOptions & {\n gltf?: GLTFParseOptions;\n };\n\n/**\n * GLTF loader\n */\nexport const GLTFLoader: LoaderWithParser = {\n name: 'glTF',\n id: 'gltf',\n module: 'gltf',\n version: VERSION,\n extensions: ['gltf', 'glb'],\n mimeTypes: ['model/gltf+json', 'model/gltf-binary'],\n\n text: true,\n binary: true,\n tests: ['glTF'],\n parse,\n\n options: {\n gltf: {\n normalize: true, // Normalize glTF v1 to glTF v2 format (not yet stable)\n loadBuffers: true, // Fetch any linked .BIN buffers, decode base64\n loadImages: true, // Create image objects\n decompressMeshes: true, // Decompress Draco encoded meshes\n postProcess: true // Postprocess glTF and return json structure directly\n },\n\n // common?\n log: console // eslint-disable-line\n },\n deprecatedOptions: {\n fetchImages: 'gltf.loadImages',\n createImages: 'gltf.loadImages',\n decompress: 'gltf.decompressMeshes',\n postProcess: 'gltf.postProcess',\n gltf: {\n decompress: 'gltf.decompressMeshes'\n }\n }\n};\n\nexport async function parse(arrayBuffer, options: GLTFLoaderOptions = {}, context) {\n // Apps can call the parse method directly, we so apply default options here\n options = {...GLTFLoader.options, ...options};\n // @ts-ignore\n options.gltf = {...GLTFLoader.options.gltf, ...options.gltf};\n\n const {byteOffset = 0} = options;\n const gltf = {};\n return await parseGLTF(gltf as GLTFWithBuffers, arrayBuffer, byteOffset, options, context);\n}\n"],"file":"gltf-loader.js"}
package/dist/esm/index.js CHANGED
@@ -1,4 +1,3 @@
1
- export { KHR_DRACO_MESH_COMPRESSION } from './lib/gltf-utils/gltf-constants';
2
1
  export { GLTFLoader } from './gltf-loader';
3
2
  export { GLTFWriter } from './gltf-writer';
4
3
  export { GLBLoader } from './glb-loader';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["KHR_DRACO_MESH_COMPRESSION","GLTFLoader","GLTFWriter","GLBLoader","GLBWriter","default","GLTFScenegraph","postProcessGLTF"],"mappings":"AAkBA,SAAQA,0BAAR,QAAyC,iCAAzC;AAGA,SAAQC,UAAR,QAAyB,eAAzB;AACA,SAAQC,UAAR,QAAyB,eAAzB;AAGA,SAAQC,SAAR,QAAwB,cAAxB;AACA,SAAQC,SAAR,QAAwB,cAAxB;AAGA,SAAQC,OAAO,IAAIC,cAAnB,QAAwC,2BAAxC;AACA,SAAQC,eAAR,QAA8B,6BAA9B","sourcesContent":["export type {GLB} from './lib/types/glb-types';\nexport type {\n GLTF,\n GLTFAccessor,\n GLTFBuffer,\n GLTFBufferView,\n GLTFMeshPrimitive,\n GLTFMesh,\n GLTFNode,\n GLTFMaterial,\n GLTFSampler,\n GLTFScene,\n GLTFSkin,\n GLTFTexture,\n GLTFImage\n} from './lib/types/gltf-types';\n\n// Constants\nexport {KHR_DRACO_MESH_COMPRESSION} from './lib/gltf-utils/gltf-constants';\n\n// glTF loader/writer definition objects\nexport {GLTFLoader} from './gltf-loader';\nexport {GLTFWriter} from './gltf-writer';\n\n// GLB Loader & Writer (for custom formats that want to leverage the GLB binary \"envelope\")\nexport {GLBLoader} from './glb-loader';\nexport {GLBWriter} from './glb-writer';\n\n// glTF Data Access Helper Class\nexport {default as GLTFScenegraph} from './lib/api/gltf-scenegraph';\nexport {postProcessGLTF} from './lib/api/post-process-gltf';\nexport type {Mesh} from './lib/types/gltf-json-schema';\nexport type {GLTFObject} from './lib/types/gltf-types';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":["GLTFLoader","GLTFWriter","GLBLoader","GLBWriter","default","GLTFScenegraph","postProcessGLTF"],"mappings":"AAyBA,SAAQA,UAAR,QAAyB,eAAzB;AACA,SAAQC,UAAR,QAAyB,eAAzB;AAGA,SAAQC,SAAR,QAAwB,cAAxB;AACA,SAAQC,SAAR,QAAwB,cAAxB;AAGA,SAAQC,OAAO,IAAIC,cAAnB,QAAwC,2BAAxC;AACA,SAAQC,eAAR,QAA8B,6BAA9B","sourcesContent":["/* eslint-disable camelcase, indent */\nexport type {GLB} from './lib/types/glb-types';\nexport type {\n GLTF,\n GLTFAccessor,\n GLTFBuffer,\n GLTFBufferView,\n GLTFMeshPrimitive,\n GLTFMesh,\n GLTFNode,\n GLTFMaterial,\n GLTFSampler,\n GLTFScene,\n GLTFSkin,\n GLTFTexture,\n GLTFImage,\n // The following extensions are handled by the GLTFLoader and removed from the parsed glTF (disable via options.gltf.excludeExtensions)\n GLTF_KHR_binary_glTF,\n GLTF_KHR_draco_mesh_compression,\n GLTF_KHR_texture_basisu,\n GLTF_EXT_meshopt_compression,\n GLTF_EXT_texture_webp\n} from './lib/types/gltf-types';\n\n// glTF loader/writer definition objects\nexport {GLTFLoader} from './gltf-loader';\nexport {GLTFWriter} from './gltf-writer';\n\n// GLB Loader & Writer (for custom formats that want to leverage the GLB binary \"envelope\")\nexport {GLBLoader} from './glb-loader';\nexport {GLBWriter} from './glb-writer';\n\n// glTF Data Access Helper Class\nexport {default as GLTFScenegraph} from './lib/api/gltf-scenegraph';\nexport {postProcessGLTF} from './lib/api/post-process-gltf';\nexport type {Mesh} from './lib/types/gltf-json-schema';\nexport type {GLTFObject} from './lib/types/gltf-types';\n"],"file":"index.js"}
@@ -0,0 +1,35 @@
1
+ import * as EXT_meshopt_compression from '../extensions/EXT_meshopt_compression';
2
+ import * as EXT_texture_webp from '../extensions/EXT_texture_webp';
3
+ import * as KHR_texture_basisu from '../extensions/KHR_texture_basisu';
4
+ import * as KHR_draco_mesh_compression from '../extensions/KHR_draco_mesh_compression';
5
+ import * as KHR_lights_punctual from '../extensions/deprecated/KHR_lights_punctual';
6
+ import * as KHR_materials_unlit from '../extensions/deprecated/KHR_materials_unlit';
7
+ import * as KHR_techniques_webgl from '../extensions/deprecated/KHR_techniques_webgl';
8
+ export const EXTENSIONS = [EXT_meshopt_compression, EXT_texture_webp, KHR_texture_basisu, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_unlit, KHR_techniques_webgl];
9
+ export function preprocessExtensions(gltf, options = {}, context) {
10
+ const extensions = EXTENSIONS.filter(extension => useExtension(extension.name, options));
11
+
12
+ for (const extension of extensions) {
13
+ var _extension$preprocess;
14
+
15
+ (_extension$preprocess = extension.preprocess) === null || _extension$preprocess === void 0 ? void 0 : _extension$preprocess.call(extension, gltf, options, context);
16
+ }
17
+ }
18
+ export async function decodeExtensions(gltf, options = {}, context) {
19
+ const extensions = EXTENSIONS.filter(extension => useExtension(extension.name, options));
20
+
21
+ for (const extension of extensions) {
22
+ var _extension$decode;
23
+
24
+ await ((_extension$decode = extension.decode) === null || _extension$decode === void 0 ? void 0 : _extension$decode.call(extension, gltf, options, context));
25
+ }
26
+ }
27
+
28
+ function useExtension(extensionName, options) {
29
+ var _options$gltf;
30
+
31
+ const excludes = (options === null || options === void 0 ? void 0 : (_options$gltf = options.gltf) === null || _options$gltf === void 0 ? void 0 : _options$gltf.excludeExtensions) || {};
32
+ const exclude = extensionName in excludes && !excludes[extensionName];
33
+ return !exclude;
34
+ }
35
+ //# sourceMappingURL=gltf-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/api/gltf-extensions.ts"],"names":["EXT_meshopt_compression","EXT_texture_webp","KHR_texture_basisu","KHR_draco_mesh_compression","KHR_lights_punctual","KHR_materials_unlit","KHR_techniques_webgl","EXTENSIONS","preprocessExtensions","gltf","options","context","extensions","filter","extension","useExtension","name","preprocess","decodeExtensions","decode","extensionName","excludes","excludeExtensions","exclude"],"mappings":"AAQA,OAAO,KAAKA,uBAAZ,MAAyC,uCAAzC;AACA,OAAO,KAAKC,gBAAZ,MAAkC,gCAAlC;AACA,OAAO,KAAKC,kBAAZ,MAAoC,kCAApC;AACA,OAAO,KAAKC,0BAAZ,MAA4C,0CAA5C;AAGA,OAAO,KAAKC,mBAAZ,MAAqC,8CAArC;AACA,OAAO,KAAKC,mBAAZ,MAAqC,8CAArC;AACA,OAAO,KAAKC,oBAAZ,MAAsC,+CAAtC;AAgBA,OAAO,MAAMC,UAAiC,GAAG,CAM/CP,uBAN+C,EAO/CC,gBAP+C,EAS/CC,kBAT+C,EAU/CC,0BAV+C,EAW/CC,mBAX+C,EAY/CC,mBAZ+C,EAa/CC,oBAb+C,CAA1C;AAiBP,OAAO,SAASE,oBAAT,CAA8BC,IAA9B,EAAoCC,OAA0B,GAAG,EAAjE,EAAqEC,OAArE,EAA+E;AACpF,QAAMC,UAAU,GAAGL,UAAU,CAACM,MAAX,CAAmBC,SAAD,IAAeC,YAAY,CAACD,SAAS,CAACE,IAAX,EAAiBN,OAAjB,CAA7C,CAAnB;;AACA,OAAK,MAAMI,SAAX,IAAwBF,UAAxB,EAAoC;AAAA;;AAClC,6BAAAE,SAAS,CAACG,UAAV,qFAAAH,SAAS,EAAcL,IAAd,EAAoBC,OAApB,EAA6BC,OAA7B,CAAT;AACD;AACF;AAGD,OAAO,eAAeO,gBAAf,CAAgCT,IAAhC,EAAsCC,OAA0B,GAAG,EAAnE,EAAuEC,OAAvE,EAAiF;AACtF,QAAMC,UAAU,GAAGL,UAAU,CAACM,MAAX,CAAmBC,SAAD,IAAeC,YAAY,CAACD,SAAS,CAACE,IAAX,EAAiBN,OAAjB,CAA7C,CAAnB;;AACA,OAAK,MAAMI,SAAX,IAAwBF,UAAxB,EAAoC;AAAA;;AAGlC,gCAAME,SAAS,CAACK,MAAhB,sDAAM,uBAAAL,SAAS,EAAUL,IAAV,EAAgBC,OAAhB,EAAyBC,OAAzB,CAAf;AACD;AACF;;AAED,SAASI,YAAT,CAAsBK,aAAtB,EAA6CV,OAA7C,EAAyE;AAAA;;AACvE,QAAMW,QAAQ,GAAG,CAAAX,OAAO,SAAP,IAAAA,OAAO,WAAP,6BAAAA,OAAO,CAAED,IAAT,gEAAea,iBAAf,KAAoC,EAArD;AACA,QAAMC,OAAO,GAAGH,aAAa,IAAIC,QAAjB,IAA6B,CAACA,QAAQ,CAACD,aAAD,CAAtD;AACA,SAAO,CAACG,OAAR;AACD","sourcesContent":["/* eslint-disable camelcase */\nimport {GLTF} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\n// GLTF 1.0 extensions (decode only)\n// import * as KHR_binary_gltf from './KHR_draco_mesh_compression';\n\n// GLTF 2.0 Khronos extensions (decode/encode)\nimport * as EXT_meshopt_compression from '../extensions/EXT_meshopt_compression';\nimport * as EXT_texture_webp from '../extensions/EXT_texture_webp';\nimport * as KHR_texture_basisu from '../extensions/KHR_texture_basisu';\nimport * as KHR_draco_mesh_compression from '../extensions/KHR_draco_mesh_compression';\n\n// Deprecated. These should be handled by rendering library (e.g. luma.gl), not the loader.\nimport * as KHR_lights_punctual from '../extensions/deprecated/KHR_lights_punctual';\nimport * as KHR_materials_unlit from '../extensions/deprecated/KHR_materials_unlit';\nimport * as KHR_techniques_webgl from '../extensions/deprecated/KHR_techniques_webgl';\n\n// Vendor extensions\n\ntype GLTFExtensionPlugin = {\n name: string;\n preprocess?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions, context) => void;\n decode?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions, context) => Promise<void>;\n encode?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions) => void;\n};\n\n/**\n * List of extensions processed by the GLTFLoader\n * Note that may extensions can only be handled on the rendering stage and are left out here\n * These are just extensions that can be handled fully or partially during loading.\n */\nexport const EXTENSIONS: GLTFExtensionPlugin[] = [\n // 1.0\n // KHR_binary_gltf is handled separately - must be processed before other parsing starts\n // KHR_binary_gltf,\n\n // 2.0\n EXT_meshopt_compression,\n EXT_texture_webp,\n // Basisu should come after webp, we want basisu to be preferred if both are provided\n KHR_texture_basisu,\n KHR_draco_mesh_compression,\n KHR_lights_punctual,\n KHR_materials_unlit,\n KHR_techniques_webgl\n];\n\n/** Call before any resource loading starts */\nexport function preprocessExtensions(gltf, options: GLTFLoaderOptions = {}, context?) {\n const extensions = EXTENSIONS.filter((extension) => useExtension(extension.name, options));\n for (const extension of extensions) {\n extension.preprocess?.(gltf, options, context);\n }\n}\n\n/** Call after resource loading */\nexport async function decodeExtensions(gltf, options: GLTFLoaderOptions = {}, context?) {\n const extensions = EXTENSIONS.filter((extension) => useExtension(extension.name, options));\n for (const extension of extensions) {\n // Note: We decode async extensions sequentially, this might not be necessary\n // Currently we only have Draco, but when we add Basis we may revisit\n await extension.decode?.(gltf, options, context);\n }\n}\n\nfunction useExtension(extensionName: string, options: GLTFLoaderOptions) {\n const excludes = options?.gltf?.excludeExtensions || {};\n const exclude = extensionName in excludes && !excludes[extensionName];\n return !exclude;\n}\n"],"file":"gltf-extensions.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/api/gltf-scenegraph.ts"],"names":["getBinaryImageMetadata","padToNBytes","copyToArray","assert","getAccessorArrayTypeAndLength","getAccessorTypeFromSize","getComponentTypeFromArray","DEFAULT_GLTF_JSON","asset","version","generator","buffers","GLTFScenegraph","constructor","gltf","json","sourceBuffers","byteLength","getApplicationData","key","data","getExtraData","extras","getExtension","extensionName","isExtension","getUsedExtensions","find","name","extensions","getRequiredExtension","isRequired","getRequiredExtensions","extensionsRequired","extensionsUsed","getObjectExtension","object","getScene","index","getObject","getNode","getSkin","getMesh","getMaterial","getAccessor","getTexture","getSampler","getImage","getBufferView","getBuffer","array","Error","getTypedArrayForBufferView","bufferView","bufferIndex","buffer","binChunk","byteOffset","Uint8Array","arrayBuffer","getTypedArrayForAccessor","accessor","ArrayType","length","getTypedArrayForImageData","image","addApplicationData","addExtraData","addObjectExtension","registerUsedExtension","setObjectExtension","removeObjectExtension","extension","addExtension","extensionData","addRequiredExtension","registerRequiredExtension","ext","push","removeExtension","_removeStringFromArray","setDefaultScene","sceneIndex","scene","addScene","nodeIndices","scenes","nodes","addNode","node","meshIndex","matrix","nodeData","mesh","addMesh","attributes","indices","material","mode","accessors","_addAttributes","glTFMesh","primitives","indicesAccessor","_addIndices","Number","isFinite","meshes","addPointCloud","accessorIndices","addImage","imageData","mimeTypeOpt","metadata","mimeType","bufferViewIndex","addBufferView","glTFImage","images","glTFBufferView","bufferViews","addAccessor","glTFAccessor","type","size","componentType","count","max","min","addBinaryBuffer","sourceBuffer","minMax","_getAccessorMinMax","accessorDefaults","Math","round","Object","assign","addTexture","texture","imageIndex","glTFTexture","source","textures","addMaterial","pbrMaterialInfo","materials","createBinaryChunk","totalByteLength","ArrayBuffer","targetArray","dstByteOffset","binary","string","found","indexOf","splice","result","attributeKey","attributeData","attrName","_getGltfAttributeName","value","attributeName","toLowerCase","initValues","subarray","componentIndex"],"mappings":"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","sourcesContent":["import type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView\n} from '../types/gltf-types';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\ntype GLTFWithBuffers = {\n json: GLTF;\n buffers: any[];\n binary?: ArrayBuffer;\n};\n\nconst DEFAULT_GLTF_JSON: GLTF = {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: []\n};\n\n/**\n * Class for structured access to GLTF data\n */\nexport default class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n constructor(gltf?: {json: GLTF; buffers?: any[]}) {\n // @ts-ignore\n this.gltf = gltf || {\n json: {...DEFAULT_GLTF_JSON},\n buffers: []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): {[key: string]: any} {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: any} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n getExtension(extensionName: string): {[key: string]: any} | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? extensions[extensionName] || true : null;\n }\n\n getRequiredExtension(extensionName: string): {[key: string]: any} | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getObjectExtension(\n object: {[key: string]: any},\n extensionName: string\n ): {[key: string]: any} | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && this.json[array][index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n this.json.extras[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: object, extensionName: string, data: object): void {\n // @ts-ignore\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: object, extensionName: string): object {\n // @ts-ignore\n const extensions = object.extensions || {};\n const extension = extensions[extensionName];\n delete extensions[extensionName];\n return extension;\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices: object; material: number; mode: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: 0,\n // Write offset from the start of the binary body\n byteOffset: this.byteLength,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n"],"file":"gltf-scenegraph.js"}
1
+ {"version":3,"sources":["../../../../src/lib/api/gltf-scenegraph.ts"],"names":["getBinaryImageMetadata","padToNBytes","copyToArray","assert","getAccessorArrayTypeAndLength","getAccessorTypeFromSize","getComponentTypeFromArray","DEFAULT_GLTF_JSON","asset","version","generator","buffers","GLTFScenegraph","constructor","gltf","json","sourceBuffers","byteLength","getApplicationData","key","data","getExtraData","extras","getExtension","extensionName","isExtension","getUsedExtensions","find","name","extensions","getRequiredExtension","isRequired","getRequiredExtensions","extensionsRequired","extensionsUsed","getObjectExtension","object","getScene","index","getObject","getNode","getSkin","getMesh","getMaterial","getAccessor","getTexture","getSampler","getImage","getBufferView","getBuffer","array","Error","getTypedArrayForBufferView","bufferView","bufferIndex","buffer","binChunk","byteOffset","Uint8Array","arrayBuffer","getTypedArrayForAccessor","accessor","ArrayType","length","getTypedArrayForImageData","image","addApplicationData","addExtraData","addObjectExtension","registerUsedExtension","setObjectExtension","removeObjectExtension","extension","addExtension","extensionData","addRequiredExtension","registerRequiredExtension","ext","push","removeExtension","_removeStringFromArray","setDefaultScene","sceneIndex","scene","addScene","nodeIndices","scenes","nodes","addNode","node","meshIndex","matrix","nodeData","mesh","addMesh","attributes","indices","material","mode","accessors","_addAttributes","glTFMesh","primitives","indicesAccessor","_addIndices","Number","isFinite","meshes","addPointCloud","accessorIndices","addImage","imageData","mimeTypeOpt","metadata","mimeType","bufferViewIndex","addBufferView","glTFImage","images","glTFBufferView","bufferViews","addAccessor","glTFAccessor","type","size","componentType","count","max","min","addBinaryBuffer","sourceBuffer","minMax","_getAccessorMinMax","accessorDefaults","Math","round","Object","assign","addTexture","texture","imageIndex","glTFTexture","source","textures","addMaterial","pbrMaterialInfo","materials","createBinaryChunk","totalByteLength","ArrayBuffer","targetArray","dstByteOffset","binary","string","found","indexOf","splice","result","attributeKey","attributeData","attrName","_getGltfAttributeName","value","attributeName","toLowerCase","initValues","subarray","componentIndex"],"mappings":"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","sourcesContent":["import type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView\n} from '../types/gltf-types';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\ntype GLTFWithBuffers = {\n json: GLTF;\n buffers: any[];\n binary?: ArrayBuffer;\n};\n\nconst DEFAULT_GLTF_JSON: GLTF = {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: []\n};\n\ntype Extension = {[key: string]: any};\n/**\n * Class for structured access to GLTF data\n */\nexport default class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n constructor(gltf?: {json: GLTF; buffers?: any[]}) {\n // @ts-ignore\n this.gltf = gltf || {\n json: {...DEFAULT_GLTF_JSON},\n buffers: []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): {[key: string]: any} {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: any} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n getExtension<T = Extension>(extensionName: string): T | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? extensions[extensionName] || true : null;\n }\n\n getRequiredExtension<T = Extension>(extensionName: string): T | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getObjectExtension<T = Extension>(object: {[key: string]: any}, extensionName: string): T | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && this.json[array][index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n this.json.extras[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: object, extensionName: string, data: object): void {\n // @ts-ignore\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: object, extensionName: string): object {\n // @ts-ignore\n const extensions = object.extensions || {};\n const extension = extensions[extensionName];\n delete extensions[extensionName];\n return extension;\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices: object; material: number; mode: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: 0,\n // Write offset from the start of the binary body\n byteOffset: this.byteLength,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n"],"file":"gltf-scenegraph.js"}
@@ -73,7 +73,7 @@ class GLTFV1Normalizer {
73
73
 
74
74
  this._convertTopLevelObjectsToArrays(json);
75
75
 
76
- KHR_binary_glTF.decode(gltf);
76
+ KHR_binary_glTF.preprocess(gltf);
77
77
 
78
78
  this._convertObjectIdsToArrayIndices(json);
79
79