@loaders.gl/gltf 4.0.0-alpha.21 → 4.0.0-alpha.22

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.
package/dist/dist.min.js CHANGED
@@ -37,6 +37,15 @@
37
37
  }
38
38
  });
39
39
 
40
+ // ../loader-utils/src/loader-types.ts
41
+ async function parseFromContext(data, loaders, options, context) {
42
+ return context._parse(data, loaders, options, context);
43
+ }
44
+ var init_loader_types = __esm({
45
+ "../loader-utils/src/loader-types.ts"() {
46
+ }
47
+ });
48
+
40
49
  // ../loader-utils/src/lib/env-utils/assert.ts
41
50
  function assert(condition, message) {
42
51
  if (!condition) {
@@ -324,6 +333,7 @@
324
333
  // ../loader-utils/src/index.ts
325
334
  var init_src2 = __esm({
326
335
  "../loader-utils/src/index.ts"() {
336
+ init_loader_types();
327
337
  init_assert();
328
338
  init_globals();
329
339
  init_parse_json();
@@ -2985,10 +2995,9 @@
2985
2995
  }
2986
2996
  const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);
2987
2997
  const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset);
2988
- const { parse: parse4 } = context;
2989
2998
  const dracoOptions = { ...options };
2990
2999
  delete dracoOptions["3d-tiles"];
2991
- const decodedData = await parse4(bufferCopy, DracoLoader2, dracoOptions, context);
3000
+ const decodedData = await parseFromContext(bufferCopy, DracoLoader2, dracoOptions, context);
2992
3001
  const decodedAttributes = getGLTFAccessors(decodedData.attributes);
2993
3002
  for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {
2994
3003
  if (attributeName in primitive.attributes) {
@@ -3046,8 +3055,8 @@
3046
3055
  var KHR_DRACO_MESH_COMPRESSION, name4;
3047
3056
  var init_KHR_draco_mesh_compression = __esm({
3048
3057
  "src/lib/extensions/KHR_draco_mesh_compression.ts"() {
3049
- init_src6();
3050
3058
  init_src2();
3059
+ init_src6();
3051
3060
  init_gltf_scenegraph();
3052
3061
  init_gltf_attribute_utils();
3053
3062
  KHR_DRACO_MESH_COMPRESSION = "KHR_draco_mesh_compression";
@@ -5130,10 +5139,10 @@
5130
5139
  return Array.from(imageIndices).sort();
5131
5140
  }
5132
5141
  async function loadImage(gltf, image, index, options, context) {
5133
- const { fetch: fetch2, parse: parse4 } = context;
5134
5142
  let arrayBuffer;
5135
5143
  if (image.uri && !image.hasOwnProperty("bufferView")) {
5136
5144
  const uri = resolveUrl(image.uri, options);
5145
+ const { fetch: fetch2 } = context;
5137
5146
  const response = await fetch2(uri);
5138
5147
  arrayBuffer = await response.arrayBuffer();
5139
5148
  image.bufferView = {
@@ -5145,7 +5154,7 @@
5145
5154
  arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);
5146
5155
  }
5147
5156
  assert3(arrayBuffer, "glTF image has no data");
5148
- let parsedImage = await parse4(arrayBuffer, [ImageLoader, BasisLoader], {
5157
+ let parsedImage = await parseFromContext(arrayBuffer, [ImageLoader, BasisLoader], {
5149
5158
  ...options,
5150
5159
  mimeType: image.mimeType,
5151
5160
  basis: options.basis || { format: selectSupportedBasisFormat() }
@@ -13,8 +13,8 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
13
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
15
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
- var _draco = require("@loaders.gl/draco");
17
16
  var _loaderUtils = require("@loaders.gl/loader-utils");
17
+ var _draco = require("@loaders.gl/draco");
18
18
  var _gltfScenegraph = require("../api/gltf-scenegraph");
19
19
  var _gltfAttributeUtils = require("../gltf-utils/gltf-attribute-utils");
20
20
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -106,7 +106,7 @@ function decompressPrimitive(_x4, _x5, _x6, _x7) {
106
106
  }
107
107
  function _decompressPrimitive() {
108
108
  _decompressPrimitive = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(scenegraph, primitive, options, context) {
109
- var dracoExtension, buffer, bufferCopy, parse, dracoOptions, decodedData, decodedAttributes, _i, _Object$entries, _Object$entries$_i, attributeName, decodedAttribute, accessorIndex, accessor;
109
+ var dracoExtension, buffer, bufferCopy, dracoOptions, decodedData, decodedAttributes, _i, _Object$entries, _Object$entries$_i, attributeName, decodedAttribute, accessorIndex, accessor;
110
110
  return _regenerator.default.wrap(function _callee2$(_context3) {
111
111
  while (1) switch (_context3.prev = _context3.next) {
112
112
  case 0:
@@ -119,12 +119,11 @@ function _decompressPrimitive() {
119
119
  case 3:
120
120
  buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);
121
121
  bufferCopy = (0, _loaderUtils.sliceArrayBuffer)(buffer.buffer, buffer.byteOffset);
122
- parse = context.parse;
123
122
  dracoOptions = _objectSpread({}, options);
124
123
  delete dracoOptions['3d-tiles'];
125
- _context3.next = 10;
126
- return parse(bufferCopy, _draco.DracoLoader, dracoOptions, context);
127
- case 10:
124
+ _context3.next = 9;
125
+ return (0, _loaderUtils.parseFromContext)(bufferCopy, _draco.DracoLoader, dracoOptions, context);
126
+ case 9:
128
127
  decodedData = _context3.sent;
129
128
  decodedAttributes = (0, _gltfAttributeUtils.getGLTFAccessors)(decodedData.attributes);
130
129
  for (_i = 0, _Object$entries = Object.entries(decodedAttributes); _i < _Object$entries.length; _i++) {
@@ -144,7 +143,7 @@ function _decompressPrimitive() {
144
143
  }
145
144
  scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);
146
145
  checkPrimitive(primitive);
147
- case 17:
146
+ case 16:
148
147
  case "end":
149
148
  return _context3.stop();
150
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_draco_mesh_compression.js","names":["_draco","require","_loaderUtils","_gltfScenegraph","_gltfAttributeUtils","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_marked","_regeneratorRuntime2","mark","makeMeshPrimitiveIterator","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","KHR_DRACO_MESH_COMPRESSION","exports","preprocess","gltfData","options","context","scenegraph","GLTFScenegraph","_iterator","_step","primitive","getObjectExtension","decode","_x","_x2","_x3","_decode","_asyncToGenerator2","_regenerator","_callee","_options$gltf","promises","_iterator5","_step5","wrap","_callee$","_context2","prev","gltf","decompressMeshes","abrupt","decompressPrimitive","Promise","all","removeExtension","stop","encode","undefined","_iterator2","json","meshes","_step2","mesh","compressMesh","addRequiredExtension","_x4","_x5","_x6","_x7","_decompressPrimitive","_callee2","dracoExtension","buffer","bufferCopy","parse","dracoOptions","decodedData","decodedAttributes","_i","_Object$entries","_Object$entries$_i","attributeName","decodedAttribute","accessorIndex","accessor","_callee2$","_context3","getTypedArrayForBufferView","bufferView","sliceArrayBuffer","byteOffset","DracoLoader","sent","getGLTFAccessors","attributes","entries","_slicedToArray2","getAccessor","min","max","indices","getGLTFAccessor","removeObjectExtension","checkPrimitive","_context$parseSync","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","_iterator3","_step3","_iterator4","_step4","makeMeshPrimitiveIterator$","_context","t0","finish","t1"],"sources":["../../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\n/* eslint-disable camelcase */\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';\nimport {sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new GLTFScenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const {parse} = context;\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = (await parse(bufferCopy, DracoLoader, dracoOptions, context)) as DracoMesh;\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"KHR_draco_mesh_compression.js","names":["_loaderUtils","require","_draco","_gltfScenegraph","_gltfAttributeUtils","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_marked","_regeneratorRuntime2","mark","makeMeshPrimitiveIterator","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","KHR_DRACO_MESH_COMPRESSION","exports","preprocess","gltfData","options","context","scenegraph","GLTFScenegraph","_iterator","_step","primitive","getObjectExtension","decode","_x","_x2","_x3","_decode","_asyncToGenerator2","_regenerator","_callee","_options$gltf","promises","_iterator5","_step5","wrap","_callee$","_context2","prev","gltf","decompressMeshes","abrupt","decompressPrimitive","Promise","all","removeExtension","stop","encode","undefined","_iterator2","json","meshes","_step2","mesh","compressMesh","addRequiredExtension","_x4","_x5","_x6","_x7","_decompressPrimitive","_callee2","dracoExtension","buffer","bufferCopy","dracoOptions","decodedData","decodedAttributes","_i","_Object$entries","_Object$entries$_i","attributeName","decodedAttribute","accessorIndex","accessor","_callee2$","_context3","getTypedArrayForBufferView","bufferView","sliceArrayBuffer","byteOffset","parseFromContext","DracoLoader","sent","getGLTFAccessors","attributes","entries","_slicedToArray2","getAccessor","min","max","indices","getGLTFAccessor","removeObjectExtension","checkPrimitive","_context$parseSync","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","_iterator3","_step3","_iterator4","_step4","makeMeshPrimitiveIterator$","_context","t0","finish","t1"],"sources":["../../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';\n\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions} from '@loaders.gl/draco';\n\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new GLTFScenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"mappings":"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"}
@@ -225,16 +225,16 @@ function loadImage(_x9, _x10, _x11, _x12, _x13) {
225
225
  }
226
226
  function _loadImage() {
227
227
  _loadImage = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(gltf, image, index, options, context) {
228
- var fetch, parse, arrayBuffer, uri, response, array, parsedImage;
228
+ var arrayBuffer, uri, fetch, response, array, parsedImage;
229
229
  return _regenerator.default.wrap(function _callee4$(_context4) {
230
230
  while (1) switch (_context4.prev = _context4.next) {
231
231
  case 0:
232
- fetch = context.fetch, parse = context.parse;
233
232
  if (!(image.uri && !image.hasOwnProperty('bufferView'))) {
234
233
  _context4.next = 10;
235
234
  break;
236
235
  }
237
236
  uri = (0, _resolveUrl.resolveUrl)(image.uri, options);
237
+ fetch = context.fetch;
238
238
  _context4.next = 5;
239
239
  return fetch(uri);
240
240
  case 5:
@@ -253,7 +253,7 @@ function _loadImage() {
253
253
  }
254
254
  (0, _assert.assert)(arrayBuffer, 'glTF image has no data');
255
255
  _context4.next = 14;
256
- return parse(arrayBuffer, [_images.ImageLoader, _textures.BasisLoader], _objectSpread(_objectSpread({}, options), {}, {
256
+ return (0, _loaderUtils.parseFromContext)(arrayBuffer, [_images.ImageLoader, _textures.BasisLoader], _objectSpread(_objectSpread({}, options), {}, {
257
257
  mimeType: image.mimeType,
258
258
  basis: options.basis || {
259
259
  format: (0, _textures.selectSupportedBasisFormat)()
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf.js","names":["_loaderUtils","require","_images","_textures","_assert","_parseGlb","_resolveUrl","_getTypedArray","_gltfExtensions","_normalizeGltfV","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","isGLTF","arrayBuffer","options","byteOffset","isGLB","parseGLTF","_x","_x2","_parseGLTF","_asyncToGenerator2","_regenerator","mark","_callee","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","context","_args","wrap","_callee$","_context","prev","undefined","parseGLTFContainerSync","normalizeGLTFV1","normalize","preprocessExtensions","loadBuffers","json","buffers","loadImages","decodeExtensions","abrupt","stop","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","parseJSON","glb","parseGLBSync","assert","type","concat","_glb","fill","header","hasBinChunk","binChunks","byteLength","images","_x3","_x4","_x5","_loadBuffers","_callee2","buffer","_context$fetch","_response$arrayBuffer","fetch","response","_callee2$","_context2","resolveUrl","sent","_x6","_x7","_x8","_loadImages","_callee3","imageIndices","promises","_iterator2","_step2","imageIndex","_callee3$","_context3","getReferencesImageIndices","loadImage","Promise","all","Set","textures","_iterator","_step","texture","add","sort","_x9","_x10","_x11","_x12","_x13","_loadImage","_callee4","image","index","parse","array","parsedImage","_callee4$","_context4","hasOwnProperty","bufferView","Number","isFinite","getTypedArrayForBufferView","sliceArrayBuffer","ImageLoader","BasisLoader","mimeType","basis","format","selectSupportedBasisFormat","compressed","mipmaps","width","height"],"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"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 {GLTFWithBuffers} from '../types/gltf-types';\nimport type {GLB} from '../types/glb-types';\nimport type {ParseGLBOptions} from './parse-glb';\n\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\n\nimport {assert} from '../utils/assert';\nimport {isGLB, parseGLBSync} from './parse-glb';\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';\n\n/** */\nexport type ParseGLTFOptions = ParseGLBOptions & {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n excludeExtensions?: string[];\n\n /** @deprecated not supported in v4. `postProcessGLTF()` must be called by the application */\n postProcess?: false;\n};\n\n/** Check if an array buffer appears to contain GLTF data */\nexport function isGLTF(arrayBuffer: ArrayBuffer, options?: ParseGLTFOptions): 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): Promise<GLTFWithBuffers> {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\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 // loadImages and decodeExtensions should not be running in parallel, because\n // decodeExtensions uses data from images taken during the loadImages call.\n if (options?.gltf?.loadImages) {\n await loadImages(gltf, options, context);\n }\n\n await decodeExtensions(gltf, options, context);\n\n return gltf;\n}\n\n/**\n *\n * @param gltf\n * @param data - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\n * @param byteOffset\n * @param options\n */\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 } else if (gltf.buffers[i] === null) {\n gltf.buffers[i] = {\n arrayBuffer: new ArrayBuffer(buffer.byteLength),\n byteOffset: 0,\n byteLength: buffer.byteLength\n };\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 && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n image.bufferView = {\n data: arrayBuffer\n };\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 let parsedImage = await parse(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {\n ...options,\n mimeType: image.mimeType,\n basis: options.basis || {format: selectSupportedBasisFormat()}\n },\n context\n );\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n mipmaps: false,\n width: parsedImage[0].width,\n height: parsedImage[0].height,\n data: parsedImage[0]\n };\n }\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"],"mappings":"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"}
1
+ {"version":3,"file":"parse-gltf.js","names":["_loaderUtils","require","_images","_textures","_assert","_parseGlb","_resolveUrl","_getTypedArray","_gltfExtensions","_normalizeGltfV","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","isGLTF","arrayBuffer","options","byteOffset","isGLB","parseGLTF","_x","_x2","_parseGLTF","_asyncToGenerator2","_regenerator","mark","_callee","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","context","_args","wrap","_callee$","_context","prev","undefined","parseGLTFContainerSync","normalizeGLTFV1","normalize","preprocessExtensions","loadBuffers","json","buffers","loadImages","decodeExtensions","abrupt","stop","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","parseJSON","glb","parseGLBSync","assert","type","concat","_glb","fill","header","hasBinChunk","binChunks","byteLength","images","_x3","_x4","_x5","_loadBuffers","_callee2","buffer","_context$fetch","_response$arrayBuffer","fetch","response","_callee2$","_context2","resolveUrl","sent","_x6","_x7","_x8","_loadImages","_callee3","imageIndices","promises","_iterator2","_step2","imageIndex","_callee3$","_context3","getReferencesImageIndices","loadImage","Promise","all","Set","textures","_iterator","_step","texture","add","sort","_x9","_x10","_x11","_x12","_x13","_loadImage","_callee4","image","index","array","parsedImage","_callee4$","_context4","hasOwnProperty","bufferView","Number","isFinite","getTypedArrayForBufferView","sliceArrayBuffer","parseFromContext","ImageLoader","BasisLoader","mimeType","basis","format","selectSupportedBasisFormat","compressed","mipmaps","width","height"],"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"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 {GLTFWithBuffers} from '../types/gltf-types';\nimport type {GLB} from '../types/glb-types';\nimport type {ParseGLBOptions} from './parse-glb';\n\nimport type {ImageType, TextureLevel} from '@loaders.gl/schema';\nimport {parseJSON, sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\n\nimport {assert} from '../utils/assert';\nimport {isGLB, parseGLBSync} from './parse-glb';\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';\n\n/** */\nexport type ParseGLTFOptions = ParseGLBOptions & {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n excludeExtensions?: string[];\n\n /** @deprecated not supported in v4. `postProcessGLTF()` must be called by the application */\n postProcess?: false;\n};\n\n/** Check if an array buffer appears to contain GLTF data */\nexport function isGLTF(arrayBuffer: ArrayBuffer, options?: ParseGLTFOptions): 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): Promise<GLTFWithBuffers> {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\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 // loadImages and decodeExtensions should not be running in parallel, because\n // decodeExtensions uses data from images taken during the loadImages call.\n if (options?.gltf?.loadImages) {\n await loadImages(gltf, options, context);\n }\n\n await decodeExtensions(gltf, options, context);\n\n return gltf;\n}\n\n/**\n *\n * @param gltf\n * @param data - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\n * @param byteOffset\n * @param options\n */\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 } else if (gltf.buffers[i] === null) {\n gltf.buffers[i] = {\n arrayBuffer: new ArrayBuffer(buffer.byteLength),\n byteOffset: 0,\n byteLength: buffer.byteLength\n };\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 let arrayBuffer;\n\n if (image.uri && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n\n const {fetch} = context;\n const response = await fetch(uri);\n\n arrayBuffer = await response.arrayBuffer();\n image.bufferView = {\n data: arrayBuffer\n };\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 let parsedImage = (await parseFromContext(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {\n ...options,\n mimeType: image.mimeType,\n basis: options.basis || {format: selectSupportedBasisFormat()}\n },\n context\n )) as ImageType | TextureLevel[][];\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n // @ts-expect-error\n mipmaps: false,\n width: parsedImage[0].width,\n height: parsedImage[0].height,\n data: parsedImage[0]\n };\n }\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 // @ts-expect-error TODO - sort out image typing asap\n gltf.images[index] = parsedImage;\n}\n"],"mappings":"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"}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VERSION = void 0;
7
- var VERSION = typeof "4.0.0-alpha.21" !== 'undefined' ? "4.0.0-alpha.21" : 'latest';
7
+ var VERSION = typeof "4.0.0-alpha.22" !== 'undefined' ? "4.0.0-alpha.22" : 'latest';
8
8
  exports.VERSION = VERSION;
9
9
  //# sourceMappingURL=version.js.map
@@ -1,5 +1,5 @@
1
+ import { sliceArrayBuffer, parseFromContext } from '@loaders.gl/loader-utils';
1
2
  import { DracoLoader } from '@loaders.gl/draco';
2
- import { sliceArrayBuffer } from '@loaders.gl/loader-utils';
3
3
  import { GLTFScenegraph } from '../api/gltf-scenegraph';
4
4
  import { getGLTFAccessors, getGLTFAccessor } from '../gltf-utils/gltf-attribute-utils';
5
5
  const KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';
@@ -40,14 +40,11 @@ async function decompressPrimitive(scenegraph, primitive, options, context) {
40
40
  }
41
41
  const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);
42
42
  const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset);
43
- const {
44
- parse
45
- } = context;
46
43
  const dracoOptions = {
47
44
  ...options
48
45
  };
49
46
  delete dracoOptions['3d-tiles'];
50
- const decodedData = await parse(bufferCopy, DracoLoader, dracoOptions, context);
47
+ const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);
51
48
  const decodedAttributes = getGLTFAccessors(decodedData.attributes);
52
49
  for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {
53
50
  if (attributeName in primitive.attributes) {
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_draco_mesh_compression.js","names":["DracoLoader","sliceArrayBuffer","GLTFScenegraph","getGLTFAccessors","getGLTFAccessor","KHR_DRACO_MESH_COMPRESSION","name","preprocess","gltfData","options","context","scenegraph","primitive","makeMeshPrimitiveIterator","getObjectExtension","decode","_options$gltf","gltf","decompressMeshes","promises","push","decompressPrimitive","Promise","all","removeExtension","encode","arguments","length","undefined","mesh","json","meshes","compressMesh","addRequiredExtension","dracoExtension","buffer","getTypedArrayForBufferView","bufferView","bufferCopy","byteOffset","parse","dracoOptions","decodedData","decodedAttributes","attributes","attributeName","decodedAttribute","Object","entries","accessorIndex","accessor","getAccessor","min","max","indices","removeObjectExtension","checkPrimitive","_context$parseSync","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","call","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","keys"],"sources":["../../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\n/* eslint-disable camelcase */\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';\nimport {sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new GLTFScenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const {parse} = context;\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = (await parse(bufferCopy, DracoLoader, dracoOptions, context)) as DracoMesh;\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"KHR_draco_mesh_compression.js","names":["sliceArrayBuffer","parseFromContext","DracoLoader","GLTFScenegraph","getGLTFAccessors","getGLTFAccessor","KHR_DRACO_MESH_COMPRESSION","name","preprocess","gltfData","options","context","scenegraph","primitive","makeMeshPrimitiveIterator","getObjectExtension","decode","_options$gltf","gltf","decompressMeshes","promises","push","decompressPrimitive","Promise","all","removeExtension","encode","arguments","length","undefined","mesh","json","meshes","compressMesh","addRequiredExtension","dracoExtension","buffer","getTypedArrayForBufferView","bufferView","bufferCopy","byteOffset","dracoOptions","decodedData","decodedAttributes","attributes","attributeName","decodedAttribute","Object","entries","accessorIndex","accessor","getAccessor","min","max","indices","removeObjectExtension","checkPrimitive","_context$parseSync","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","call","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","keys"],"sources":["../../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';\n\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions} from '@loaders.gl/draco';\n\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new GLTFScenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { parseJSON, sliceArrayBuffer } from '@loaders.gl/loader-utils';
1
+ import { parseJSON, sliceArrayBuffer, parseFromContext } from '@loaders.gl/loader-utils';
2
2
  import { ImageLoader } from '@loaders.gl/images';
3
3
  import { BasisLoader, selectSupportedBasisFormat } from '@loaders.gl/textures';
4
4
  import { assert } from '../utils/assert';
@@ -112,13 +112,12 @@ function getReferencesImageIndices(gltf) {
112
112
  return Array.from(imageIndices).sort();
113
113
  }
114
114
  async function loadImage(gltf, image, index, options, context) {
115
- const {
116
- fetch,
117
- parse
118
- } = context;
119
115
  let arrayBuffer;
120
116
  if (image.uri && !image.hasOwnProperty('bufferView')) {
121
117
  const uri = resolveUrl(image.uri, options);
118
+ const {
119
+ fetch
120
+ } = context;
122
121
  const response = await fetch(uri);
123
122
  arrayBuffer = await response.arrayBuffer();
124
123
  image.bufferView = {
@@ -130,7 +129,7 @@ async function loadImage(gltf, image, index, options, context) {
130
129
  arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);
131
130
  }
132
131
  assert(arrayBuffer, 'glTF image has no data');
133
- let parsedImage = await parse(arrayBuffer, [ImageLoader, BasisLoader], {
132
+ let parsedImage = await parseFromContext(arrayBuffer, [ImageLoader, BasisLoader], {
134
133
  ...options,
135
134
  mimeType: image.mimeType,
136
135
  basis: options.basis || {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf.js","names":["parseJSON","sliceArrayBuffer","ImageLoader","BasisLoader","selectSupportedBasisFormat","assert","isGLB","parseGLBSync","resolveUrl","getTypedArrayForBufferView","preprocessExtensions","decodeExtensions","normalizeGLTFV1","isGLTF","arrayBuffer","options","byteOffset","parseGLTF","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","arguments","length","undefined","context","parseGLTFContainerSync","normalize","loadBuffers","json","buffers","loadImages","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","glb","type","concat","_glb","Array","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","_context$fetch","_response$arrayBuffer","fetch","response","call","imageIndices","getReferencesImageIndices","promises","imageIndex","push","loadImage","Promise","all","Set","textures","texture","source","add","from","sort","image","index","parse","hasOwnProperty","bufferView","Number","isFinite","array","parsedImage","mimeType","basis","format","compressed","mipmaps","width","height"],"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"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 {GLTFWithBuffers} from '../types/gltf-types';\nimport type {GLB} from '../types/glb-types';\nimport type {ParseGLBOptions} from './parse-glb';\n\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\n\nimport {assert} from '../utils/assert';\nimport {isGLB, parseGLBSync} from './parse-glb';\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';\n\n/** */\nexport type ParseGLTFOptions = ParseGLBOptions & {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n excludeExtensions?: string[];\n\n /** @deprecated not supported in v4. `postProcessGLTF()` must be called by the application */\n postProcess?: false;\n};\n\n/** Check if an array buffer appears to contain GLTF data */\nexport function isGLTF(arrayBuffer: ArrayBuffer, options?: ParseGLTFOptions): 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): Promise<GLTFWithBuffers> {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\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 // loadImages and decodeExtensions should not be running in parallel, because\n // decodeExtensions uses data from images taken during the loadImages call.\n if (options?.gltf?.loadImages) {\n await loadImages(gltf, options, context);\n }\n\n await decodeExtensions(gltf, options, context);\n\n return gltf;\n}\n\n/**\n *\n * @param gltf\n * @param data - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\n * @param byteOffset\n * @param options\n */\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 } else if (gltf.buffers[i] === null) {\n gltf.buffers[i] = {\n arrayBuffer: new ArrayBuffer(buffer.byteLength),\n byteOffset: 0,\n byteLength: buffer.byteLength\n };\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 && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n image.bufferView = {\n data: arrayBuffer\n };\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 let parsedImage = await parse(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {\n ...options,\n mimeType: image.mimeType,\n basis: options.basis || {format: selectSupportedBasisFormat()}\n },\n context\n );\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n mipmaps: false,\n width: parsedImage[0].width,\n height: parsedImage[0].height,\n data: parsedImage[0]\n };\n }\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"],"mappings":"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"}
1
+ {"version":3,"file":"parse-gltf.js","names":["parseJSON","sliceArrayBuffer","parseFromContext","ImageLoader","BasisLoader","selectSupportedBasisFormat","assert","isGLB","parseGLBSync","resolveUrl","getTypedArrayForBufferView","preprocessExtensions","decodeExtensions","normalizeGLTFV1","isGLTF","arrayBuffer","options","byteOffset","parseGLTF","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","arguments","length","undefined","context","parseGLTFContainerSync","normalize","loadBuffers","json","buffers","loadImages","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","glb","type","concat","_glb","Array","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","_context$fetch","_response$arrayBuffer","fetch","response","call","imageIndices","getReferencesImageIndices","promises","imageIndex","push","loadImage","Promise","all","Set","textures","texture","source","add","from","sort","image","index","hasOwnProperty","bufferView","Number","isFinite","array","parsedImage","mimeType","basis","format","compressed","mipmaps","width","height"],"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"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 {GLTFWithBuffers} from '../types/gltf-types';\nimport type {GLB} from '../types/glb-types';\nimport type {ParseGLBOptions} from './parse-glb';\n\nimport type {ImageType, TextureLevel} from '@loaders.gl/schema';\nimport {parseJSON, sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\n\nimport {assert} from '../utils/assert';\nimport {isGLB, parseGLBSync} from './parse-glb';\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';\n\n/** */\nexport type ParseGLTFOptions = ParseGLBOptions & {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n excludeExtensions?: string[];\n\n /** @deprecated not supported in v4. `postProcessGLTF()` must be called by the application */\n postProcess?: false;\n};\n\n/** Check if an array buffer appears to contain GLTF data */\nexport function isGLTF(arrayBuffer: ArrayBuffer, options?: ParseGLTFOptions): 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): Promise<GLTFWithBuffers> {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\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 // loadImages and decodeExtensions should not be running in parallel, because\n // decodeExtensions uses data from images taken during the loadImages call.\n if (options?.gltf?.loadImages) {\n await loadImages(gltf, options, context);\n }\n\n await decodeExtensions(gltf, options, context);\n\n return gltf;\n}\n\n/**\n *\n * @param gltf\n * @param data - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\n * @param byteOffset\n * @param options\n */\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 } else if (gltf.buffers[i] === null) {\n gltf.buffers[i] = {\n arrayBuffer: new ArrayBuffer(buffer.byteLength),\n byteOffset: 0,\n byteLength: buffer.byteLength\n };\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 let arrayBuffer;\n\n if (image.uri && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n\n const {fetch} = context;\n const response = await fetch(uri);\n\n arrayBuffer = await response.arrayBuffer();\n image.bufferView = {\n data: arrayBuffer\n };\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 let parsedImage = (await parseFromContext(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {\n ...options,\n mimeType: image.mimeType,\n basis: options.basis || {format: selectSupportedBasisFormat()}\n },\n context\n )) as ImageType | TextureLevel[][];\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n // @ts-expect-error\n mipmaps: false,\n width: parsedImage[0].width,\n height: parsedImage[0].height,\n data: parsedImage[0]\n };\n }\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 // @ts-expect-error TODO - sort out image typing asap\n gltf.images[index] = parsedImage;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export const VERSION = typeof "4.0.0-alpha.21" !== 'undefined' ? "4.0.0-alpha.21" : 'latest';
1
+ export const VERSION = typeof "4.0.0-alpha.22" !== 'undefined' ? "4.0.0-alpha.22" : 'latest';
2
2
  //# sourceMappingURL=version.js.map
@@ -1,6 +1,6 @@
1
+ import type { LoaderContext } from '@loaders.gl/loader-utils';
1
2
  import type { GLTF } from '../types/gltf-json-schema';
2
3
  import type { GLTFLoaderOptions } from '../../gltf-loader';
3
- import type { LoaderContext } from '@loaders.gl/loader-utils';
4
4
  /** Extension name */
5
5
  export declare const name = "KHR_draco_mesh_compression";
6
6
  export declare function preprocess(gltfData: {
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_draco_mesh_compression.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,IAAI,EAIL,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAEzD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAS5D,qBAAqB;AACrB,eAAO,MAAM,IAAI,+BAA6B,CAAC;AAE/C,wBAAgB,UAAU,CACxB,QAAQ,EAAE;IAAC,IAAI,EAAE,IAAI,CAAA;CAAC,EACtB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,IAAI,CAON;AAED,wBAAsB,MAAM,CAC1B,QAAQ,EAAE;IAAC,IAAI,EAAE,IAAI,CAAA;CAAC,EACtB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAgB,MAAM,CAAC,QAAQ,KAAA,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI,CAUtE"}
1
+ {"version":3,"file":"KHR_draco_mesh_compression.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAM5D,OAAO,KAAK,EACV,IAAI,EAIL,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAOzD,qBAAqB;AACrB,eAAO,MAAM,IAAI,+BAA6B,CAAC;AAE/C,wBAAgB,UAAU,CACxB,QAAQ,EAAE;IAAC,IAAI,EAAE,IAAI,CAAA;CAAC,EACtB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,IAAI,CAON;AAED,wBAAsB,MAAM,CAC1B,QAAQ,EAAE;IAAC,IAAI,EAAE,IAAI,CAAA;CAAC,EACtB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAgB,MAAM,CAAC,QAAQ,KAAA,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI,CAUtE"}
@@ -4,8 +4,8 @@
4
4
  /* eslint-disable camelcase */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.encode = exports.decode = exports.preprocess = exports.name = void 0;
7
- const draco_1 = require("@loaders.gl/draco");
8
7
  const loader_utils_1 = require("@loaders.gl/loader-utils");
8
+ const draco_1 = require("@loaders.gl/draco");
9
9
  const gltf_scenegraph_1 = require("../api/gltf-scenegraph");
10
10
  const gltf_attribute_utils_1 = require("../gltf-utils/gltf-attribute-utils");
11
11
  const KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';
@@ -62,11 +62,10 @@ async function decompressPrimitive(scenegraph, primitive, options, context) {
62
62
  // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer
63
63
  // TODO - remove when `parse` is fixed to handle `byteOffset`s
64
64
  const bufferCopy = (0, loader_utils_1.sliceArrayBuffer)(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);
65
- const { parse } = context;
66
65
  const dracoOptions = { ...options };
67
66
  // TODO - remove hack: The entire tileset might be included, too expensive to serialize
68
67
  delete dracoOptions['3d-tiles'];
69
- const decodedData = (await parse(bufferCopy, draco_1.DracoLoader, dracoOptions, context));
68
+ const decodedData = await (0, loader_utils_1.parseFromContext)(bufferCopy, draco_1.DracoLoader, dracoOptions, context);
70
69
  const decodedAttributes = (0, gltf_attribute_utils_1.getGLTFAccessors)(decodedData.attributes);
71
70
  // Restore min/max values
72
71
  for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-gltf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAajD,OAAO;AACP,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,CAAC;AAEF,4DAA4D;AAC5D,wBAAgB,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAGpF;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,eAAe,EACrB,mBAAmB,KAAA,EACnB,UAAU,oBAAI,EACd,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC,CAqB1B"}
1
+ {"version":3,"file":"parse-gltf.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-gltf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAcjD,OAAO;AACP,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,CAAC;AAEF,4DAA4D;AAC5D,wBAAgB,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAGpF;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,eAAe,EACrB,mBAAmB,KAAA,EACnB,UAAU,oBAAI,EACd,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC,CAqB1B"}
@@ -145,10 +145,10 @@ function getReferencesImageIndices(gltf) {
145
145
  }
146
146
  /** Asynchronously fetches and parses one image, store in images array outside of json */
147
147
  async function loadImage(gltf, image, index, options, context) {
148
- const { fetch, parse } = context;
149
148
  let arrayBuffer;
150
149
  if (image.uri && !image.hasOwnProperty('bufferView')) {
151
150
  const uri = (0, resolve_url_1.resolveUrl)(image.uri, options);
151
+ const { fetch } = context;
152
152
  const response = await fetch(uri);
153
153
  arrayBuffer = await response.arrayBuffer();
154
154
  image.bufferView = {
@@ -161,14 +161,15 @@ async function loadImage(gltf, image, index, options, context) {
161
161
  }
162
162
  (0, assert_1.assert)(arrayBuffer, 'glTF image has no data');
163
163
  // Call `parse`
164
- let parsedImage = await parse(arrayBuffer, [images_1.ImageLoader, textures_1.BasisLoader], {
164
+ let parsedImage = (await (0, loader_utils_1.parseFromContext)(arrayBuffer, [images_1.ImageLoader, textures_1.BasisLoader], {
165
165
  ...options,
166
166
  mimeType: image.mimeType,
167
167
  basis: options.basis || { format: (0, textures_1.selectSupportedBasisFormat)() }
168
- }, context);
168
+ }, context));
169
169
  if (parsedImage && parsedImage[0]) {
170
170
  parsedImage = {
171
171
  compressed: true,
172
+ // @ts-expect-error
172
173
  mipmaps: false,
173
174
  width: parsedImage[0].width,
174
175
  height: parsedImage[0].height,
@@ -179,5 +180,6 @@ async function loadImage(gltf, image, index, options, context) {
179
180
  // const parsedImage = await parse(arrayBuffer, [ImageLoader]);
180
181
  // Store the loaded image
181
182
  gltf.images = gltf.images || [];
183
+ // @ts-expect-error TODO - sort out image typing asap
182
184
  gltf.images[index] = parsedImage;
183
185
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/gltf",
3
- "version": "4.0.0-alpha.21",
3
+ "version": "4.0.0-alpha.22",
4
4
  "description": "Framework-independent loader for the glTF format",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -34,11 +34,11 @@
34
34
  "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
35
35
  },
36
36
  "dependencies": {
37
- "@loaders.gl/draco": "4.0.0-alpha.21",
38
- "@loaders.gl/images": "4.0.0-alpha.21",
39
- "@loaders.gl/loader-utils": "4.0.0-alpha.21",
40
- "@loaders.gl/textures": "4.0.0-alpha.21",
37
+ "@loaders.gl/draco": "4.0.0-alpha.22",
38
+ "@loaders.gl/images": "4.0.0-alpha.22",
39
+ "@loaders.gl/loader-utils": "4.0.0-alpha.22",
40
+ "@loaders.gl/textures": "4.0.0-alpha.22",
41
41
  "@math.gl/core": "^3.5.1"
42
42
  },
43
- "gitHead": "df5d670b136192b26941396e944f9c46be788e83"
43
+ "gitHead": "0da838c506d1275383f2fd3d244d9c72b25397d2"
44
44
  }
@@ -2,7 +2,12 @@
2
2
  // Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported
3
3
  /* eslint-disable camelcase */
4
4
 
5
- /* eslint-disable camelcase */
5
+ import type {LoaderContext} from '@loaders.gl/loader-utils';
6
+ import {sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';
7
+
8
+ import {DracoLoader} from '@loaders.gl/draco';
9
+ import {DracoLoaderOptions} from '@loaders.gl/draco';
10
+
6
11
  import type {
7
12
  GLTF,
8
13
  GLTFAccessor,
@@ -11,10 +16,6 @@ import type {
11
16
  } from '../types/gltf-json-schema';
12
17
  import type {GLTFLoaderOptions} from '../../gltf-loader';
13
18
 
14
- import type {LoaderContext} from '@loaders.gl/loader-utils';
15
- import {DracoLoader} from '@loaders.gl/draco';
16
- import {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';
17
- import {sliceArrayBuffer} from '@loaders.gl/loader-utils';
18
19
  import {GLTFScenegraph} from '../api/gltf-scenegraph';
19
20
  import {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';
20
21
 
@@ -99,12 +100,11 @@ async function decompressPrimitive(
99
100
  // TODO - remove when `parse` is fixed to handle `byteOffset`s
100
101
  const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);
101
102
 
102
- const {parse} = context;
103
103
  const dracoOptions: DracoLoaderOptions = {...options};
104
104
 
105
105
  // TODO - remove hack: The entire tileset might be included, too expensive to serialize
106
106
  delete dracoOptions['3d-tiles'];
107
- const decodedData = (await parse(bufferCopy, DracoLoader, dracoOptions, context)) as DracoMesh;
107
+ const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);
108
108
 
109
109
  const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);
110
110
 
@@ -5,7 +5,8 @@ import type {GLTFWithBuffers} from '../types/gltf-types';
5
5
  import type {GLB} from '../types/glb-types';
6
6
  import type {ParseGLBOptions} from './parse-glb';
7
7
 
8
- import {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';
8
+ import type {ImageType, TextureLevel} from '@loaders.gl/schema';
9
+ import {parseJSON, sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';
9
10
  import {ImageLoader} from '@loaders.gl/images';
10
11
  import {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';
11
12
 
@@ -198,13 +199,14 @@ async function loadImage(
198
199
  options,
199
200
  context: LoaderContext
200
201
  ) {
201
- const {fetch, parse} = context;
202
-
203
202
  let arrayBuffer;
204
203
 
205
204
  if (image.uri && !image.hasOwnProperty('bufferView')) {
206
205
  const uri = resolveUrl(image.uri, options);
206
+
207
+ const {fetch} = context;
207
208
  const response = await fetch(uri);
209
+
208
210
  arrayBuffer = await response.arrayBuffer();
209
211
  image.bufferView = {
210
212
  data: arrayBuffer
@@ -219,7 +221,7 @@ async function loadImage(
219
221
  assert(arrayBuffer, 'glTF image has no data');
220
222
 
221
223
  // Call `parse`
222
- let parsedImage = await parse(
224
+ let parsedImage = (await parseFromContext(
223
225
  arrayBuffer,
224
226
  [ImageLoader, BasisLoader],
225
227
  {
@@ -228,11 +230,12 @@ async function loadImage(
228
230
  basis: options.basis || {format: selectSupportedBasisFormat()}
229
231
  },
230
232
  context
231
- );
233
+ )) as ImageType | TextureLevel[][];
232
234
 
233
235
  if (parsedImage && parsedImage[0]) {
234
236
  parsedImage = {
235
237
  compressed: true,
238
+ // @ts-expect-error
236
239
  mipmaps: false,
237
240
  width: parsedImage[0].width,
238
241
  height: parsedImage[0].height,
@@ -244,5 +247,6 @@ async function loadImage(
244
247
 
245
248
  // Store the loaded image
246
249
  gltf.images = gltf.images || [];
250
+ // @ts-expect-error TODO - sort out image typing asap
247
251
  gltf.images[index] = parsedImage;
248
252
  }