@loaders.gl/draco 3.3.0-alpha.5 → 3.3.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/draco-nodejs-worker.js +70 -69
  2. package/dist/draco-nodejs-worker.js.map +3 -3
  3. package/dist/draco-worker.js +1 -1
  4. package/dist/draco-writer-nodejs-worker.js +61 -60
  5. package/dist/draco-writer-nodejs-worker.js.map +3 -3
  6. package/dist/draco-writer-worker.js +2 -2
  7. package/dist/es5/bundle.js +0 -1
  8. package/dist/es5/bundle.js.map +1 -1
  9. package/dist/es5/draco-loader.js +1 -4
  10. package/dist/es5/draco-loader.js.map +1 -1
  11. package/dist/es5/draco-writer-nodejs.js +0 -2
  12. package/dist/es5/draco-writer-nodejs.js.map +1 -1
  13. package/dist/es5/draco-writer.js +5 -17
  14. package/dist/es5/draco-writer.js.map +1 -1
  15. package/dist/es5/draco3d/draco3d-types.js +1 -8
  16. package/dist/es5/draco3d/draco3d-types.js.map +1 -1
  17. package/dist/es5/index.js +5 -25
  18. package/dist/es5/index.js.map +1 -1
  19. package/dist/es5/lib/draco-builder.js +40 -96
  20. package/dist/es5/lib/draco-builder.js.map +1 -1
  21. package/dist/es5/lib/draco-module-loader.js +2 -41
  22. package/dist/es5/lib/draco-module-loader.js.map +1 -1
  23. package/dist/es5/lib/draco-parser.js +63 -111
  24. package/dist/es5/lib/draco-parser.js.map +1 -1
  25. package/dist/es5/lib/draco-types.js.map +1 -1
  26. package/dist/es5/lib/utils/get-draco-schema.js +0 -12
  27. package/dist/es5/lib/utils/get-draco-schema.js.map +1 -1
  28. package/dist/es5/lib/utils/version.js +1 -1
  29. package/dist/es5/lib/utils/version.js.map +1 -1
  30. package/dist/es5/workers/draco-nodejs-worker.js +0 -3
  31. package/dist/es5/workers/draco-nodejs-worker.js.map +1 -1
  32. package/dist/es5/workers/draco-worker.js +0 -2
  33. package/dist/es5/workers/draco-worker.js.map +1 -1
  34. package/dist/es5/workers/draco-writer-nodejs-worker.js +0 -15
  35. package/dist/es5/workers/draco-writer-nodejs-worker.js.map +1 -1
  36. package/dist/es5/workers/draco-writer-worker.js +0 -15
  37. package/dist/es5/workers/draco-writer-worker.js.map +1 -1
  38. package/dist/esm/bundle.js +1 -1
  39. package/dist/esm/bundle.js.map +1 -1
  40. package/dist/esm/draco-loader.js +1 -0
  41. package/dist/esm/draco-loader.js.map +1 -1
  42. package/dist/esm/draco-writer-nodejs.js +1 -0
  43. package/dist/esm/draco-writer-nodejs.js.map +1 -1
  44. package/dist/esm/draco-writer.js +3 -3
  45. package/dist/esm/draco-writer.js.map +1 -1
  46. package/dist/esm/draco3d/draco3d-types.js +2 -3
  47. package/dist/esm/draco3d/draco3d-types.js.map +1 -1
  48. package/dist/esm/index.js +6 -3
  49. package/dist/esm/index.js.map +1 -1
  50. package/dist/esm/lib/draco-builder.js +6 -75
  51. package/dist/esm/lib/draco-builder.js.map +1 -1
  52. package/dist/esm/lib/draco-module-loader.js +4 -9
  53. package/dist/esm/lib/draco-module-loader.js.map +1 -1
  54. package/dist/esm/lib/draco-parser.js +5 -66
  55. package/dist/esm/lib/draco-parser.js.map +1 -1
  56. package/dist/esm/lib/draco-types.js.map +1 -1
  57. package/dist/esm/lib/utils/get-draco-schema.js +0 -10
  58. package/dist/esm/lib/utils/get-draco-schema.js.map +1 -1
  59. package/dist/esm/lib/utils/version.js +2 -1
  60. package/dist/esm/lib/utils/version.js.map +1 -1
  61. package/dist/esm/workers/draco-nodejs-worker.js.map +1 -1
  62. package/dist/esm/workers/draco-worker.js.map +1 -1
  63. package/dist/esm/workers/draco-writer-nodejs-worker.js +0 -4
  64. package/dist/esm/workers/draco-writer-nodejs-worker.js.map +1 -1
  65. package/dist/esm/workers/draco-writer-worker.js +0 -4
  66. package/dist/esm/workers/draco-writer-worker.js.map +1 -1
  67. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/draco-module-loader.ts"],"names":["loadLibrary","DRACO_VERSION","DRACO_JS_DECODER_URL","DRACO_WASM_WRAPPER_URL","DRACO_WASM_DECODER_URL","DRACO_ENCODER_URL","loadDecoderPromise","loadEncoderPromise","loadDracoDecoderModule","options","modules","draco3d","createDecoderModule","then","draco","loadDracoDecoder","loadDracoEncoderModule","createEncoderModule","loadDracoEncoder","DracoDecoderModule","wasmBinary","decoderType","Promise","all","globalThis","initializeDracoDecoder","resolve","onModuleLoaded","DracoEncoderModule"],"mappings":"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","sourcesContent":["// Dynamic DRACO module loading inspired by THREE.DRACOLoader\n// https://github.com/mrdoob/three.js/blob/398c4f39ebdb8b23eefd4a7a5ec49ec0c96c7462/examples/jsm/loaders/DRACOLoader.js\n// by Don McCurdy / https://www.donmccurdy.com / MIT license\n\nimport {loadLibrary} from '@loaders.gl/worker-utils';\n\nconst DRACO_VERSION = '1.4.1';\nconst DRACO_JS_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.js`;\nconst DRACO_WASM_WRAPPER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_wasm_wrapper.js`;\nconst DRACO_WASM_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.wasm`;\n\nconst DRACO_ENCODER_URL = `https://raw.githubusercontent.com/google/draco/${DRACO_VERSION}/javascript/draco_encoder.js`;\n\nlet loadDecoderPromise;\nlet loadEncoderPromise;\n\nexport async function loadDracoDecoderModule(options) {\n const modules = options.modules || {};\n\n // Check if a bundled draco3d library has been supplied by application\n if (modules.draco3d) {\n loadDecoderPromise =\n loadDecoderPromise ||\n modules.draco3d.createDecoderModule({}).then((draco) => {\n return {draco};\n });\n } else {\n // If not, dynamically load the WASM script from our CDN\n loadDecoderPromise = loadDecoderPromise || loadDracoDecoder(options);\n }\n return await loadDecoderPromise;\n}\n\nexport async function loadDracoEncoderModule(options) {\n const modules = options.modules || {};\n\n // Check if a bundled draco3d library has been supplied by application\n if (modules.draco3d) {\n loadEncoderPromise =\n loadEncoderPromise ||\n modules.draco3d.createEncoderModule({}).then((draco) => {\n return {draco};\n });\n } else {\n // If not, dynamically load the WASM script from our CDN\n loadEncoderPromise = loadEncoderPromise || loadDracoEncoder(options);\n }\n return await loadEncoderPromise;\n}\n\n// DRACO DECODER LOADING\n\nasync function loadDracoDecoder(options) {\n let DracoDecoderModule;\n let wasmBinary;\n switch (options.draco && options.draco.decoderType) {\n case 'js':\n DracoDecoderModule = await loadLibrary(DRACO_JS_DECODER_URL, 'draco', options);\n break;\n\n case 'wasm':\n default:\n [DracoDecoderModule, wasmBinary] = await Promise.all([\n await loadLibrary(DRACO_WASM_WRAPPER_URL, 'draco', options),\n await loadLibrary(DRACO_WASM_DECODER_URL, 'draco', options)\n ]);\n }\n // Depends on how import happened...\n // @ts-ignore\n DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;\n return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);\n}\n\nfunction initializeDracoDecoder(DracoDecoderModule, wasmBinary) {\n const options: {wasmBinary?: any} = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n DracoDecoderModule({\n ...options,\n onModuleLoaded: (draco) => resolve({draco}) // Module is Promise-like. Wrap in object to avoid loop.\n });\n });\n}\n\n// ENCODER\n\nasync function loadDracoEncoder(options) {\n let DracoEncoderModule = await loadLibrary(DRACO_ENCODER_URL, 'draco', options);\n // @ts-ignore\n DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;\n\n return new Promise((resolve) => {\n DracoEncoderModule({\n onModuleLoaded: (draco) => resolve({draco}) // Module is Promise-like. Wrap in object to avoid loop.\n });\n });\n}\n"],"file":"draco-module-loader.js"}
1
+ {"version":3,"file":"draco-module-loader.js","names":["loadLibrary","DRACO_VERSION","DRACO_JS_DECODER_URL","DRACO_WASM_WRAPPER_URL","DRACO_WASM_DECODER_URL","DRACO_ENCODER_URL","loadDecoderPromise","loadEncoderPromise","loadDracoDecoderModule","options","modules","draco3d","createDecoderModule","then","draco","loadDracoDecoder","loadDracoEncoderModule","createEncoderModule","loadDracoEncoder","DracoDecoderModule","wasmBinary","decoderType","Promise","all","globalThis","initializeDracoDecoder","resolve","onModuleLoaded","DracoEncoderModule"],"sources":["../../../src/lib/draco-module-loader.ts"],"sourcesContent":["// Dynamic DRACO module loading inspired by THREE.DRACOLoader\n// https://github.com/mrdoob/three.js/blob/398c4f39ebdb8b23eefd4a7a5ec49ec0c96c7462/examples/jsm/loaders/DRACOLoader.js\n// by Don McCurdy / https://www.donmccurdy.com / MIT license\n\nimport {loadLibrary} from '@loaders.gl/worker-utils';\n\nconst DRACO_VERSION = '1.4.1';\nconst DRACO_JS_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.js`;\nconst DRACO_WASM_WRAPPER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_wasm_wrapper.js`;\nconst DRACO_WASM_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.wasm`;\n\nconst DRACO_ENCODER_URL = `https://raw.githubusercontent.com/google/draco/${DRACO_VERSION}/javascript/draco_encoder.js`;\n\nlet loadDecoderPromise;\nlet loadEncoderPromise;\n\nexport async function loadDracoDecoderModule(options) {\n const modules = options.modules || {};\n\n // Check if a bundled draco3d library has been supplied by application\n if (modules.draco3d) {\n loadDecoderPromise =\n loadDecoderPromise ||\n modules.draco3d.createDecoderModule({}).then((draco) => {\n return {draco};\n });\n } else {\n // If not, dynamically load the WASM script from our CDN\n loadDecoderPromise = loadDecoderPromise || loadDracoDecoder(options);\n }\n return await loadDecoderPromise;\n}\n\nexport async function loadDracoEncoderModule(options) {\n const modules = options.modules || {};\n\n // Check if a bundled draco3d library has been supplied by application\n if (modules.draco3d) {\n loadEncoderPromise =\n loadEncoderPromise ||\n modules.draco3d.createEncoderModule({}).then((draco) => {\n return {draco};\n });\n } else {\n // If not, dynamically load the WASM script from our CDN\n loadEncoderPromise = loadEncoderPromise || loadDracoEncoder(options);\n }\n return await loadEncoderPromise;\n}\n\n// DRACO DECODER LOADING\n\nasync function loadDracoDecoder(options) {\n let DracoDecoderModule;\n let wasmBinary;\n switch (options.draco && options.draco.decoderType) {\n case 'js':\n DracoDecoderModule = await loadLibrary(DRACO_JS_DECODER_URL, 'draco', options);\n break;\n\n case 'wasm':\n default:\n [DracoDecoderModule, wasmBinary] = await Promise.all([\n await loadLibrary(DRACO_WASM_WRAPPER_URL, 'draco', options),\n await loadLibrary(DRACO_WASM_DECODER_URL, 'draco', options)\n ]);\n }\n // Depends on how import happened...\n // @ts-ignore\n DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;\n return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);\n}\n\nfunction initializeDracoDecoder(DracoDecoderModule, wasmBinary) {\n const options: {wasmBinary?: any} = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n DracoDecoderModule({\n ...options,\n onModuleLoaded: (draco) => resolve({draco}) // Module is Promise-like. Wrap in object to avoid loop.\n });\n });\n}\n\n// ENCODER\n\nasync function loadDracoEncoder(options) {\n let DracoEncoderModule = await loadLibrary(DRACO_ENCODER_URL, 'draco', options);\n // @ts-ignore\n DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;\n\n return new Promise((resolve) => {\n DracoEncoderModule({\n onModuleLoaded: (draco) => resolve({draco}) // Module is Promise-like. Wrap in object to avoid loop.\n });\n });\n}\n"],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
2
3
  import { getMeshBoundingBox } from '@loaders.gl/schema';
3
4
  import { getDracoSchema } from './utils/get-draco-schema';
5
+
4
6
  const GEOMETRY_TYPE = {
5
7
  TRIANGULAR_MESH: 0,
6
8
  POINT_CLOUD: 1
7
9
  };
10
+
8
11
  const DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP = {
9
12
  POSITION: 'POSITION',
10
13
  NORMAL: 'NORMAL',
@@ -24,11 +27,8 @@ const INDEX_ITEM_SIZE = 4;
24
27
  export default class DracoParser {
25
28
  constructor(draco) {
26
29
  _defineProperty(this, "draco", void 0);
27
-
28
30
  _defineProperty(this, "decoder", void 0);
29
-
30
31
  _defineProperty(this, "metadataQuerier", void 0);
31
-
32
32
  this.draco = draco;
33
33
  this.decoder = new this.draco.Decoder();
34
34
  this.metadataQuerier = new this.draco.MetadataQuerier();
@@ -39,40 +39,31 @@ export default class DracoParser {
39
39
  this.draco.destroy(this.metadataQuerier);
40
40
  }
41
41
 
42
- parseSync(arrayBuffer, options = {}) {
42
+ parseSync(arrayBuffer) {
43
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
43
44
  const buffer = new this.draco.DecoderBuffer();
44
45
  buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);
45
-
46
46
  this._disableAttributeTransforms(options);
47
-
48
47
  const geometry_type = this.decoder.GetEncodedGeometryType(buffer);
49
48
  const dracoGeometry = geometry_type === this.draco.TRIANGULAR_MESH ? new this.draco.Mesh() : new this.draco.PointCloud();
50
-
51
49
  try {
52
50
  let dracoStatus;
53
-
54
51
  switch (geometry_type) {
55
52
  case this.draco.TRIANGULAR_MESH:
56
53
  dracoStatus = this.decoder.DecodeBufferToMesh(buffer, dracoGeometry);
57
54
  break;
58
-
59
55
  case this.draco.POINT_CLOUD:
60
56
  dracoStatus = this.decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);
61
57
  break;
62
-
63
58
  default:
64
59
  throw new Error('DRACO: Unknown geometry type.');
65
60
  }
66
-
67
61
  if (!dracoStatus.ok() || !dracoGeometry.ptr) {
68
62
  const message = "DRACO decompression failed: ".concat(dracoStatus.error_msg());
69
63
  throw new Error(message);
70
64
  }
71
-
72
65
  const loaderData = this._getDracoLoaderData(dracoGeometry, geometry_type, options);
73
-
74
66
  const geometry = this._getMeshData(dracoGeometry, loaderData, options);
75
-
76
67
  const boundingBox = getMeshBoundingBox(geometry.attributes);
77
68
  const schema = getDracoSchema(geometry.attributes, loaderData, geometry.indices);
78
69
  const data = {
@@ -88,7 +79,6 @@ export default class DracoParser {
88
79
  return data;
89
80
  } finally {
90
81
  this.draco.destroy(buffer);
91
-
92
82
  if (dracoGeometry) {
93
83
  this.draco.destroy(dracoGeometry);
94
84
  }
@@ -97,9 +87,7 @@ export default class DracoParser {
97
87
 
98
88
  _getDracoLoaderData(dracoGeometry, geometry_type, options) {
99
89
  const metadata = this._getTopLevelMetadata(dracoGeometry);
100
-
101
90
  const attributes = this._getDracoAttributes(dracoGeometry, options);
102
-
103
91
  return {
104
92
  geometry_type,
105
93
  num_attributes: dracoGeometry.num_attributes(),
@@ -112,12 +100,9 @@ export default class DracoParser {
112
100
 
113
101
  _getDracoAttributes(dracoGeometry, options) {
114
102
  const dracoAttributes = {};
115
-
116
103
  for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {
117
104
  const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);
118
-
119
105
  const metadata = this._getAttributeMetadata(dracoGeometry, attributeId);
120
-
121
106
  dracoAttributes[dracoAttribute.unique_id()] = {
122
107
  unique_id: dracoAttribute.unique_id(),
123
108
  attribute_type: dracoAttribute.attribute_type(),
@@ -131,26 +116,20 @@ export default class DracoParser {
131
116
  };
132
117
 
133
118
  const quantization = this._getQuantizationTransform(dracoAttribute, options);
134
-
135
119
  if (quantization) {
136
120
  dracoAttributes[dracoAttribute.unique_id()].quantization_transform = quantization;
137
121
  }
138
-
139
122
  const octahedron = this._getOctahedronTransform(dracoAttribute, options);
140
-
141
123
  if (octahedron) {
142
124
  dracoAttributes[dracoAttribute.unique_id()].octahedron_transform = octahedron;
143
125
  }
144
126
  }
145
-
146
127
  return dracoAttributes;
147
128
  }
148
129
 
149
130
  _getMeshData(dracoGeometry, loaderData, options) {
150
131
  const attributes = this._getMeshAttributes(loaderData, dracoGeometry, options);
151
-
152
132
  const positionAttribute = attributes.POSITION;
153
-
154
133
  if (!positionAttribute) {
155
134
  throw new Error('DRACO: No position attribute found.');
156
135
  }
@@ -167,7 +146,6 @@ export default class DracoParser {
167
146
  size: 1
168
147
  }
169
148
  };
170
-
171
149
  case 'triangle-list':
172
150
  default:
173
151
  return {
@@ -188,20 +166,15 @@ export default class DracoParser {
188
166
  attributes
189
167
  };
190
168
  }
191
-
192
169
  _getMeshAttributes(loaderData, dracoGeometry, options) {
193
170
  const attributes = {};
194
-
195
171
  for (const loaderAttribute of Object.values(loaderData.attributes)) {
196
172
  const attributeName = this._deduceAttributeName(loaderAttribute, options);
197
-
198
173
  loaderAttribute.name = attributeName;
199
-
200
174
  const {
201
175
  value,
202
176
  size
203
177
  } = this._getAttributeValues(dracoGeometry, loaderAttribute);
204
-
205
178
  attributes[attributeName] = {
206
179
  value,
207
180
  size,
@@ -210,7 +183,6 @@ export default class DracoParser {
210
183
  normalized: loaderAttribute.normalized
211
184
  };
212
185
  }
213
-
214
186
  return attributes;
215
187
  }
216
188
 
@@ -218,9 +190,7 @@ export default class DracoParser {
218
190
  const numFaces = dracoGeometry.num_faces();
219
191
  const numIndices = numFaces * 3;
220
192
  const byteLength = numIndices * INDEX_ITEM_SIZE;
221
-
222
193
  const ptr = this.draco._malloc(byteLength);
223
-
224
194
  try {
225
195
  this.decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);
226
196
  return new Uint32Array(this.draco.HEAPF32.buffer, ptr, numIndices).slice();
@@ -231,7 +201,6 @@ export default class DracoParser {
231
201
 
232
202
  _getTriangleStripIndices(dracoGeometry) {
233
203
  const dracoArray = new this.draco.DracoInt32Array();
234
-
235
204
  try {
236
205
  this.decoder.GetTriangleStripsFromMesh(dracoGeometry, dracoArray);
237
206
  return getUint32Array(dracoArray);
@@ -248,9 +217,7 @@ export default class DracoParser {
248
217
  const byteLength = numValues * TypedArrayCtor.BYTES_PER_ELEMENT;
249
218
  const dataType = getDracoDataType(this.draco, TypedArrayCtor);
250
219
  let value;
251
-
252
220
  const ptr = this.draco._malloc(byteLength);
253
-
254
221
  try {
255
222
  const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attribute.attribute_index);
256
223
  this.decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, dracoAttribute, dataType, byteLength, ptr);
@@ -258,7 +225,6 @@ export default class DracoParser {
258
225
  } finally {
259
226
  this.draco._free(ptr);
260
227
  }
261
-
262
228
  return {
263
229
  value,
264
230
  size: numComponents
@@ -267,7 +233,6 @@ export default class DracoParser {
267
233
 
268
234
  _deduceAttributeName(attribute, options) {
269
235
  const uniqueId = attribute.unique_id;
270
-
271
236
  for (const [attributeName, attributeUniqueId] of Object.entries(options.extraAttributes || {})) {
272
237
  if (attributeUniqueId === uniqueId) {
273
238
  return attributeName;
@@ -275,17 +240,14 @@ export default class DracoParser {
275
240
  }
276
241
 
277
242
  const thisAttributeType = attribute.attribute_type;
278
-
279
243
  for (const dracoAttributeConstant in DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP) {
280
244
  const attributeType = this.draco[dracoAttributeConstant];
281
-
282
245
  if (attributeType === thisAttributeType) {
283
246
  return DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP[dracoAttributeConstant];
284
247
  }
285
248
  }
286
249
 
287
250
  const entryName = options.attributeNameEntry || 'name';
288
-
289
251
  if (attribute.metadata[entryName]) {
290
252
  return attribute.metadata[entryName].string;
291
253
  }
@@ -307,21 +269,17 @@ export default class DracoParser {
307
269
  if (!dracoMetadata || !dracoMetadata.ptr) {
308
270
  return {};
309
271
  }
310
-
311
272
  const result = {};
312
273
  const numEntries = this.metadataQuerier.NumEntries(dracoMetadata);
313
-
314
274
  for (let entryIndex = 0; entryIndex < numEntries; entryIndex++) {
315
275
  const entryName = this.metadataQuerier.GetEntryName(dracoMetadata, entryIndex);
316
276
  result[entryName] = this._getDracoMetadataField(dracoMetadata, entryName);
317
277
  }
318
-
319
278
  return result;
320
279
  }
321
280
 
322
281
  _getDracoMetadataField(dracoMetadata, entryName) {
323
282
  const dracoArray = new this.draco.DracoInt32Array();
324
-
325
283
  try {
326
284
  this.metadataQuerier.GetIntEntryArray(dracoMetadata, entryName, dracoArray);
327
285
  const intArray = getInt32Array(dracoArray);
@@ -342,7 +300,6 @@ export default class DracoParser {
342
300
  octahedronAttributes = []
343
301
  } = options;
344
302
  const skipAttributes = [...quantizedAttributes, ...octahedronAttributes];
345
-
346
303
  for (const dracoAttributeName of skipAttributes) {
347
304
  this.decoder.SkipAttributeTransform(this.draco[dracoAttributeName]);
348
305
  }
@@ -354,10 +311,8 @@ export default class DracoParser {
354
311
  } = options;
355
312
  const attribute_type = dracoAttribute.attribute_type();
356
313
  const skip = quantizedAttributes.map(type => this.decoder[type]).includes(attribute_type);
357
-
358
314
  if (skip) {
359
315
  const transform = new this.draco.AttributeQuantizationTransform();
360
-
361
316
  try {
362
317
  if (transform.InitFromAttribute(dracoAttribute)) {
363
318
  return {
@@ -370,20 +325,16 @@ export default class DracoParser {
370
325
  this.draco.destroy(transform);
371
326
  }
372
327
  }
373
-
374
328
  return null;
375
329
  }
376
-
377
330
  _getOctahedronTransform(dracoAttribute, options) {
378
331
  const {
379
332
  octahedronAttributes = []
380
333
  } = options;
381
334
  const attribute_type = dracoAttribute.attribute_type();
382
335
  const octahedron = octahedronAttributes.map(type => this.decoder[type]).includes(attribute_type);
383
-
384
336
  if (octahedron) {
385
337
  const transform = new this.draco.AttributeQuantizationTransform();
386
-
387
338
  try {
388
339
  if (transform.InitFromAttribute(dracoAttribute)) {
389
340
  return {
@@ -394,7 +345,6 @@ export default class DracoParser {
394
345
  this.draco.destroy(transform);
395
346
  }
396
347
  }
397
-
398
348
  return null;
399
349
  }
400
350
 
@@ -404,25 +354,18 @@ function getDracoDataType(draco, attributeType) {
404
354
  switch (attributeType) {
405
355
  case Float32Array:
406
356
  return draco.DT_FLOAT32;
407
-
408
357
  case Int8Array:
409
358
  return draco.DT_INT8;
410
-
411
359
  case Int16Array:
412
360
  return draco.DT_INT16;
413
-
414
361
  case Int32Array:
415
362
  return draco.DT_INT32;
416
-
417
363
  case Uint8Array:
418
364
  return draco.DT_UINT8;
419
-
420
365
  case Uint16Array:
421
366
  return draco.DT_UINT16;
422
-
423
367
  case Uint32Array:
424
368
  return draco.DT_UINT32;
425
-
426
369
  default:
427
370
  return draco.DT_INVALID;
428
371
  }
@@ -431,22 +374,18 @@ function getDracoDataType(draco, attributeType) {
431
374
  function getInt32Array(dracoArray) {
432
375
  const numValues = dracoArray.size();
433
376
  const intArray = new Int32Array(numValues);
434
-
435
377
  for (let i = 0; i < numValues; i++) {
436
378
  intArray[i] = dracoArray.GetValue(i);
437
379
  }
438
-
439
380
  return intArray;
440
381
  }
441
382
 
442
383
  function getUint32Array(dracoArray) {
443
384
  const numValues = dracoArray.size();
444
385
  const intArray = new Int32Array(numValues);
445
-
446
386
  for (let i = 0; i < numValues; i++) {
447
387
  intArray[i] = dracoArray.GetValue(i);
448
388
  }
449
-
450
389
  return intArray;
451
390
  }
452
391
  //# sourceMappingURL=draco-parser.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/draco-parser.ts"],"names":["getMeshBoundingBox","getDracoSchema","GEOMETRY_TYPE","TRIANGULAR_MESH","POINT_CLOUD","DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP","POSITION","NORMAL","COLOR","TEX_COORD","DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP","Int8Array","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","INDEX_ITEM_SIZE","DracoParser","constructor","draco","decoder","Decoder","metadataQuerier","MetadataQuerier","destroy","parseSync","arrayBuffer","options","buffer","DecoderBuffer","Init","byteLength","_disableAttributeTransforms","geometry_type","GetEncodedGeometryType","dracoGeometry","Mesh","PointCloud","dracoStatus","DecodeBufferToMesh","DecodeBufferToPointCloud","Error","ok","ptr","message","error_msg","loaderData","_getDracoLoaderData","geometry","_getMeshData","boundingBox","attributes","schema","indices","data","loader","header","vertexCount","num_points","metadata","_getTopLevelMetadata","_getDracoAttributes","num_attributes","num_faces","dracoAttributes","attributeId","dracoAttribute","GetAttribute","_getAttributeMetadata","unique_id","attribute_type","data_type","num_components","byte_offset","byte_stride","normalized","attribute_index","quantization","_getQuantizationTransform","quantization_transform","octahedron","_getOctahedronTransform","octahedron_transform","_getMeshAttributes","positionAttribute","topology","mode","value","_getTriangleStripIndices","size","_getTriangleListIndices","loaderAttribute","Object","values","attributeName","_deduceAttributeName","name","_getAttributeValues","byteOffset","byteStride","numFaces","numIndices","_malloc","GetTrianglesUInt32Array","HEAPF32","slice","_free","dracoArray","DracoInt32Array","GetTriangleStripsFromMesh","getUint32Array","attribute","TypedArrayCtor","numComponents","numPoints","numValues","BYTES_PER_ELEMENT","dataType","getDracoDataType","GetAttributeDataArrayForAllPoints","uniqueId","attributeUniqueId","entries","extraAttributes","thisAttributeType","dracoAttributeConstant","attributeType","entryName","attributeNameEntry","string","dracoMetadata","GetMetadata","_getDracoMetadata","GetAttributeMetadata","result","numEntries","NumEntries","entryIndex","GetEntryName","_getDracoMetadataField","GetIntEntryArray","intArray","getInt32Array","int","GetIntEntry","GetStringEntry","double","GetDoubleEntry","quantizedAttributes","octahedronAttributes","skipAttributes","dracoAttributeName","SkipAttributeTransform","skip","map","type","includes","transform","AttributeQuantizationTransform","InitFromAttribute","quantization_bits","range","min_values","i","min_value","DT_FLOAT32","DT_INT8","DT_INT16","DT_INT32","DT_UINT8","DT_UINT16","DT_UINT32","DT_INVALID","GetValue"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\n\nimport type {TypedArray, MeshAttribute, MeshGeometry} from '@loaders.gl/schema';\n\n// Draco types (input)\nimport type {\n Draco3D,\n Decoder,\n Mesh,\n PointCloud,\n PointAttribute,\n Metadata,\n MetadataQuerier,\n DracoInt32Array,\n draco_DataType\n} from '../draco3d/draco3d-types';\n\n// Parsed data types (output)\nimport type {\n DracoMesh,\n DracoLoaderData,\n DracoAttribute,\n DracoMetadataEntry,\n DracoQuantizationTransform,\n DracoOctahedronTransform\n} from './draco-types';\n\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {getDracoSchema} from './utils/get-draco-schema';\n\n/**\n * @param topology - How triangle indices should be generated (mesh only)\n * @param attributeNameEntry\n * @param extraAttributes\n * @param quantizedAttributes\n * @param octahedronAttributes\n */\nexport type DracoParseOptions = {\n topology?: 'triangle-list' | 'triangle-strip';\n attributeNameEntry?: string;\n extraAttributes?: {[uniqueId: string]: number};\n quantizedAttributes?: ('POSITION' | 'NORMAL' | 'COLOR' | 'TEX_COORD' | 'GENERIC')[];\n octahedronAttributes?: ('POSITION' | 'NORMAL' | 'COLOR' | 'TEX_COORD' | 'GENERIC')[];\n};\n\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst GEOMETRY_TYPE = {\n TRIANGULAR_MESH: 0,\n POINT_CLOUD: 1\n};\n\n// Native Draco attribute names to GLTF attribute names.\nconst DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP = {\n POSITION: 'POSITION',\n NORMAL: 'NORMAL',\n COLOR: 'COLOR_0',\n TEX_COORD: 'TEXCOORD_0'\n};\n\nconst DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP = {\n 1: Int8Array,\n 2: Uint8Array,\n 3: Int16Array,\n 4: Uint16Array,\n 5: Int32Array,\n 6: Uint32Array,\n 9: Float32Array\n};\n\nconst INDEX_ITEM_SIZE = 4;\n\nexport default class DracoParser {\n draco: Draco3D;\n decoder: Decoder;\n metadataQuerier: MetadataQuerier;\n\n // draco - the draco decoder, either import `draco3d` or load dynamically\n constructor(draco: Draco3D) {\n this.draco = draco;\n this.decoder = new this.draco.Decoder();\n this.metadataQuerier = new this.draco.MetadataQuerier();\n }\n\n /**\n * Destroy draco resources\n */\n destroy(): void {\n this.draco.destroy(this.decoder);\n this.draco.destroy(this.metadataQuerier);\n }\n\n /**\n * NOTE: caller must call `destroyGeometry` on the return value after using it\n * @param arrayBuffer\n * @param options\n */\n parseSync(arrayBuffer: ArrayBuffer, options: DracoParseOptions = {}): DracoMesh {\n const buffer = new this.draco.DecoderBuffer();\n buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);\n\n this._disableAttributeTransforms(options);\n\n const geometry_type = this.decoder.GetEncodedGeometryType(buffer);\n const dracoGeometry =\n geometry_type === this.draco.TRIANGULAR_MESH\n ? new this.draco.Mesh()\n : new this.draco.PointCloud();\n\n try {\n let dracoStatus;\n switch (geometry_type) {\n case this.draco.TRIANGULAR_MESH:\n dracoStatus = this.decoder.DecodeBufferToMesh(buffer, dracoGeometry as Mesh);\n break;\n\n case this.draco.POINT_CLOUD:\n dracoStatus = this.decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);\n break;\n\n default:\n throw new Error('DRACO: Unknown geometry type.');\n }\n\n if (!dracoStatus.ok() || !dracoGeometry.ptr) {\n const message = `DRACO decompression failed: ${dracoStatus.error_msg()}`;\n // console.error(message);\n throw new Error(message);\n }\n\n const loaderData = this._getDracoLoaderData(dracoGeometry, geometry_type, options);\n\n const geometry = this._getMeshData(dracoGeometry, loaderData, options);\n\n const boundingBox = getMeshBoundingBox(geometry.attributes);\n\n const schema = getDracoSchema(geometry.attributes, loaderData, geometry.indices);\n\n const data: DracoMesh = {\n loader: 'draco',\n loaderData,\n header: {\n vertexCount: dracoGeometry.num_points(),\n boundingBox\n },\n ...geometry,\n schema\n };\n return data;\n } finally {\n this.draco.destroy(buffer);\n if (dracoGeometry) {\n this.draco.destroy(dracoGeometry);\n }\n }\n }\n\n // Draco specific \"loader data\"\n\n /**\n * Extract\n * @param dracoGeometry\n * @param geometry_type\n * @param options\n * @returns\n */\n _getDracoLoaderData(\n dracoGeometry: Mesh | PointCloud,\n geometry_type,\n options: DracoParseOptions\n ): DracoLoaderData {\n const metadata = this._getTopLevelMetadata(dracoGeometry);\n const attributes = this._getDracoAttributes(dracoGeometry, options);\n\n return {\n geometry_type,\n num_attributes: dracoGeometry.num_attributes(),\n num_points: dracoGeometry.num_points(),\n num_faces: dracoGeometry instanceof this.draco.Mesh ? dracoGeometry.num_faces() : 0,\n metadata,\n attributes\n };\n }\n\n /**\n * Extract all draco provided information and metadata for each attribute\n * @param dracoGeometry\n * @param options\n * @returns\n */\n _getDracoAttributes(\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[unique_id: number]: DracoAttribute} {\n const dracoAttributes: {[unique_id: number]: DracoAttribute} = {};\n\n for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {\n // Note: Draco docs do not seem clear on `GetAttribute` ids just being a zero-based index,\n // but it does seems to work this way\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);\n\n const metadata = this._getAttributeMetadata(dracoGeometry, attributeId);\n\n dracoAttributes[dracoAttribute.unique_id()] = {\n unique_id: dracoAttribute.unique_id(),\n attribute_type: dracoAttribute.attribute_type(),\n data_type: dracoAttribute.data_type(),\n num_components: dracoAttribute.num_components(),\n\n byte_offset: dracoAttribute.byte_offset(),\n byte_stride: dracoAttribute.byte_stride(),\n normalized: dracoAttribute.normalized(),\n attribute_index: attributeId,\n\n metadata\n };\n\n // Add transformation parameters for any attributes app wants untransformed\n const quantization = this._getQuantizationTransform(dracoAttribute, options);\n if (quantization) {\n dracoAttributes[dracoAttribute.unique_id()].quantization_transform = quantization;\n }\n\n const octahedron = this._getOctahedronTransform(dracoAttribute, options);\n if (octahedron) {\n dracoAttributes[dracoAttribute.unique_id()].octahedron_transform = octahedron;\n }\n }\n\n return dracoAttributes;\n }\n\n /**\n * Get standard loaders.gl mesh category data\n * Extracts the geometry from draco\n * @param dracoGeometry\n * @param options\n */\n _getMeshData(\n dracoGeometry: Mesh | PointCloud,\n loaderData: DracoLoaderData,\n options: DracoParseOptions\n ): MeshGeometry {\n const attributes = this._getMeshAttributes(loaderData, dracoGeometry, options);\n\n const positionAttribute = attributes.POSITION;\n if (!positionAttribute) {\n throw new Error('DRACO: No position attribute found.');\n }\n\n // For meshes, we need indices to define the faces.\n if (dracoGeometry instanceof this.draco.Mesh) {\n switch (options.topology) {\n case 'triangle-strip':\n return {\n topology: 'triangle-strip',\n mode: 4, // GL.TRIANGLES\n attributes,\n indices: {\n value: this._getTriangleStripIndices(dracoGeometry),\n size: 1\n }\n };\n case 'triangle-list':\n default:\n return {\n topology: 'triangle-list',\n mode: 5, // GL.TRIANGLE_STRIP\n attributes,\n indices: {\n value: this._getTriangleListIndices(dracoGeometry),\n size: 1\n }\n };\n }\n }\n\n // PointCloud - must come last as Mesh inherits from PointCloud\n return {\n topology: 'point-list',\n mode: 0, // GL.POINTS\n attributes\n };\n }\n\n _getMeshAttributes(\n loaderData: DracoLoaderData,\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[attributeName: string]: MeshAttribute} {\n const attributes: {[key: string]: MeshAttribute} = {};\n\n for (const loaderAttribute of Object.values(loaderData.attributes)) {\n const attributeName = this._deduceAttributeName(loaderAttribute, options);\n loaderAttribute.name = attributeName;\n const {value, size} = this._getAttributeValues(dracoGeometry, loaderAttribute);\n attributes[attributeName] = {\n value,\n size,\n byteOffset: loaderAttribute.byte_offset,\n byteStride: loaderAttribute.byte_stride,\n normalized: loaderAttribute.normalized\n };\n }\n\n return attributes;\n }\n\n // MESH INDICES EXTRACTION\n\n /**\n * For meshes, we need indices to define the faces.\n * @param dracoGeometry\n */\n _getTriangleListIndices(dracoGeometry: Mesh) {\n // Example on how to retrieve mesh and attributes.\n const numFaces = dracoGeometry.num_faces();\n const numIndices = numFaces * 3;\n const byteLength = numIndices * INDEX_ITEM_SIZE;\n\n const ptr = this.draco._malloc(byteLength);\n try {\n this.decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);\n return new Uint32Array(this.draco.HEAPF32.buffer, ptr, numIndices).slice();\n } finally {\n this.draco._free(ptr);\n }\n }\n\n /**\n * For meshes, we need indices to define the faces.\n * @param dracoGeometry\n */\n _getTriangleStripIndices(dracoGeometry: Mesh) {\n const dracoArray = new this.draco.DracoInt32Array();\n try {\n /* const numStrips = */ this.decoder.GetTriangleStripsFromMesh(dracoGeometry, dracoArray);\n return getUint32Array(dracoArray);\n } finally {\n this.draco.destroy(dracoArray);\n }\n }\n\n /**\n *\n * @param dracoGeometry\n * @param dracoAttribute\n * @param attributeName\n */\n _getAttributeValues(\n dracoGeometry: Mesh | PointCloud,\n attribute: DracoAttribute\n ): {value: TypedArray; size: number} {\n const TypedArrayCtor = DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP[attribute.data_type];\n const numComponents = attribute.num_components;\n const numPoints = dracoGeometry.num_points();\n const numValues = numPoints * numComponents;\n\n const byteLength = numValues * TypedArrayCtor.BYTES_PER_ELEMENT;\n const dataType = getDracoDataType(this.draco, TypedArrayCtor);\n\n let value: TypedArray;\n\n const ptr = this.draco._malloc(byteLength);\n try {\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attribute.attribute_index);\n this.decoder.GetAttributeDataArrayForAllPoints(\n dracoGeometry,\n dracoAttribute,\n dataType,\n byteLength,\n ptr\n );\n value = new TypedArrayCtor(this.draco.HEAPF32.buffer, ptr, numValues).slice();\n } finally {\n this.draco._free(ptr);\n }\n\n return {value, size: numComponents};\n }\n\n // Attribute names\n\n /** \n * DRACO does not store attribute names - We need to deduce an attribute name\n * for each attribute\n _getAttributeNames(\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[unique_id: number]: string} {\n const attributeNames: {[unique_id: number]: string} = {};\n for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);\n const attributeName = this._deduceAttributeName(dracoAttribute, options);\n attributeNames[attributeName] = attributeName;\n }\n return attributeNames;\n }\n */\n\n /**\n * Deduce an attribute name.\n * @note DRACO does not save attribute names, just general type (POSITION, COLOR)\n * to help optimize compression. We generate GLTF compatible names for the Draco-recognized\n * types\n * @param attributeData\n */\n _deduceAttributeName(attribute: DracoAttribute, options: DracoParseOptions): string {\n // Deduce name based on application provided map\n const uniqueId = attribute.unique_id;\n for (const [attributeName, attributeUniqueId] of Object.entries(\n options.extraAttributes || {}\n )) {\n if (attributeUniqueId === uniqueId) {\n return attributeName;\n }\n }\n\n // Deduce name based on attribute type\n const thisAttributeType = attribute.attribute_type;\n for (const dracoAttributeConstant in DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP) {\n const attributeType = this.draco[dracoAttributeConstant];\n if (attributeType === thisAttributeType) {\n // TODO - Return unique names if there multiple attributes per type\n // (e.g. multiple TEX_COORDS or COLORS)\n return DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP[dracoAttributeConstant];\n }\n }\n\n // Look up in metadata\n // TODO - shouldn't this have priority?\n const entryName = options.attributeNameEntry || 'name';\n if (attribute.metadata[entryName]) {\n return attribute.metadata[entryName].string;\n }\n\n // Attribute of \"GENERIC\" type, we need to assign some name\n return `CUSTOM_ATTRIBUTE_${uniqueId}`;\n }\n\n // METADATA EXTRACTION\n\n /** Get top level metadata */\n _getTopLevelMetadata(dracoGeometry: Mesh | PointCloud) {\n const dracoMetadata = this.decoder.GetMetadata(dracoGeometry);\n return this._getDracoMetadata(dracoMetadata);\n }\n\n /** Get per attribute metadata */\n _getAttributeMetadata(dracoGeometry: Mesh | PointCloud, attributeId: number) {\n const dracoMetadata = this.decoder.GetAttributeMetadata(dracoGeometry, attributeId);\n return this._getDracoMetadata(dracoMetadata);\n }\n\n /**\n * Extract metadata field values\n * @param dracoMetadata\n * @returns\n */\n _getDracoMetadata(dracoMetadata: Metadata): {[entry: string]: DracoMetadataEntry} {\n // The not so wonderful world of undocumented Draco APIs :(\n if (!dracoMetadata || !dracoMetadata.ptr) {\n return {};\n }\n const result = {};\n const numEntries = this.metadataQuerier.NumEntries(dracoMetadata);\n for (let entryIndex = 0; entryIndex < numEntries; entryIndex++) {\n const entryName = this.metadataQuerier.GetEntryName(dracoMetadata, entryIndex);\n result[entryName] = this._getDracoMetadataField(dracoMetadata, entryName);\n }\n return result;\n }\n\n /**\n * Extracts possible values for one metadata entry by name\n * @param dracoMetadata\n * @param entryName\n */\n _getDracoMetadataField(dracoMetadata: Metadata, entryName: string): DracoMetadataEntry {\n const dracoArray = new this.draco.DracoInt32Array();\n try {\n // Draco metadata fields can hold int32 arrays\n this.metadataQuerier.GetIntEntryArray(dracoMetadata, entryName, dracoArray);\n const intArray = getInt32Array(dracoArray);\n return {\n int: this.metadataQuerier.GetIntEntry(dracoMetadata, entryName),\n string: this.metadataQuerier.GetStringEntry(dracoMetadata, entryName),\n double: this.metadataQuerier.GetDoubleEntry(dracoMetadata, entryName),\n intArray\n };\n } finally {\n this.draco.destroy(dracoArray);\n }\n }\n\n // QUANTIZED ATTRIBUTE SUPPORT (NO DECOMPRESSION)\n\n /** Skip transforms for specific attribute types */\n _disableAttributeTransforms(options: DracoParseOptions) {\n const {quantizedAttributes = [], octahedronAttributes = []} = options;\n const skipAttributes = [...quantizedAttributes, ...octahedronAttributes];\n for (const dracoAttributeName of skipAttributes) {\n this.decoder.SkipAttributeTransform(this.draco[dracoAttributeName]);\n }\n }\n\n /**\n * Extract (and apply?) Position Transform\n * @todo not used\n */\n _getQuantizationTransform(\n dracoAttribute: PointAttribute,\n options: DracoParseOptions\n ): DracoQuantizationTransform | null {\n const {quantizedAttributes = []} = options;\n const attribute_type = dracoAttribute.attribute_type();\n const skip = quantizedAttributes.map((type) => this.decoder[type]).includes(attribute_type);\n if (skip) {\n const transform = new this.draco.AttributeQuantizationTransform();\n try {\n if (transform.InitFromAttribute(dracoAttribute)) {\n return {\n quantization_bits: transform.quantization_bits(),\n range: transform.range(),\n min_values: new Float32Array([1, 2, 3]).map((i) => transform.min_value(i))\n };\n }\n } finally {\n this.draco.destroy(transform);\n }\n }\n return null;\n }\n\n _getOctahedronTransform(\n dracoAttribute: PointAttribute,\n options: DracoParseOptions\n ): DracoOctahedronTransform | null {\n const {octahedronAttributes = []} = options;\n const attribute_type = dracoAttribute.attribute_type();\n const octahedron = octahedronAttributes\n .map((type) => this.decoder[type])\n .includes(attribute_type);\n if (octahedron) {\n const transform = new this.draco.AttributeQuantizationTransform();\n try {\n if (transform.InitFromAttribute(dracoAttribute)) {\n return {\n quantization_bits: transform.quantization_bits()\n };\n }\n } finally {\n this.draco.destroy(transform);\n }\n }\n return null;\n }\n\n // HELPERS\n}\n\n/**\n * Get draco specific data type by TypedArray constructor type\n * @param attributeType\n * @returns draco specific data type\n */\nfunction getDracoDataType(draco: Draco3D, attributeType: any): draco_DataType {\n switch (attributeType) {\n case Float32Array:\n return draco.DT_FLOAT32;\n case Int8Array:\n return draco.DT_INT8;\n case Int16Array:\n return draco.DT_INT16;\n case Int32Array:\n return draco.DT_INT32;\n case Uint8Array:\n return draco.DT_UINT8;\n case Uint16Array:\n return draco.DT_UINT16;\n case Uint32Array:\n return draco.DT_UINT32;\n default:\n return draco.DT_INVALID;\n }\n}\n\n/**\n * Copy a Draco int32 array into a JS typed array\n */\nfunction getInt32Array(dracoArray: DracoInt32Array): Int32Array {\n const numValues = dracoArray.size();\n const intArray = new Int32Array(numValues);\n for (let i = 0; i < numValues; i++) {\n intArray[i] = dracoArray.GetValue(i);\n }\n return intArray;\n}\n\n/**\n * Copy a Draco int32 array into a JS typed array\n */\nfunction getUint32Array(dracoArray: DracoInt32Array): Int32Array {\n const numValues = dracoArray.size();\n const intArray = new Int32Array(numValues);\n for (let i = 0; i < numValues; i++) {\n intArray[i] = dracoArray.GetValue(i);\n }\n return intArray;\n}\n"],"file":"draco-parser.js"}
1
+ {"version":3,"file":"draco-parser.js","names":["getMeshBoundingBox","getDracoSchema","GEOMETRY_TYPE","TRIANGULAR_MESH","POINT_CLOUD","DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP","POSITION","NORMAL","COLOR","TEX_COORD","DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP","Int8Array","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","INDEX_ITEM_SIZE","DracoParser","constructor","draco","decoder","Decoder","metadataQuerier","MetadataQuerier","destroy","parseSync","arrayBuffer","options","buffer","DecoderBuffer","Init","byteLength","_disableAttributeTransforms","geometry_type","GetEncodedGeometryType","dracoGeometry","Mesh","PointCloud","dracoStatus","DecodeBufferToMesh","DecodeBufferToPointCloud","Error","ok","ptr","message","error_msg","loaderData","_getDracoLoaderData","geometry","_getMeshData","boundingBox","attributes","schema","indices","data","loader","header","vertexCount","num_points","metadata","_getTopLevelMetadata","_getDracoAttributes","num_attributes","num_faces","dracoAttributes","attributeId","dracoAttribute","GetAttribute","_getAttributeMetadata","unique_id","attribute_type","data_type","num_components","byte_offset","byte_stride","normalized","attribute_index","quantization","_getQuantizationTransform","quantization_transform","octahedron","_getOctahedronTransform","octahedron_transform","_getMeshAttributes","positionAttribute","topology","mode","value","_getTriangleStripIndices","size","_getTriangleListIndices","loaderAttribute","Object","values","attributeName","_deduceAttributeName","name","_getAttributeValues","byteOffset","byteStride","numFaces","numIndices","_malloc","GetTrianglesUInt32Array","HEAPF32","slice","_free","dracoArray","DracoInt32Array","GetTriangleStripsFromMesh","getUint32Array","attribute","TypedArrayCtor","numComponents","numPoints","numValues","BYTES_PER_ELEMENT","dataType","getDracoDataType","GetAttributeDataArrayForAllPoints","uniqueId","attributeUniqueId","entries","extraAttributes","thisAttributeType","dracoAttributeConstant","attributeType","entryName","attributeNameEntry","string","dracoMetadata","GetMetadata","_getDracoMetadata","GetAttributeMetadata","result","numEntries","NumEntries","entryIndex","GetEntryName","_getDracoMetadataField","GetIntEntryArray","intArray","getInt32Array","int","GetIntEntry","GetStringEntry","double","GetDoubleEntry","quantizedAttributes","octahedronAttributes","skipAttributes","dracoAttributeName","SkipAttributeTransform","skip","map","type","includes","transform","AttributeQuantizationTransform","InitFromAttribute","quantization_bits","range","min_values","i","min_value","DT_FLOAT32","DT_INT8","DT_INT16","DT_INT32","DT_UINT8","DT_UINT16","DT_UINT32","DT_INVALID","GetValue"],"sources":["../../../src/lib/draco-parser.ts"],"sourcesContent":["/* eslint-disable camelcase */\n\nimport type {TypedArray, MeshAttribute, MeshGeometry} from '@loaders.gl/schema';\n\n// Draco types (input)\nimport type {\n Draco3D,\n Decoder,\n Mesh,\n PointCloud,\n PointAttribute,\n Metadata,\n MetadataQuerier,\n DracoInt32Array,\n draco_DataType\n} from '../draco3d/draco3d-types';\n\n// Parsed data types (output)\nimport type {\n DracoMesh,\n DracoLoaderData,\n DracoAttribute,\n DracoMetadataEntry,\n DracoQuantizationTransform,\n DracoOctahedronTransform\n} from './draco-types';\n\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {getDracoSchema} from './utils/get-draco-schema';\n\n/**\n * @param topology - How triangle indices should be generated (mesh only)\n * @param attributeNameEntry\n * @param extraAttributes\n * @param quantizedAttributes\n * @param octahedronAttributes\n */\nexport type DracoParseOptions = {\n topology?: 'triangle-list' | 'triangle-strip';\n attributeNameEntry?: string;\n extraAttributes?: {[uniqueId: string]: number};\n quantizedAttributes?: ('POSITION' | 'NORMAL' | 'COLOR' | 'TEX_COORD' | 'GENERIC')[];\n octahedronAttributes?: ('POSITION' | 'NORMAL' | 'COLOR' | 'TEX_COORD' | 'GENERIC')[];\n};\n\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst GEOMETRY_TYPE = {\n TRIANGULAR_MESH: 0,\n POINT_CLOUD: 1\n};\n\n// Native Draco attribute names to GLTF attribute names.\nconst DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP = {\n POSITION: 'POSITION',\n NORMAL: 'NORMAL',\n COLOR: 'COLOR_0',\n TEX_COORD: 'TEXCOORD_0'\n};\n\nconst DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP = {\n 1: Int8Array,\n 2: Uint8Array,\n 3: Int16Array,\n 4: Uint16Array,\n 5: Int32Array,\n 6: Uint32Array,\n 9: Float32Array\n};\n\nconst INDEX_ITEM_SIZE = 4;\n\nexport default class DracoParser {\n draco: Draco3D;\n decoder: Decoder;\n metadataQuerier: MetadataQuerier;\n\n // draco - the draco decoder, either import `draco3d` or load dynamically\n constructor(draco: Draco3D) {\n this.draco = draco;\n this.decoder = new this.draco.Decoder();\n this.metadataQuerier = new this.draco.MetadataQuerier();\n }\n\n /**\n * Destroy draco resources\n */\n destroy(): void {\n this.draco.destroy(this.decoder);\n this.draco.destroy(this.metadataQuerier);\n }\n\n /**\n * NOTE: caller must call `destroyGeometry` on the return value after using it\n * @param arrayBuffer\n * @param options\n */\n parseSync(arrayBuffer: ArrayBuffer, options: DracoParseOptions = {}): DracoMesh {\n const buffer = new this.draco.DecoderBuffer();\n buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);\n\n this._disableAttributeTransforms(options);\n\n const geometry_type = this.decoder.GetEncodedGeometryType(buffer);\n const dracoGeometry =\n geometry_type === this.draco.TRIANGULAR_MESH\n ? new this.draco.Mesh()\n : new this.draco.PointCloud();\n\n try {\n let dracoStatus;\n switch (geometry_type) {\n case this.draco.TRIANGULAR_MESH:\n dracoStatus = this.decoder.DecodeBufferToMesh(buffer, dracoGeometry as Mesh);\n break;\n\n case this.draco.POINT_CLOUD:\n dracoStatus = this.decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);\n break;\n\n default:\n throw new Error('DRACO: Unknown geometry type.');\n }\n\n if (!dracoStatus.ok() || !dracoGeometry.ptr) {\n const message = `DRACO decompression failed: ${dracoStatus.error_msg()}`;\n // console.error(message);\n throw new Error(message);\n }\n\n const loaderData = this._getDracoLoaderData(dracoGeometry, geometry_type, options);\n\n const geometry = this._getMeshData(dracoGeometry, loaderData, options);\n\n const boundingBox = getMeshBoundingBox(geometry.attributes);\n\n const schema = getDracoSchema(geometry.attributes, loaderData, geometry.indices);\n\n const data: DracoMesh = {\n loader: 'draco',\n loaderData,\n header: {\n vertexCount: dracoGeometry.num_points(),\n boundingBox\n },\n ...geometry,\n schema\n };\n return data;\n } finally {\n this.draco.destroy(buffer);\n if (dracoGeometry) {\n this.draco.destroy(dracoGeometry);\n }\n }\n }\n\n // Draco specific \"loader data\"\n\n /**\n * Extract\n * @param dracoGeometry\n * @param geometry_type\n * @param options\n * @returns\n */\n _getDracoLoaderData(\n dracoGeometry: Mesh | PointCloud,\n geometry_type,\n options: DracoParseOptions\n ): DracoLoaderData {\n const metadata = this._getTopLevelMetadata(dracoGeometry);\n const attributes = this._getDracoAttributes(dracoGeometry, options);\n\n return {\n geometry_type,\n num_attributes: dracoGeometry.num_attributes(),\n num_points: dracoGeometry.num_points(),\n num_faces: dracoGeometry instanceof this.draco.Mesh ? dracoGeometry.num_faces() : 0,\n metadata,\n attributes\n };\n }\n\n /**\n * Extract all draco provided information and metadata for each attribute\n * @param dracoGeometry\n * @param options\n * @returns\n */\n _getDracoAttributes(\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[unique_id: number]: DracoAttribute} {\n const dracoAttributes: {[unique_id: number]: DracoAttribute} = {};\n\n for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {\n // Note: Draco docs do not seem clear on `GetAttribute` ids just being a zero-based index,\n // but it does seems to work this way\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);\n\n const metadata = this._getAttributeMetadata(dracoGeometry, attributeId);\n\n dracoAttributes[dracoAttribute.unique_id()] = {\n unique_id: dracoAttribute.unique_id(),\n attribute_type: dracoAttribute.attribute_type(),\n data_type: dracoAttribute.data_type(),\n num_components: dracoAttribute.num_components(),\n\n byte_offset: dracoAttribute.byte_offset(),\n byte_stride: dracoAttribute.byte_stride(),\n normalized: dracoAttribute.normalized(),\n attribute_index: attributeId,\n\n metadata\n };\n\n // Add transformation parameters for any attributes app wants untransformed\n const quantization = this._getQuantizationTransform(dracoAttribute, options);\n if (quantization) {\n dracoAttributes[dracoAttribute.unique_id()].quantization_transform = quantization;\n }\n\n const octahedron = this._getOctahedronTransform(dracoAttribute, options);\n if (octahedron) {\n dracoAttributes[dracoAttribute.unique_id()].octahedron_transform = octahedron;\n }\n }\n\n return dracoAttributes;\n }\n\n /**\n * Get standard loaders.gl mesh category data\n * Extracts the geometry from draco\n * @param dracoGeometry\n * @param options\n */\n _getMeshData(\n dracoGeometry: Mesh | PointCloud,\n loaderData: DracoLoaderData,\n options: DracoParseOptions\n ): MeshGeometry {\n const attributes = this._getMeshAttributes(loaderData, dracoGeometry, options);\n\n const positionAttribute = attributes.POSITION;\n if (!positionAttribute) {\n throw new Error('DRACO: No position attribute found.');\n }\n\n // For meshes, we need indices to define the faces.\n if (dracoGeometry instanceof this.draco.Mesh) {\n switch (options.topology) {\n case 'triangle-strip':\n return {\n topology: 'triangle-strip',\n mode: 4, // GL.TRIANGLES\n attributes,\n indices: {\n value: this._getTriangleStripIndices(dracoGeometry),\n size: 1\n }\n };\n case 'triangle-list':\n default:\n return {\n topology: 'triangle-list',\n mode: 5, // GL.TRIANGLE_STRIP\n attributes,\n indices: {\n value: this._getTriangleListIndices(dracoGeometry),\n size: 1\n }\n };\n }\n }\n\n // PointCloud - must come last as Mesh inherits from PointCloud\n return {\n topology: 'point-list',\n mode: 0, // GL.POINTS\n attributes\n };\n }\n\n _getMeshAttributes(\n loaderData: DracoLoaderData,\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[attributeName: string]: MeshAttribute} {\n const attributes: {[key: string]: MeshAttribute} = {};\n\n for (const loaderAttribute of Object.values(loaderData.attributes)) {\n const attributeName = this._deduceAttributeName(loaderAttribute, options);\n loaderAttribute.name = attributeName;\n const {value, size} = this._getAttributeValues(dracoGeometry, loaderAttribute);\n attributes[attributeName] = {\n value,\n size,\n byteOffset: loaderAttribute.byte_offset,\n byteStride: loaderAttribute.byte_stride,\n normalized: loaderAttribute.normalized\n };\n }\n\n return attributes;\n }\n\n // MESH INDICES EXTRACTION\n\n /**\n * For meshes, we need indices to define the faces.\n * @param dracoGeometry\n */\n _getTriangleListIndices(dracoGeometry: Mesh) {\n // Example on how to retrieve mesh and attributes.\n const numFaces = dracoGeometry.num_faces();\n const numIndices = numFaces * 3;\n const byteLength = numIndices * INDEX_ITEM_SIZE;\n\n const ptr = this.draco._malloc(byteLength);\n try {\n this.decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);\n return new Uint32Array(this.draco.HEAPF32.buffer, ptr, numIndices).slice();\n } finally {\n this.draco._free(ptr);\n }\n }\n\n /**\n * For meshes, we need indices to define the faces.\n * @param dracoGeometry\n */\n _getTriangleStripIndices(dracoGeometry: Mesh) {\n const dracoArray = new this.draco.DracoInt32Array();\n try {\n /* const numStrips = */ this.decoder.GetTriangleStripsFromMesh(dracoGeometry, dracoArray);\n return getUint32Array(dracoArray);\n } finally {\n this.draco.destroy(dracoArray);\n }\n }\n\n /**\n *\n * @param dracoGeometry\n * @param dracoAttribute\n * @param attributeName\n */\n _getAttributeValues(\n dracoGeometry: Mesh | PointCloud,\n attribute: DracoAttribute\n ): {value: TypedArray; size: number} {\n const TypedArrayCtor = DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP[attribute.data_type];\n const numComponents = attribute.num_components;\n const numPoints = dracoGeometry.num_points();\n const numValues = numPoints * numComponents;\n\n const byteLength = numValues * TypedArrayCtor.BYTES_PER_ELEMENT;\n const dataType = getDracoDataType(this.draco, TypedArrayCtor);\n\n let value: TypedArray;\n\n const ptr = this.draco._malloc(byteLength);\n try {\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attribute.attribute_index);\n this.decoder.GetAttributeDataArrayForAllPoints(\n dracoGeometry,\n dracoAttribute,\n dataType,\n byteLength,\n ptr\n );\n value = new TypedArrayCtor(this.draco.HEAPF32.buffer, ptr, numValues).slice();\n } finally {\n this.draco._free(ptr);\n }\n\n return {value, size: numComponents};\n }\n\n // Attribute names\n\n /** \n * DRACO does not store attribute names - We need to deduce an attribute name\n * for each attribute\n _getAttributeNames(\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[unique_id: number]: string} {\n const attributeNames: {[unique_id: number]: string} = {};\n for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);\n const attributeName = this._deduceAttributeName(dracoAttribute, options);\n attributeNames[attributeName] = attributeName;\n }\n return attributeNames;\n }\n */\n\n /**\n * Deduce an attribute name.\n * @note DRACO does not save attribute names, just general type (POSITION, COLOR)\n * to help optimize compression. We generate GLTF compatible names for the Draco-recognized\n * types\n * @param attributeData\n */\n _deduceAttributeName(attribute: DracoAttribute, options: DracoParseOptions): string {\n // Deduce name based on application provided map\n const uniqueId = attribute.unique_id;\n for (const [attributeName, attributeUniqueId] of Object.entries(\n options.extraAttributes || {}\n )) {\n if (attributeUniqueId === uniqueId) {\n return attributeName;\n }\n }\n\n // Deduce name based on attribute type\n const thisAttributeType = attribute.attribute_type;\n for (const dracoAttributeConstant in DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP) {\n const attributeType = this.draco[dracoAttributeConstant];\n if (attributeType === thisAttributeType) {\n // TODO - Return unique names if there multiple attributes per type\n // (e.g. multiple TEX_COORDS or COLORS)\n return DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP[dracoAttributeConstant];\n }\n }\n\n // Look up in metadata\n // TODO - shouldn't this have priority?\n const entryName = options.attributeNameEntry || 'name';\n if (attribute.metadata[entryName]) {\n return attribute.metadata[entryName].string;\n }\n\n // Attribute of \"GENERIC\" type, we need to assign some name\n return `CUSTOM_ATTRIBUTE_${uniqueId}`;\n }\n\n // METADATA EXTRACTION\n\n /** Get top level metadata */\n _getTopLevelMetadata(dracoGeometry: Mesh | PointCloud) {\n const dracoMetadata = this.decoder.GetMetadata(dracoGeometry);\n return this._getDracoMetadata(dracoMetadata);\n }\n\n /** Get per attribute metadata */\n _getAttributeMetadata(dracoGeometry: Mesh | PointCloud, attributeId: number) {\n const dracoMetadata = this.decoder.GetAttributeMetadata(dracoGeometry, attributeId);\n return this._getDracoMetadata(dracoMetadata);\n }\n\n /**\n * Extract metadata field values\n * @param dracoMetadata\n * @returns\n */\n _getDracoMetadata(dracoMetadata: Metadata): {[entry: string]: DracoMetadataEntry} {\n // The not so wonderful world of undocumented Draco APIs :(\n if (!dracoMetadata || !dracoMetadata.ptr) {\n return {};\n }\n const result = {};\n const numEntries = this.metadataQuerier.NumEntries(dracoMetadata);\n for (let entryIndex = 0; entryIndex < numEntries; entryIndex++) {\n const entryName = this.metadataQuerier.GetEntryName(dracoMetadata, entryIndex);\n result[entryName] = this._getDracoMetadataField(dracoMetadata, entryName);\n }\n return result;\n }\n\n /**\n * Extracts possible values for one metadata entry by name\n * @param dracoMetadata\n * @param entryName\n */\n _getDracoMetadataField(dracoMetadata: Metadata, entryName: string): DracoMetadataEntry {\n const dracoArray = new this.draco.DracoInt32Array();\n try {\n // Draco metadata fields can hold int32 arrays\n this.metadataQuerier.GetIntEntryArray(dracoMetadata, entryName, dracoArray);\n const intArray = getInt32Array(dracoArray);\n return {\n int: this.metadataQuerier.GetIntEntry(dracoMetadata, entryName),\n string: this.metadataQuerier.GetStringEntry(dracoMetadata, entryName),\n double: this.metadataQuerier.GetDoubleEntry(dracoMetadata, entryName),\n intArray\n };\n } finally {\n this.draco.destroy(dracoArray);\n }\n }\n\n // QUANTIZED ATTRIBUTE SUPPORT (NO DECOMPRESSION)\n\n /** Skip transforms for specific attribute types */\n _disableAttributeTransforms(options: DracoParseOptions) {\n const {quantizedAttributes = [], octahedronAttributes = []} = options;\n const skipAttributes = [...quantizedAttributes, ...octahedronAttributes];\n for (const dracoAttributeName of skipAttributes) {\n this.decoder.SkipAttributeTransform(this.draco[dracoAttributeName]);\n }\n }\n\n /**\n * Extract (and apply?) Position Transform\n * @todo not used\n */\n _getQuantizationTransform(\n dracoAttribute: PointAttribute,\n options: DracoParseOptions\n ): DracoQuantizationTransform | null {\n const {quantizedAttributes = []} = options;\n const attribute_type = dracoAttribute.attribute_type();\n const skip = quantizedAttributes.map((type) => this.decoder[type]).includes(attribute_type);\n if (skip) {\n const transform = new this.draco.AttributeQuantizationTransform();\n try {\n if (transform.InitFromAttribute(dracoAttribute)) {\n return {\n quantization_bits: transform.quantization_bits(),\n range: transform.range(),\n min_values: new Float32Array([1, 2, 3]).map((i) => transform.min_value(i))\n };\n }\n } finally {\n this.draco.destroy(transform);\n }\n }\n return null;\n }\n\n _getOctahedronTransform(\n dracoAttribute: PointAttribute,\n options: DracoParseOptions\n ): DracoOctahedronTransform | null {\n const {octahedronAttributes = []} = options;\n const attribute_type = dracoAttribute.attribute_type();\n const octahedron = octahedronAttributes\n .map((type) => this.decoder[type])\n .includes(attribute_type);\n if (octahedron) {\n const transform = new this.draco.AttributeQuantizationTransform();\n try {\n if (transform.InitFromAttribute(dracoAttribute)) {\n return {\n quantization_bits: transform.quantization_bits()\n };\n }\n } finally {\n this.draco.destroy(transform);\n }\n }\n return null;\n }\n\n // HELPERS\n}\n\n/**\n * Get draco specific data type by TypedArray constructor type\n * @param attributeType\n * @returns draco specific data type\n */\nfunction getDracoDataType(draco: Draco3D, attributeType: any): draco_DataType {\n switch (attributeType) {\n case Float32Array:\n return draco.DT_FLOAT32;\n case Int8Array:\n return draco.DT_INT8;\n case Int16Array:\n return draco.DT_INT16;\n case Int32Array:\n return draco.DT_INT32;\n case Uint8Array:\n return draco.DT_UINT8;\n case Uint16Array:\n return draco.DT_UINT16;\n case Uint32Array:\n return draco.DT_UINT32;\n default:\n return draco.DT_INVALID;\n }\n}\n\n/**\n * Copy a Draco int32 array into a JS typed array\n */\nfunction getInt32Array(dracoArray: DracoInt32Array): Int32Array {\n const numValues = dracoArray.size();\n const intArray = new Int32Array(numValues);\n for (let i = 0; i < numValues; i++) {\n intArray[i] = dracoArray.GetValue(i);\n }\n return intArray;\n}\n\n/**\n * Copy a Draco int32 array into a JS typed array\n */\nfunction getUint32Array(dracoArray: DracoInt32Array): Int32Array {\n const numValues = dracoArray.size();\n const intArray = new Int32Array(numValues);\n for (let i = 0; i < numValues; i++) {\n intArray[i] = dracoArray.GetValue(i);\n }\n return intArray;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"draco-types.js"}
1
+ {"version":3,"file":"draco-types.js","names":[],"sources":["../../../src/lib/draco-types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n\nimport {Mesh} from '@loaders.gl/schema';\n\n// DRACO FORMAT SPECIFIC DATA\n\nexport type DracoMetadataEntry = {\n int: number;\n string: string;\n double: number;\n intArray: Int32Array;\n};\n\n/** For attributes that have not been fully decompressed */\nexport type DracoQuantizationTransform = {\n quantization_bits?: number;\n range?: number;\n min_values?: Float32Array;\n};\n\n/** For attributes that have not been fully decompressed */\nexport type DracoOctahedronTransform = {\n quantization_bits?: number;\n};\n\n/** Draco attribute fields */\nexport type DracoAttribute = {\n unique_id: number;\n\n num_components: number; // Duplicate of size\n attribute_type: number;\n data_type: number;\n\n byte_offset: number;\n byte_stride: number;\n normalized: boolean;\n name?: string;\n\n quantization_transform?: DracoQuantizationTransform;\n octahedron_transform?: DracoOctahedronTransform;\n\n metadata: {[key: string]: DracoMetadataEntry};\n attribute_index: number;\n};\n\n/**\n * Draco format specific data\n * The `data.loaderData` field will have this layout when `data.loader === 'draco'`.\n * @todo Metadata should also be available in normalized form in a standard `Schema`.\n */\nexport type DracoLoaderData = {\n geometry_type: number;\n num_attributes: number;\n num_points: number;\n num_faces: number;\n metadata: {[entry: string]: DracoMetadataEntry};\n attributes: {[unique_id: number]: DracoAttribute};\n // attribute_names?: {[unique_id: number]: string};\n // unique_ids?: {[attributeName: string]: number};\n};\n\n/**\n * loaders.gl Mesh with Draco specific data\n */\nexport type DracoMesh = Mesh & {\n loader: 'draco';\n loaderData: DracoLoaderData; // Draco specific data\n};\n"],"mappings":""}
@@ -4,45 +4,35 @@ export function getDracoSchema(attributes, loaderData, indices) {
4
4
  const metadataMap = makeMetadata(loaderData.metadata);
5
5
  const fields = [];
6
6
  const namedLoaderDataAttributes = transformAttributesLoaderData(loaderData.attributes);
7
-
8
7
  for (const attributeName in attributes) {
9
8
  const attribute = attributes[attributeName];
10
9
  const field = getArrowFieldFromAttribute(attributeName, attribute, namedLoaderDataAttributes[attributeName]);
11
10
  fields.push(field);
12
11
  }
13
-
14
12
  if (indices) {
15
13
  const indicesField = getArrowFieldFromAttribute('indices', indices);
16
14
  fields.push(indicesField);
17
15
  }
18
-
19
16
  return new Schema(fields, metadataMap);
20
17
  }
21
-
22
18
  function transformAttributesLoaderData(loaderData) {
23
19
  const result = {};
24
-
25
20
  for (const key in loaderData) {
26
21
  const dracoAttribute = loaderData[key];
27
22
  result[dracoAttribute.name || 'undefined'] = dracoAttribute;
28
23
  }
29
-
30
24
  return result;
31
25
  }
32
-
33
26
  function getArrowFieldFromAttribute(attributeName, attribute, loaderData) {
34
27
  const metadataMap = loaderData ? makeMetadata(loaderData.metadata) : undefined;
35
28
  const field = deduceMeshField(attributeName, attribute, metadataMap);
36
29
  return field;
37
30
  }
38
-
39
31
  function makeMetadata(metadata) {
40
32
  const metadataMap = new Map();
41
-
42
33
  for (const key in metadata) {
43
34
  metadataMap.set("".concat(key, ".string"), JSON.stringify(metadata[key]));
44
35
  }
45
-
46
36
  return metadataMap;
47
37
  }
48
38
  //# sourceMappingURL=get-draco-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/get-draco-schema.ts"],"names":["deduceMeshField","Schema","getDracoSchema","attributes","loaderData","indices","metadataMap","makeMetadata","metadata","fields","namedLoaderDataAttributes","transformAttributesLoaderData","attributeName","attribute","field","getArrowFieldFromAttribute","push","indicesField","result","key","dracoAttribute","name","undefined","Map","set","JSON","stringify"],"mappings":"AAAA,SAAQA,eAAR,QAA6C,oBAA7C;AACA,SAAQC,MAAR,QAA4B,oBAA5B;AAIA,OAAO,SAASC,cAAT,CACLC,UADK,EAELC,UAFK,EAGLC,OAHK,EAIG;AACR,QAAMC,WAAW,GAAGC,YAAY,CAACH,UAAU,CAACI,QAAZ,CAAhC;AACA,QAAMC,MAAe,GAAG,EAAxB;AACA,QAAMC,yBAAyB,GAAGC,6BAA6B,CAACP,UAAU,CAACD,UAAZ,CAA/D;;AACA,OAAK,MAAMS,aAAX,IAA4BT,UAA5B,EAAwC;AACtC,UAAMU,SAAS,GAAGV,UAAU,CAACS,aAAD,CAA5B;AACA,UAAME,KAAK,GAAGC,0BAA0B,CACtCH,aADsC,EAEtCC,SAFsC,EAGtCH,yBAAyB,CAACE,aAAD,CAHa,CAAxC;AAKAH,IAAAA,MAAM,CAACO,IAAP,CAAYF,KAAZ;AACD;;AACD,MAAIT,OAAJ,EAAa;AACX,UAAMY,YAAY,GAAGF,0BAA0B,CAAC,SAAD,EAAYV,OAAZ,CAA/C;AACAI,IAAAA,MAAM,CAACO,IAAP,CAAYC,YAAZ;AACD;;AACD,SAAO,IAAIhB,MAAJ,CAAWQ,MAAX,EAAmBH,WAAnB,CAAP;AACD;;AAED,SAASK,6BAAT,CAAuCP,UAAvC,EAEE;AACA,QAAMc,MAAiD,GAAG,EAA1D;;AACA,OAAK,MAAMC,GAAX,IAAkBf,UAAlB,EAA8B;AAC5B,UAAMgB,cAAc,GAAGhB,UAAU,CAACe,GAAD,CAAjC;AACAD,IAAAA,MAAM,CAACE,cAAc,CAACC,IAAf,IAAuB,WAAxB,CAAN,GAA6CD,cAA7C;AACD;;AACD,SAAOF,MAAP;AACD;;AAED,SAASH,0BAAT,CACEH,aADF,EAEEC,SAFF,EAGET,UAHF,EAIS;AACP,QAAME,WAAW,GAAGF,UAAU,GAAGG,YAAY,CAACH,UAAU,CAACI,QAAZ,CAAf,GAAuCc,SAArE;AACA,QAAMR,KAAK,GAAGd,eAAe,CAACY,aAAD,EAAgBC,SAAhB,EAA2BP,WAA3B,CAA7B;AACA,SAAOQ,KAAP;AACD;;AAED,SAASP,YAAT,CAAsBC,QAAtB,EAA0F;AACxF,QAAMF,WAAW,GAAG,IAAIiB,GAAJ,EAApB;;AACA,OAAK,MAAMJ,GAAX,IAAkBX,QAAlB,EAA4B;AAC1BF,IAAAA,WAAW,CAACkB,GAAZ,WAAmBL,GAAnB,cAAiCM,IAAI,CAACC,SAAL,CAAelB,QAAQ,CAACW,GAAD,CAAvB,CAAjC;AACD;;AACD,SAAOb,WAAP;AACD","sourcesContent":["import {deduceMeshField, MeshAttribute} from '@loaders.gl/schema';\nimport {Schema, Field} from '@loaders.gl/schema';\nimport type {DracoAttribute, DracoLoaderData, DracoMetadataEntry} from '../draco-types';\n\n/** Extract an arrow-like schema from a Draco mesh */\nexport function getDracoSchema(\n attributes: {[attributeName: string]: MeshAttribute},\n loaderData: DracoLoaderData,\n indices?: MeshAttribute\n): Schema {\n const metadataMap = makeMetadata(loaderData.metadata);\n const fields: Field[] = [];\n const namedLoaderDataAttributes = transformAttributesLoaderData(loaderData.attributes);\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getArrowFieldFromAttribute(\n attributeName,\n attribute,\n namedLoaderDataAttributes[attributeName]\n );\n fields.push(field);\n }\n if (indices) {\n const indicesField = getArrowFieldFromAttribute('indices', indices);\n fields.push(indicesField);\n }\n return new Schema(fields, metadataMap);\n}\n\nfunction transformAttributesLoaderData(loaderData: {[key: number]: DracoAttribute}): {\n [attributeName: string]: DracoAttribute;\n} {\n const result: {[attributeName: string]: DracoAttribute} = {};\n for (const key in loaderData) {\n const dracoAttribute = loaderData[key];\n result[dracoAttribute.name || 'undefined'] = dracoAttribute;\n }\n return result;\n}\n\nfunction getArrowFieldFromAttribute(\n attributeName: string,\n attribute: MeshAttribute,\n loaderData?: DracoAttribute\n): Field {\n const metadataMap = loaderData ? makeMetadata(loaderData.metadata) : undefined;\n const field = deduceMeshField(attributeName, attribute, metadataMap);\n return field;\n}\n\nfunction makeMetadata(metadata: {[key: string]: DracoMetadataEntry}): Map<string, string> {\n const metadataMap = new Map();\n for (const key in metadata) {\n metadataMap.set(`${key}.string`, JSON.stringify(metadata[key]));\n }\n return metadataMap;\n}\n"],"file":"get-draco-schema.js"}
1
+ {"version":3,"file":"get-draco-schema.js","names":["deduceMeshField","Schema","getDracoSchema","attributes","loaderData","indices","metadataMap","makeMetadata","metadata","fields","namedLoaderDataAttributes","transformAttributesLoaderData","attributeName","attribute","field","getArrowFieldFromAttribute","push","indicesField","result","key","dracoAttribute","name","undefined","Map","set","JSON","stringify"],"sources":["../../../../src/lib/utils/get-draco-schema.ts"],"sourcesContent":["import {deduceMeshField, MeshAttribute} from '@loaders.gl/schema';\nimport {Schema, Field} from '@loaders.gl/schema';\nimport type {DracoAttribute, DracoLoaderData, DracoMetadataEntry} from '../draco-types';\n\n/** Extract an arrow-like schema from a Draco mesh */\nexport function getDracoSchema(\n attributes: {[attributeName: string]: MeshAttribute},\n loaderData: DracoLoaderData,\n indices?: MeshAttribute\n): Schema {\n const metadataMap = makeMetadata(loaderData.metadata);\n const fields: Field[] = [];\n const namedLoaderDataAttributes = transformAttributesLoaderData(loaderData.attributes);\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getArrowFieldFromAttribute(\n attributeName,\n attribute,\n namedLoaderDataAttributes[attributeName]\n );\n fields.push(field);\n }\n if (indices) {\n const indicesField = getArrowFieldFromAttribute('indices', indices);\n fields.push(indicesField);\n }\n return new Schema(fields, metadataMap);\n}\n\nfunction transformAttributesLoaderData(loaderData: {[key: number]: DracoAttribute}): {\n [attributeName: string]: DracoAttribute;\n} {\n const result: {[attributeName: string]: DracoAttribute} = {};\n for (const key in loaderData) {\n const dracoAttribute = loaderData[key];\n result[dracoAttribute.name || 'undefined'] = dracoAttribute;\n }\n return result;\n}\n\nfunction getArrowFieldFromAttribute(\n attributeName: string,\n attribute: MeshAttribute,\n loaderData?: DracoAttribute\n): Field {\n const metadataMap = loaderData ? makeMetadata(loaderData.metadata) : undefined;\n const field = deduceMeshField(attributeName, attribute, metadataMap);\n return field;\n}\n\nfunction makeMetadata(metadata: {[key: string]: DracoMetadataEntry}): Map<string, string> {\n const metadataMap = new Map();\n for (const key in metadata) {\n metadataMap.set(`${key}.string`, JSON.stringify(metadata[key]));\n }\n return metadataMap;\n}\n"],"mappings":"AAAA,SAAQA,eAAe,QAAsB,oBAAoB;AACjE,SAAQC,MAAM,QAAc,oBAAoB;AAIhD,OAAO,SAASC,cAAc,CAC5BC,UAAoD,EACpDC,UAA2B,EAC3BC,OAAuB,EACf;EACR,MAAMC,WAAW,GAAGC,YAAY,CAACH,UAAU,CAACI,QAAQ,CAAC;EACrD,MAAMC,MAAe,GAAG,EAAE;EAC1B,MAAMC,yBAAyB,GAAGC,6BAA6B,CAACP,UAAU,CAACD,UAAU,CAAC;EACtF,KAAK,MAAMS,aAAa,IAAIT,UAAU,EAAE;IACtC,MAAMU,SAAS,GAAGV,UAAU,CAACS,aAAa,CAAC;IAC3C,MAAME,KAAK,GAAGC,0BAA0B,CACtCH,aAAa,EACbC,SAAS,EACTH,yBAAyB,CAACE,aAAa,CAAC,CACzC;IACDH,MAAM,CAACO,IAAI,CAACF,KAAK,CAAC;EACpB;EACA,IAAIT,OAAO,EAAE;IACX,MAAMY,YAAY,GAAGF,0BAA0B,CAAC,SAAS,EAAEV,OAAO,CAAC;IACnEI,MAAM,CAACO,IAAI,CAACC,YAAY,CAAC;EAC3B;EACA,OAAO,IAAIhB,MAAM,CAACQ,MAAM,EAAEH,WAAW,CAAC;AACxC;AAEA,SAASK,6BAA6B,CAACP,UAA2C,EAEhF;EACA,MAAMc,MAAiD,GAAG,CAAC,CAAC;EAC5D,KAAK,MAAMC,GAAG,IAAIf,UAAU,EAAE;IAC5B,MAAMgB,cAAc,GAAGhB,UAAU,CAACe,GAAG,CAAC;IACtCD,MAAM,CAACE,cAAc,CAACC,IAAI,IAAI,WAAW,CAAC,GAAGD,cAAc;EAC7D;EACA,OAAOF,MAAM;AACf;AAEA,SAASH,0BAA0B,CACjCH,aAAqB,EACrBC,SAAwB,EACxBT,UAA2B,EACpB;EACP,MAAME,WAAW,GAAGF,UAAU,GAAGG,YAAY,CAACH,UAAU,CAACI,QAAQ,CAAC,GAAGc,SAAS;EAC9E,MAAMR,KAAK,GAAGd,eAAe,CAACY,aAAa,EAAEC,SAAS,EAAEP,WAAW,CAAC;EACpE,OAAOQ,KAAK;AACd;AAEA,SAASP,YAAY,CAACC,QAA6C,EAAuB;EACxF,MAAMF,WAAW,GAAG,IAAIiB,GAAG,EAAE;EAC7B,KAAK,MAAMJ,GAAG,IAAIX,QAAQ,EAAE;IAC1BF,WAAW,CAACkB,GAAG,WAAIL,GAAG,cAAWM,IAAI,CAACC,SAAS,CAAClB,QAAQ,CAACW,GAAG,CAAC,CAAC,CAAC;EACjE;EACA,OAAOb,WAAW;AACpB"}
@@ -1,2 +1,3 @@
1
- export const VERSION = typeof "3.3.0-alpha.5" !== 'undefined' ? "3.3.0-alpha.5" : 'latest';
1
+
2
+ export const VERSION = typeof "3.3.0-alpha.7" !== 'undefined' ? "3.3.0-alpha.7" : 'latest';
2
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/version.ts"],"names":["VERSION"],"mappings":"AAGA,OAAO,MAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE","sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"file":"version.js"}
1
+ {"version":3,"file":"version.js","names":["VERSION"],"sources":["../../../../src/lib/utils/version.ts"],"sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"mappings":";AAGA,OAAO,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/workers/draco-nodejs-worker.ts"],"names":["createLoaderWorker","DracoLoader"],"mappings":"AAAA,SAAQA,kBAAR,QAAiC,0BAAjC;AACA,OAAO,uBAAP;AACA,SAAQC,WAAR,QAA0B,UAA1B;AAEAD,kBAAkB,CAACC,WAAD,CAAlB","sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport '@loaders.gl/polyfills';\nimport {DracoLoader} from '../index';\n\ncreateLoaderWorker(DracoLoader);\n"],"file":"draco-nodejs-worker.js"}
1
+ {"version":3,"file":"draco-nodejs-worker.js","names":["createLoaderWorker","DracoLoader"],"sources":["../../../src/workers/draco-nodejs-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport '@loaders.gl/polyfills';\nimport {DracoLoader} from '../index';\n\ncreateLoaderWorker(DracoLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAC3D,OAAO,uBAAuB;AAC9B,SAAQC,WAAW,QAAO,UAAU;AAEpCD,kBAAkB,CAACC,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/workers/draco-worker.ts"],"names":["createLoaderWorker","DracoLoader"],"mappings":"AAAA,SAAQA,kBAAR,QAAiC,0BAAjC;AACA,SAAQC,WAAR,QAA0B,UAA1B;AAEAD,kBAAkB,CAACC,WAAD,CAAlB","sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '../index';\n\ncreateLoaderWorker(DracoLoader);\n"],"file":"draco-worker.js"}
1
+ {"version":3,"file":"draco-worker.js","names":["createLoaderWorker","DracoLoader"],"sources":["../../../src/workers/draco-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '../index';\n\ncreateLoaderWorker(DracoLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAC3D,SAAQC,WAAW,QAAO,UAAU;AAEpCD,kBAAkB,CAACC,WAAW,CAAC"}