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

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/draco3d/draco3d-types.ts"],"names":["draco_GeometryAttribute_Type","draco_EncodedGeometryType","draco_DataType","draco_StatusCode"],"mappings":"AAiBA,WAAYA,4BAAZ;;WAAYA,4B;AAAAA,EAAAA,4B,CAAAA,4B;AAAAA,EAAAA,4B,CAAAA,4B;AAAAA,EAAAA,4B,CAAAA,4B;AAAAA,EAAAA,4B,CAAAA,4B;AAAAA,EAAAA,4B,CAAAA,4B;AAAAA,EAAAA,4B,CAAAA,4B;GAAAA,4B,KAAAA,4B;;AAUZ,WAAYC,yBAAZ;;WAAYA,yB;AAAAA,EAAAA,yB,CAAAA,yB;AAAAA,EAAAA,yB,CAAAA,yB;AAAAA,EAAAA,yB,CAAAA,yB;GAAAA,yB,KAAAA,yB;;AAOZ,WAAYC,cAAZ;;WAAYA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;AAAAA,EAAAA,c,CAAAA,c;GAAAA,c,KAAAA,c;;AAiBZ,WAAYC,gBAAZ;;WAAYA,gB;AAAAA,EAAAA,gB,CAAAA,gB;AAAAA,EAAAA,gB,CAAAA,gB;AAAAA,EAAAA,gB,CAAAA,gB;AAAAA,EAAAA,gB,CAAAA,gB;AAAAA,EAAAA,gB,CAAAA,gB;AAAAA,EAAAA,gB,CAAAA,gB;GAAAA,gB,KAAAA,gB","sourcesContent":["// A set of typescript types manually adapted from the Draco web IDL\n// Draco JS is a bit tricky to work with due to the C++ emscripten code base\n// sparse documentation, so these types provide an extra safety net.\n\n// Typescript defs adapted from draco3d emscripten IDL\n// https://raw.githubusercontent.com/google/draco/master/src/draco/javascript/emscripten/draco_web_decoder.idl\n// Interface exposed to emscripten's WebIDL Binder.\n// http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/WebIDL-Binder.html\n\n/* eslint-disable camelcase */\n\n/** Draco3D untyped memory pointer */\ntype VoidPtr = any;\n\n// DRACO WEB DECODER IDL\n\n/** Draco3D geometry attribute type */\nexport enum draco_GeometryAttribute_Type {\n 'draco_GeometryAttribute::INVALID',\n 'draco_GeometryAttribute::POSITION',\n 'draco_GeometryAttribute::NORMAL',\n 'draco_GeometryAttribute::COLOR',\n 'draco_GeometryAttribute::TEX_COORD',\n 'draco_GeometryAttribute::GENERIC'\n}\n\n/** Draco3D encoded geometry type */\nexport enum draco_EncodedGeometryType {\n 'draco::INVALID_GEOMETRY_TYPE',\n 'draco::POINT_CLOUD',\n 'draco::TRIANGULAR_MESH'\n}\n\n/** Draco3D data type */\nexport enum draco_DataType {\n 'draco::DT_INVALID',\n 'draco::DT_INT8',\n 'draco::DT_UINT8',\n 'draco::DT_INT16',\n 'draco::DT_UINT16',\n 'draco::DT_INT32',\n 'draco::DT_UINT32',\n 'draco::DT_INT64',\n 'draco::DT_UINT64',\n 'draco::DT_FLOAT32',\n 'draco::DT_FLOAT64',\n 'draco::DT_BOOL',\n 'draco::DT_TYPES_COUNT'\n}\n\n/** Draco3D status code */\nexport enum draco_StatusCode {\n 'draco_Status::OK',\n 'draco_Status::DRACO_ERROR',\n 'draco_Status::IO_ERROR',\n 'draco_Status::INVALID_PARAMETER',\n 'draco_Status::UNSUPPORTED_VERSION',\n 'draco_Status::UNKNOWN_VERSION'\n}\n\n/** Draco3D decoder buffer allocated on emscripten heap */\nexport declare class DecoderBuffer {\n constructor();\n Init(data: Int8Array, data_size: number): void;\n}\n\n/** Draco3D attribute transform data */\nexport declare class AttributeTransformData {\n constructor();\n transform_type(): number;\n}\n\n/** Draco3D geometry attribute */\nexport declare class GeometryAttribute {\n constructor();\n}\n\n/** Draco3D point attribute */\nexport declare class PointAttribute {\n ptr: VoidPtr;\n\n constructor();\n size(): number;\n GetAttributeTransformData(): AttributeTransformData;\n\n // From GeometryAttribute\n attribute_type(): number;\n data_type(): number;\n num_components(): number;\n normalized(): boolean;\n byte_stride(): number;\n byte_offset(): number;\n unique_id(): number;\n}\n\n/** Draco3D attribute transform */\nexport declare class AttributeQuantizationTransform {\n constructor();\n InitFromAttribute(att: PointAttribute): boolean;\n quantization_bits(): number;\n min_value(axis: number): number;\n range(): number;\n}\n\n/** Draco3D attribute transform */\nexport declare class AttributeOctahedronTransform {\n constructor();\n InitFromAttribute(att: PointAttribute): boolean;\n quantization_bits(): number;\n}\n\n/** Draco3D point cloud */\nexport declare class PointCloud {\n ptr: VoidPtr;\n\n constructor();\n num_attributes(): number;\n num_points(): number;\n}\n\n/** Draco3D mesh */\nexport declare class Mesh extends PointCloud {\n constructor();\n num_faces(): number;\n}\n\n/** Draco3D metadata */\nexport declare class Metadata {\n ptr: VoidPtr;\n\n constructor();\n}\n\n/** Draco3D status */\nexport declare class Status {\n constructor();\n code(): draco_StatusCode;\n ok(): boolean;\n error_msg(): string;\n}\n\n/** Draco3D Float32Array allocated on the emscripten heap */\nexport declare class DracoFloat32Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Int8Array allocated on the emscripten heap */\nexport declare class DracoInt8Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Uint8Array allocated on the emscripten heap */\nexport declare class DracoUInt8Array {\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Int16Array allocated on the emscripten heap */\nexport declare class DracoInt16Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Uint16Array allocated on the emscripten heap */\nexport declare class DracoUInt16Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Int32Array allocated on the emscripten heap */\nexport declare class DracoInt32Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Uint32Array allocated on the emscripten heap */\nexport declare class DracoUInt32Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D metadata querier */\nexport declare class MetadataQuerier {\n constructor();\n\n HasEntry(metadata: Metadata, entry_name: string): string;\n GetIntEntry(metadata: Metadata, entry_name: string);\n GetIntEntryArray(metadata: Metadata, entry_name: string, out_values: DracoInt32Array);\n GetDoubleEntry(metadata: Metadata, entry_name: string): number;\n GetStringEntry(metadata: Metadata, entry_name: string): string;\n\n NumEntries(metadata: Metadata): number;\n GetEntryName(metadata: Metadata, entry_id: number): string;\n}\n\n/**\n * Draco3D Decoder class\n */\nexport declare class Decoder {\n constructor();\n\n GetEncodedGeometryType(in_buffer: DecoderBuffer): draco_EncodedGeometryType;\n\n DecodeBufferToPointCloud(in_buffer: DecoderBuffer, out_point_cloud: PointCloud): Status;\n DecodeBufferToMesh(in_buffer: DecoderBuffer, out_mesh: Mesh): Status;\n\n GetAttributeId(pc: PointCloud, type: draco_GeometryAttribute_Type): number;\n GetAttributeIdByName(pc: PointCloud, name: string): number;\n GetAttributeIdByMetadataEntry(pc: PointCloud, name: string, value: string): number;\n\n GetAttribute(pc: PointCloud, att_id: number): PointAttribute;\n GetAttributeByUniqueId(pc: PointCloud, unique_id: number): PointAttribute;\n\n GetMetadata(pc: PointCloud): Metadata;\n GetAttributeMetadata(pc: PointCloud, att_id: number): Metadata;\n\n GetFaceFromMesh(m: Mesh, face_id: number, out_values: DracoInt32Array): boolean;\n GetTriangleStripsFromMesh(m: Mesh, strip_values: DracoInt32Array);\n\n GetTrianglesUInt16Array(m: Mesh, out_size: number, out_values: VoidPtr): boolean;\n GetTrianglesUInt32Array(m: Mesh, out_size: number, out_values: VoidPtr): boolean;\n\n GetAttributeFloat(pa: PointAttribute, att_index: number, out_values: DracoFloat32Array): boolean;\n\n GetAttributeFloatForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoFloat32Array\n ): boolean;\n\n // Deprecated, use GetAttributeInt32ForAllPoints instead.\n GetAttributeIntForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoInt32Array\n ): boolean;\n\n GetAttributeInt8ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoInt8Array\n ): boolean;\n GetAttributeUInt8ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoUInt8Array\n ): boolean;\n GetAttributeInt16ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoInt16Array\n ): boolean;\n GetAttributeUInt16ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoUInt16Array\n ): boolean;\n GetAttributeInt32ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoInt32Array\n ): boolean;\n GetAttributeUInt32ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoUInt32Array\n ): boolean;\n\n GetAttributeDataArrayForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n data_type: draco_DataType,\n out_size: number,\n out_values: VoidPtr\n ): boolean;\n\n SkipAttributeTransform(att_type: draco_GeometryAttribute_Type): void;\n}\n\n// DRACO WEB ENCODER IDL\n\n/** Draco3D metadata builder */\nexport declare class MetadataBuilder {\n constructor();\n AddStringEntry(metadata: Metadata, entry_name: string, entry_value: string);\n AddIntEntry(metadata: Metadata, entry_name: string, entry_value: number);\n AddDoubleEntry(metadata: Metadata, entry_name: string, entry_value: number);\n AddIntEntryArray(\n metadata: Metadata,\n entry_name: string,\n entry_value: Int32Array,\n num_values: number\n );\n}\n\n/** Draco3D point cloud builder */\n\nexport declare class PointCloudBuilder {\n constructor();\n PointCloudBuilder(): void;\n AddFloatAttribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Float32Array\n );\n AddInt8Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Int8Array\n );\n AddUInt8Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Uint8Array\n );\n AddInt16Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Int16Array\n );\n AddUInt16Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Uint16Array\n );\n AddInt32Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Int32Array\n );\n AddUInt32Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Uint32Array\n );\n\n AddMetadata(pc: PointCloud, metadata: Metadata): boolean;\n SetMetadataForAttribute(pc: PointCloud, attribute_id: number, metadata: Metadata);\n}\n\n/** Draco3D mesh builder */\nexport declare class MeshBuilder extends PointCloudBuilder {\n constructor();\n AddFacesToMesh(mesh: Mesh, num_faces: number, faces: number[]): boolean;\n}\n\n/** Draco3D encoder */\nexport declare class Encoder {\n constructor();\n Encoder(): void;\n SetEncodingMethod(method: number): void;\n SetAttributeQuantization(type: draco_GeometryAttribute_Type, quantization_bits: number);\n SetAttributeExplicitQuantization(\n type: draco_GeometryAttribute_Type,\n quantization_bits: number,\n num_components: number,\n origin: number[],\n range: number\n );\n SetSpeedOptions(encoding_speed: number, decoding_speed: number): void;\n SetTrackEncodedProperties(flag: boolean): void;\n\n EncodeMeshToDracoBuffer(mesh: Mesh, encoded_data: DracoInt8Array);\n EncodePointCloudToDracoBuffer(\n pc: PointCloud,\n deduplicate_values: boolean,\n encoded_data: DracoInt8Array\n );\n\n // Returns the number of encoded points or faces from the last Encode\n // operation. Returns 0 if SetTrackEncodedProperties was not set to true.\n GetNumberOfEncodedPoints(): number;\n GetNumberOfEncodedFaces(): number;\n}\n\n/** Draco3D expert encoder */\nexport declare class ExpertEncoder {\n constructor();\n ExpertEncoder(pc: PointCloud): void;\n SetEncodingMethod(method: number): void;\n SetAttributeQuantization(att_id: number, quantization_bits: number);\n SetAttributeExplicitQuantization(\n att_id: number,\n quantization_bits: number,\n num_components: number,\n origin: number[],\n range: number\n );\n SetSpeedOptions(encoding_speed: number, decoding_speed: number): void;\n SetTrackEncodedProperties(flag: boolean): void;\n\n EncodeToDracoBuffer(deduplicate_values: boolean, encoded_data: DracoInt8Array);\n\n // Returns the number of encoded points or faces from the last Encode\n // operation. Returns 0 if SetTrackEncodedProperties was not set to true.\n GetNumberOfEncodedPoints(): number;\n GetNumberOfEncodedFaces(): number;\n}\n\n/** Draco3D module interface */\nexport interface Draco3D {\n // ENUMS\n\n // draco_EncodedGeometryType\n readonly INVALID_GEOMETRY_TYPE: draco_EncodedGeometryType;\n readonly POINT_CLOUD: draco_EncodedGeometryType;\n readonly TRIANGULAR_MESH: draco_EncodedGeometryType;\n\n // enum draco_GeometryAttribute_Type\n readonly INVALID: draco_GeometryAttribute_Type;\n readonly POSITION: draco_GeometryAttribute_Type;\n readonly NORMAL: draco_GeometryAttribute_Type;\n readonly COLOR: draco_GeometryAttribute_Type;\n readonly TEX_COORD: draco_GeometryAttribute_Type;\n readonly GENERIC: draco_GeometryAttribute_Type;\n\n // enum draco_DataType\n readonly DT_INVALID: draco_DataType;\n readonly DT_INT8: draco_DataType;\n readonly DT_UINT8: draco_DataType;\n readonly DT_INT16: draco_DataType;\n readonly DT_UINT16: draco_DataType;\n readonly DT_INT32: draco_DataType;\n readonly DT_UINT32: draco_DataType;\n readonly DT_INT64: draco_DataType;\n readonly DT_UINT64: draco_DataType;\n readonly DT_FLOAT32: draco_DataType;\n readonly DT_FLOAT64: draco_DataType;\n readonly DT_BOOL: draco_DataType;\n readonly DT_TYPES_COUNT: draco_DataType;\n\n readonly Mesh: typeof Mesh;\n readonly PointCloud: typeof PointCloud;\n readonly Metadata: typeof Metadata;\n\n readonly Encoder: typeof Encoder;\n readonly MeshBuilder: typeof MeshBuilder;\n readonly MetadataBuilder: typeof MetadataBuilder;\n\n readonly MetadataQuerier: typeof MetadataQuerier;\n readonly Decoder: typeof Decoder;\n readonly DecoderBuffer: typeof DecoderBuffer;\n\n readonly DracoFloat32Array: typeof DracoFloat32Array;\n readonly DracoInt8Array: typeof DracoInt8Array;\n readonly DracoUInt8Array: typeof DracoUInt8Array;\n readonly DracoInt16Array: typeof DracoInt16Array;\n readonly DracoUInt16Array: typeof DracoUInt16Array;\n readonly DracoInt32Array: typeof DracoInt32Array;\n readonly DracoUInt32Array: typeof DracoUInt32Array;\n\n readonly AttributeQuantizationTransform: typeof AttributeQuantizationTransform;\n\n // createEncoderModule(): Encoder;\n // createDecoderModule(): Decoder;\n destroy(resource: any): void;\n _malloc(byteLength: number): number;\n _free(ptr: number): void;\n\n HEAPF32: {\n buffer: ArrayBuffer;\n };\n}\n"],"file":"draco3d-types.js"}
1
+ {"version":3,"file":"draco3d-types.js","names":["draco_GeometryAttribute_Type","draco_EncodedGeometryType","draco_DataType","draco_StatusCode"],"sources":["../../../src/draco3d/draco3d-types.ts"],"sourcesContent":["// A set of typescript types manually adapted from the Draco web IDL\n// Draco JS is a bit tricky to work with due to the C++ emscripten code base\n// sparse documentation, so these types provide an extra safety net.\n\n// Typescript defs adapted from draco3d emscripten IDL\n// https://raw.githubusercontent.com/google/draco/master/src/draco/javascript/emscripten/draco_web_decoder.idl\n// Interface exposed to emscripten's WebIDL Binder.\n// http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/WebIDL-Binder.html\n\n/* eslint-disable camelcase */\n\n/** Draco3D untyped memory pointer */\ntype VoidPtr = any;\n\n// DRACO WEB DECODER IDL\n\n/** Draco3D geometry attribute type */\nexport enum draco_GeometryAttribute_Type {\n 'draco_GeometryAttribute::INVALID',\n 'draco_GeometryAttribute::POSITION',\n 'draco_GeometryAttribute::NORMAL',\n 'draco_GeometryAttribute::COLOR',\n 'draco_GeometryAttribute::TEX_COORD',\n 'draco_GeometryAttribute::GENERIC'\n}\n\n/** Draco3D encoded geometry type */\nexport enum draco_EncodedGeometryType {\n 'draco::INVALID_GEOMETRY_TYPE',\n 'draco::POINT_CLOUD',\n 'draco::TRIANGULAR_MESH'\n}\n\n/** Draco3D data type */\nexport enum draco_DataType {\n 'draco::DT_INVALID',\n 'draco::DT_INT8',\n 'draco::DT_UINT8',\n 'draco::DT_INT16',\n 'draco::DT_UINT16',\n 'draco::DT_INT32',\n 'draco::DT_UINT32',\n 'draco::DT_INT64',\n 'draco::DT_UINT64',\n 'draco::DT_FLOAT32',\n 'draco::DT_FLOAT64',\n 'draco::DT_BOOL',\n 'draco::DT_TYPES_COUNT'\n}\n\n/** Draco3D status code */\nexport enum draco_StatusCode {\n 'draco_Status::OK',\n 'draco_Status::DRACO_ERROR',\n 'draco_Status::IO_ERROR',\n 'draco_Status::INVALID_PARAMETER',\n 'draco_Status::UNSUPPORTED_VERSION',\n 'draco_Status::UNKNOWN_VERSION'\n}\n\n/** Draco3D decoder buffer allocated on emscripten heap */\nexport declare class DecoderBuffer {\n constructor();\n Init(data: Int8Array, data_size: number): void;\n}\n\n/** Draco3D attribute transform data */\nexport declare class AttributeTransformData {\n constructor();\n transform_type(): number;\n}\n\n/** Draco3D geometry attribute */\nexport declare class GeometryAttribute {\n constructor();\n}\n\n/** Draco3D point attribute */\nexport declare class PointAttribute {\n ptr: VoidPtr;\n\n constructor();\n size(): number;\n GetAttributeTransformData(): AttributeTransformData;\n\n // From GeometryAttribute\n attribute_type(): number;\n data_type(): number;\n num_components(): number;\n normalized(): boolean;\n byte_stride(): number;\n byte_offset(): number;\n unique_id(): number;\n}\n\n/** Draco3D attribute transform */\nexport declare class AttributeQuantizationTransform {\n constructor();\n InitFromAttribute(att: PointAttribute): boolean;\n quantization_bits(): number;\n min_value(axis: number): number;\n range(): number;\n}\n\n/** Draco3D attribute transform */\nexport declare class AttributeOctahedronTransform {\n constructor();\n InitFromAttribute(att: PointAttribute): boolean;\n quantization_bits(): number;\n}\n\n/** Draco3D point cloud */\nexport declare class PointCloud {\n ptr: VoidPtr;\n\n constructor();\n num_attributes(): number;\n num_points(): number;\n}\n\n/** Draco3D mesh */\nexport declare class Mesh extends PointCloud {\n constructor();\n num_faces(): number;\n}\n\n/** Draco3D metadata */\nexport declare class Metadata {\n ptr: VoidPtr;\n\n constructor();\n}\n\n/** Draco3D status */\nexport declare class Status {\n constructor();\n code(): draco_StatusCode;\n ok(): boolean;\n error_msg(): string;\n}\n\n/** Draco3D Float32Array allocated on the emscripten heap */\nexport declare class DracoFloat32Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Int8Array allocated on the emscripten heap */\nexport declare class DracoInt8Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Uint8Array allocated on the emscripten heap */\nexport declare class DracoUInt8Array {\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Int16Array allocated on the emscripten heap */\nexport declare class DracoInt16Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Uint16Array allocated on the emscripten heap */\nexport declare class DracoUInt16Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Int32Array allocated on the emscripten heap */\nexport declare class DracoInt32Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D Uint32Array allocated on the emscripten heap */\nexport declare class DracoUInt32Array {\n constructor();\n GetValue(index: number): number;\n size(): number;\n}\n\n/** Draco3D metadata querier */\nexport declare class MetadataQuerier {\n constructor();\n\n HasEntry(metadata: Metadata, entry_name: string): string;\n GetIntEntry(metadata: Metadata, entry_name: string);\n GetIntEntryArray(metadata: Metadata, entry_name: string, out_values: DracoInt32Array);\n GetDoubleEntry(metadata: Metadata, entry_name: string): number;\n GetStringEntry(metadata: Metadata, entry_name: string): string;\n\n NumEntries(metadata: Metadata): number;\n GetEntryName(metadata: Metadata, entry_id: number): string;\n}\n\n/**\n * Draco3D Decoder class\n */\nexport declare class Decoder {\n constructor();\n\n GetEncodedGeometryType(in_buffer: DecoderBuffer): draco_EncodedGeometryType;\n\n DecodeBufferToPointCloud(in_buffer: DecoderBuffer, out_point_cloud: PointCloud): Status;\n DecodeBufferToMesh(in_buffer: DecoderBuffer, out_mesh: Mesh): Status;\n\n GetAttributeId(pc: PointCloud, type: draco_GeometryAttribute_Type): number;\n GetAttributeIdByName(pc: PointCloud, name: string): number;\n GetAttributeIdByMetadataEntry(pc: PointCloud, name: string, value: string): number;\n\n GetAttribute(pc: PointCloud, att_id: number): PointAttribute;\n GetAttributeByUniqueId(pc: PointCloud, unique_id: number): PointAttribute;\n\n GetMetadata(pc: PointCloud): Metadata;\n GetAttributeMetadata(pc: PointCloud, att_id: number): Metadata;\n\n GetFaceFromMesh(m: Mesh, face_id: number, out_values: DracoInt32Array): boolean;\n GetTriangleStripsFromMesh(m: Mesh, strip_values: DracoInt32Array);\n\n GetTrianglesUInt16Array(m: Mesh, out_size: number, out_values: VoidPtr): boolean;\n GetTrianglesUInt32Array(m: Mesh, out_size: number, out_values: VoidPtr): boolean;\n\n GetAttributeFloat(pa: PointAttribute, att_index: number, out_values: DracoFloat32Array): boolean;\n\n GetAttributeFloatForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoFloat32Array\n ): boolean;\n\n // Deprecated, use GetAttributeInt32ForAllPoints instead.\n GetAttributeIntForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoInt32Array\n ): boolean;\n\n GetAttributeInt8ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoInt8Array\n ): boolean;\n GetAttributeUInt8ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoUInt8Array\n ): boolean;\n GetAttributeInt16ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoInt16Array\n ): boolean;\n GetAttributeUInt16ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoUInt16Array\n ): boolean;\n GetAttributeInt32ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoInt32Array\n ): boolean;\n GetAttributeUInt32ForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n out_values: DracoUInt32Array\n ): boolean;\n\n GetAttributeDataArrayForAllPoints(\n pc: PointCloud,\n pa: PointAttribute,\n data_type: draco_DataType,\n out_size: number,\n out_values: VoidPtr\n ): boolean;\n\n SkipAttributeTransform(att_type: draco_GeometryAttribute_Type): void;\n}\n\n// DRACO WEB ENCODER IDL\n\n/** Draco3D metadata builder */\nexport declare class MetadataBuilder {\n constructor();\n AddStringEntry(metadata: Metadata, entry_name: string, entry_value: string);\n AddIntEntry(metadata: Metadata, entry_name: string, entry_value: number);\n AddDoubleEntry(metadata: Metadata, entry_name: string, entry_value: number);\n AddIntEntryArray(\n metadata: Metadata,\n entry_name: string,\n entry_value: Int32Array,\n num_values: number\n );\n}\n\n/** Draco3D point cloud builder */\n\nexport declare class PointCloudBuilder {\n constructor();\n PointCloudBuilder(): void;\n AddFloatAttribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Float32Array\n );\n AddInt8Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Int8Array\n );\n AddUInt8Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Uint8Array\n );\n AddInt16Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Int16Array\n );\n AddUInt16Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Uint16Array\n );\n AddInt32Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Int32Array\n );\n AddUInt32Attribute(\n pc: PointCloud,\n type: draco_GeometryAttribute_Type,\n num_vertices: number,\n num_components: number,\n att_values: Uint32Array\n );\n\n AddMetadata(pc: PointCloud, metadata: Metadata): boolean;\n SetMetadataForAttribute(pc: PointCloud, attribute_id: number, metadata: Metadata);\n}\n\n/** Draco3D mesh builder */\nexport declare class MeshBuilder extends PointCloudBuilder {\n constructor();\n AddFacesToMesh(mesh: Mesh, num_faces: number, faces: number[]): boolean;\n}\n\n/** Draco3D encoder */\nexport declare class Encoder {\n constructor();\n Encoder(): void;\n SetEncodingMethod(method: number): void;\n SetAttributeQuantization(type: draco_GeometryAttribute_Type, quantization_bits: number);\n SetAttributeExplicitQuantization(\n type: draco_GeometryAttribute_Type,\n quantization_bits: number,\n num_components: number,\n origin: number[],\n range: number\n );\n SetSpeedOptions(encoding_speed: number, decoding_speed: number): void;\n SetTrackEncodedProperties(flag: boolean): void;\n\n EncodeMeshToDracoBuffer(mesh: Mesh, encoded_data: DracoInt8Array);\n EncodePointCloudToDracoBuffer(\n pc: PointCloud,\n deduplicate_values: boolean,\n encoded_data: DracoInt8Array\n );\n\n // Returns the number of encoded points or faces from the last Encode\n // operation. Returns 0 if SetTrackEncodedProperties was not set to true.\n GetNumberOfEncodedPoints(): number;\n GetNumberOfEncodedFaces(): number;\n}\n\n/** Draco3D expert encoder */\nexport declare class ExpertEncoder {\n constructor();\n ExpertEncoder(pc: PointCloud): void;\n SetEncodingMethod(method: number): void;\n SetAttributeQuantization(att_id: number, quantization_bits: number);\n SetAttributeExplicitQuantization(\n att_id: number,\n quantization_bits: number,\n num_components: number,\n origin: number[],\n range: number\n );\n SetSpeedOptions(encoding_speed: number, decoding_speed: number): void;\n SetTrackEncodedProperties(flag: boolean): void;\n\n EncodeToDracoBuffer(deduplicate_values: boolean, encoded_data: DracoInt8Array);\n\n // Returns the number of encoded points or faces from the last Encode\n // operation. Returns 0 if SetTrackEncodedProperties was not set to true.\n GetNumberOfEncodedPoints(): number;\n GetNumberOfEncodedFaces(): number;\n}\n\n/** Draco3D module interface */\nexport interface Draco3D {\n // ENUMS\n\n // draco_EncodedGeometryType\n readonly INVALID_GEOMETRY_TYPE: draco_EncodedGeometryType;\n readonly POINT_CLOUD: draco_EncodedGeometryType;\n readonly TRIANGULAR_MESH: draco_EncodedGeometryType;\n\n // enum draco_GeometryAttribute_Type\n readonly INVALID: draco_GeometryAttribute_Type;\n readonly POSITION: draco_GeometryAttribute_Type;\n readonly NORMAL: draco_GeometryAttribute_Type;\n readonly COLOR: draco_GeometryAttribute_Type;\n readonly TEX_COORD: draco_GeometryAttribute_Type;\n readonly GENERIC: draco_GeometryAttribute_Type;\n\n // enum draco_DataType\n readonly DT_INVALID: draco_DataType;\n readonly DT_INT8: draco_DataType;\n readonly DT_UINT8: draco_DataType;\n readonly DT_INT16: draco_DataType;\n readonly DT_UINT16: draco_DataType;\n readonly DT_INT32: draco_DataType;\n readonly DT_UINT32: draco_DataType;\n readonly DT_INT64: draco_DataType;\n readonly DT_UINT64: draco_DataType;\n readonly DT_FLOAT32: draco_DataType;\n readonly DT_FLOAT64: draco_DataType;\n readonly DT_BOOL: draco_DataType;\n readonly DT_TYPES_COUNT: draco_DataType;\n\n readonly Mesh: typeof Mesh;\n readonly PointCloud: typeof PointCloud;\n readonly Metadata: typeof Metadata;\n\n readonly Encoder: typeof Encoder;\n readonly MeshBuilder: typeof MeshBuilder;\n readonly MetadataBuilder: typeof MetadataBuilder;\n\n readonly MetadataQuerier: typeof MetadataQuerier;\n readonly Decoder: typeof Decoder;\n readonly DecoderBuffer: typeof DecoderBuffer;\n\n readonly DracoFloat32Array: typeof DracoFloat32Array;\n readonly DracoInt8Array: typeof DracoInt8Array;\n readonly DracoUInt8Array: typeof DracoUInt8Array;\n readonly DracoInt16Array: typeof DracoInt16Array;\n readonly DracoUInt16Array: typeof DracoUInt16Array;\n readonly DracoInt32Array: typeof DracoInt32Array;\n readonly DracoUInt32Array: typeof DracoUInt32Array;\n\n readonly AttributeQuantizationTransform: typeof AttributeQuantizationTransform;\n\n // createEncoderModule(): Encoder;\n // createDecoderModule(): Decoder;\n destroy(resource: any): void;\n _malloc(byteLength: number): number;\n _free(ptr: number): void;\n\n HEAPF32: {\n buffer: ArrayBuffer;\n };\n}\n"],"mappings":";;AAiBA,WAAYA,4BAA4B;;AAOvC,WAPWA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;EAA5BA,4BAA4B,CAA5BA,4BAA4B;AAAA,GAA5BA,4BAA4B,KAA5BA,4BAA4B;AAUxC,WAAYC,yBAAyB;;AAIpC,WAJWA,yBAAyB;EAAzBA,yBAAyB,CAAzBA,yBAAyB;EAAzBA,yBAAyB,CAAzBA,yBAAyB;EAAzBA,yBAAyB,CAAzBA,yBAAyB;AAAA,GAAzBA,yBAAyB,KAAzBA,yBAAyB;AAOrC,WAAYC,cAAc;;AAczB,WAdWA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;EAAdA,cAAc,CAAdA,cAAc;AAAA,GAAdA,cAAc,KAAdA,cAAc;AAiB1B,WAAYC,gBAAgB;;AAO3B,WAPWA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;EAAhBA,gBAAgB,CAAhBA,gBAAgB;AAAA,GAAhBA,gBAAgB,KAAhBA,gBAAgB"}
package/dist/esm/index.js CHANGED
@@ -3,7 +3,9 @@ import DracoParser from './lib/draco-parser';
3
3
  import { loadDracoDecoderModule } from './lib/draco-module-loader';
4
4
  import { VERSION } from './lib/utils/version';
5
5
  import { isBrowser } from '@loaders.gl/worker-utils';
6
+
6
7
  export { DracoWriter } from './draco-writer';
8
+
7
9
  export const DracoWriterWorker = {
8
10
  id: isBrowser ? 'draco-writer' : 'draco-writer-nodejs',
9
11
  name: 'Draco compressed geometry writer',
@@ -15,17 +17,18 @@ export const DracoWriterWorker = {
15
17
  source: null
16
18
  }
17
19
  };
20
+
18
21
  export { DracoWorkerLoader };
19
- export const DracoLoader = { ...DracoWorkerLoader,
22
+
23
+ export const DracoLoader = {
24
+ ...DracoWorkerLoader,
20
25
  parse
21
26
  };
22
-
23
27
  async function parse(arrayBuffer, options) {
24
28
  const {
25
29
  draco
26
30
  } = await loadDracoDecoderModule(options);
27
31
  const dracoParser = new DracoParser(draco);
28
-
29
32
  try {
30
33
  return dracoParser.parseSync(arrayBuffer, options === null || options === void 0 ? void 0 : options.draco);
31
34
  } finally {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["DracoLoader","DracoWorkerLoader","DracoParser","loadDracoDecoderModule","VERSION","isBrowser","DracoWriter","DracoWriterWorker","id","name","module","version","worker","options","draco","source","parse","arrayBuffer","dracoParser","parseSync","destroy","_TypecheckDracoLoader"],"mappings":"AAGA,SAAQA,WAAW,IAAIC,iBAAvB,QAA+C,gBAA/C;AACA,OAAOC,WAAP,MAAwB,oBAAxB;AACA,SAAQC,sBAAR,QAAqC,2BAArC;AACA,SAAQC,OAAR,QAAsB,qBAAtB;AACA,SAAQC,SAAR,QAAwB,0BAAxB;AASA,SAAQC,WAAR,QAA0B,gBAA1B;AAMA,OAAO,MAAMC,iBAAiB,GAAG;AAC/BC,EAAAA,EAAE,EAAEH,SAAS,GAAG,cAAH,GAAoB,qBADF;AAE/BI,EAAAA,IAAI,EAAE,kCAFyB;AAG/BC,EAAAA,MAAM,EAAE,OAHuB;AAI/BC,EAAAA,OAAO,EAAEP,OAJsB;AAK/BQ,EAAAA,MAAM,EAAE,IALuB;AAM/BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,KAAK,EAAE,EADA;AAEPC,IAAAA,MAAM,EAAE;AAFD;AANsB,CAA1B;AAeP,SAAQd,iBAAR;AAKA,OAAO,MAAMD,WAAW,GAAG,EACzB,GAAGC,iBADsB;AAEzBe,EAAAA;AAFyB,CAApB;;AAKP,eAAeA,KAAf,CAAqBC,WAArB,EAA+CJ,OAA/C,EAAiG;AAC/F,QAAM;AAACC,IAAAA;AAAD,MAAU,MAAMX,sBAAsB,CAACU,OAAD,CAA5C;AACA,QAAMK,WAAW,GAAG,IAAIhB,WAAJ,CAAgBY,KAAhB,CAApB;;AACA,MAAI;AACF,WAAOI,WAAW,CAACC,SAAZ,CAAsBF,WAAtB,EAAmCJ,OAAnC,aAAmCA,OAAnC,uBAAmCA,OAAO,CAAEC,KAA5C,CAAP;AACD,GAFD,SAEU;AACRI,IAAAA,WAAW,CAACE,OAAZ;AACD;AACF;;AAGD,OAAO,MAAMC,qBAAuC,GAAGrB,WAAhD","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {DracoMesh, DracoLoaderData} from './lib/draco-types';\nimport type {DracoLoaderOptions} from './draco-loader';\nimport {DracoLoader as DracoWorkerLoader} from './draco-loader';\nimport DracoParser from './lib/draco-parser';\nimport {loadDracoDecoderModule} from './lib/draco-module-loader';\nimport {VERSION} from './lib/utils/version';\nimport {isBrowser} from '@loaders.gl/worker-utils';\n\n// Draco data types\n\nexport type {DracoMesh, DracoLoaderData};\n\n// Draco Writer\n\nexport type {DracoWriterOptions} from './draco-writer';\nexport {DracoWriter} from './draco-writer';\n\n/**\n * Browser worker doesn't work because of issue during \"draco_encoder.js\" loading.\n * Refused to execute script from 'https://raw.githubusercontent.com/google/draco/1.4.1/javascript/draco_encoder.js' because its MIME type ('') is not executable.\n */\nexport const DracoWriterWorker = {\n id: isBrowser ? 'draco-writer' : 'draco-writer-nodejs',\n name: 'Draco compressed geometry writer',\n module: 'draco',\n version: VERSION,\n worker: true,\n options: {\n draco: {},\n source: null\n }\n};\n\n// Draco Loader\n\nexport type {DracoLoaderOptions};\nexport {DracoWorkerLoader};\n\n/**\n * Loader for Draco3D compressed geometries\n */\nexport const DracoLoader = {\n ...DracoWorkerLoader,\n parse\n};\n\nasync function parse(arrayBuffer: ArrayBuffer, options?: DracoLoaderOptions): Promise<DracoMesh> {\n const {draco} = await loadDracoDecoderModule(options);\n const dracoParser = new DracoParser(draco);\n try {\n return dracoParser.parseSync(arrayBuffer, options?.draco);\n } finally {\n dracoParser.destroy();\n }\n}\n\n// TYPE TESTS - TODO find a better way than exporting junk\nexport const _TypecheckDracoLoader: LoaderWithParser = DracoLoader;\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["DracoLoader","DracoWorkerLoader","DracoParser","loadDracoDecoderModule","VERSION","isBrowser","DracoWriter","DracoWriterWorker","id","name","module","version","worker","options","draco","source","parse","arrayBuffer","dracoParser","parseSync","destroy","_TypecheckDracoLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {DracoMesh, DracoLoaderData} from './lib/draco-types';\nimport type {DracoLoaderOptions} from './draco-loader';\nimport {DracoLoader as DracoWorkerLoader} from './draco-loader';\nimport DracoParser from './lib/draco-parser';\nimport {loadDracoDecoderModule} from './lib/draco-module-loader';\nimport {VERSION} from './lib/utils/version';\nimport {isBrowser} from '@loaders.gl/worker-utils';\n\n// Draco data types\n\nexport type {DracoMesh, DracoLoaderData};\n\n// Draco Writer\n\nexport type {DracoWriterOptions} from './draco-writer';\nexport {DracoWriter} from './draco-writer';\n\n/**\n * Browser worker doesn't work because of issue during \"draco_encoder.js\" loading.\n * Refused to execute script from 'https://raw.githubusercontent.com/google/draco/1.4.1/javascript/draco_encoder.js' because its MIME type ('') is not executable.\n */\nexport const DracoWriterWorker = {\n id: isBrowser ? 'draco-writer' : 'draco-writer-nodejs',\n name: 'Draco compressed geometry writer',\n module: 'draco',\n version: VERSION,\n worker: true,\n options: {\n draco: {},\n source: null\n }\n};\n\n// Draco Loader\n\nexport type {DracoLoaderOptions};\nexport {DracoWorkerLoader};\n\n/**\n * Loader for Draco3D compressed geometries\n */\nexport const DracoLoader = {\n ...DracoWorkerLoader,\n parse\n};\n\nasync function parse(arrayBuffer: ArrayBuffer, options?: DracoLoaderOptions): Promise<DracoMesh> {\n const {draco} = await loadDracoDecoderModule(options);\n const dracoParser = new DracoParser(draco);\n try {\n return dracoParser.parseSync(arrayBuffer, options?.draco);\n } finally {\n dracoParser.destroy();\n }\n}\n\n// TYPE TESTS - TODO find a better way than exporting junk\nexport const _TypecheckDracoLoader: LoaderWithParser = DracoLoader;\n"],"mappings":"AAGA,SAAQA,WAAW,IAAIC,iBAAiB,QAAO,gBAAgB;AAC/D,OAAOC,WAAW,MAAM,oBAAoB;AAC5C,SAAQC,sBAAsB,QAAO,2BAA2B;AAChE,SAAQC,OAAO,QAAO,qBAAqB;AAC3C,SAAQC,SAAS,QAAO,0BAA0B;;AASlD,SAAQC,WAAW,QAAO,gBAAgB;;AAM1C,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,EAAE,EAAEH,SAAS,GAAG,cAAc,GAAG,qBAAqB;EACtDI,IAAI,EAAE,kCAAkC;EACxCC,MAAM,EAAE,OAAO;EACfC,OAAO,EAAEP,OAAO;EAChBQ,MAAM,EAAE,IAAI;EACZC,OAAO,EAAE;IACPC,KAAK,EAAE,CAAC,CAAC;IACTC,MAAM,EAAE;EACV;AACF,CAAC;;AAKD,SAAQd,iBAAiB;;AAKzB,OAAO,MAAMD,WAAW,GAAG;EACzB,GAAGC,iBAAiB;EACpBe;AACF,CAAC;AAED,eAAeA,KAAK,CAACC,WAAwB,EAAEJ,OAA4B,EAAsB;EAC/F,MAAM;IAACC;EAAK,CAAC,GAAG,MAAMX,sBAAsB,CAACU,OAAO,CAAC;EACrD,MAAMK,WAAW,GAAG,IAAIhB,WAAW,CAACY,KAAK,CAAC;EAC1C,IAAI;IACF,OAAOI,WAAW,CAACC,SAAS,CAACF,WAAW,EAAEJ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,KAAK,CAAC;EAC3D,CAAC,SAAS;IACRI,WAAW,CAACE,OAAO,EAAE;EACvB;AACF;;AAGA,OAAO,MAAMC,qBAAuC,GAAGrB,WAAW"}
@@ -1,31 +1,24 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
2
3
  const GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
3
4
  POSITION: 'POSITION',
4
5
  NORMAL: 'NORMAL',
5
6
  COLOR_0: 'COLOR',
6
7
  TEXCOORD_0: 'TEX_COORD'
7
8
  };
8
-
9
9
  const noop = () => {};
10
-
11
10
  export default class DracoBuilder {
12
11
  constructor(draco) {
13
12
  _defineProperty(this, "draco", void 0);
14
-
15
13
  _defineProperty(this, "dracoEncoder", void 0);
16
-
17
14
  _defineProperty(this, "dracoMeshBuilder", void 0);
18
-
19
15
  _defineProperty(this, "dracoMetadataBuilder", void 0);
20
-
21
16
  _defineProperty(this, "log", void 0);
22
-
23
17
  this.draco = draco;
24
18
  this.dracoEncoder = new this.draco.Encoder();
25
19
  this.dracoMeshBuilder = new this.draco.MeshBuilder();
26
20
  this.dracoMetadataBuilder = new this.draco.MetadataBuilder();
27
21
  }
28
-
29
22
  destroy() {
30
23
  this.destroyEncodedObject(this.dracoMeshBuilder);
31
24
  this.destroyEncodedObject(this.dracoEncoder);
@@ -41,46 +34,37 @@ export default class DracoBuilder {
41
34
  }
42
35
  }
43
36
 
44
- encodeSync(mesh, options = {}) {
37
+ encodeSync(mesh) {
38
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
45
39
  this.log = noop;
46
-
47
40
  this._setOptions(options);
48
-
49
41
  return options.pointcloud ? this._encodePointCloud(mesh, options) : this._encodeMesh(mesh, options);
50
42
  }
51
43
 
52
44
  _getAttributesFromMesh(mesh) {
53
- const attributes = { ...mesh,
45
+ const attributes = {
46
+ ...mesh,
54
47
  ...mesh.attributes
55
48
  };
56
-
57
49
  if (mesh.indices) {
58
50
  attributes.indices = mesh.indices;
59
51
  }
60
-
61
52
  return attributes;
62
53
  }
63
-
64
54
  _encodePointCloud(pointcloud, options) {
65
55
  const dracoPointCloud = new this.draco.PointCloud();
66
-
67
56
  if (options.metadata) {
68
57
  this._addGeometryMetadata(dracoPointCloud, options.metadata);
69
58
  }
70
-
71
59
  const attributes = this._getAttributesFromMesh(pointcloud);
72
60
 
73
61
  this._createDracoPointCloud(dracoPointCloud, attributes, options);
74
-
75
62
  const dracoData = new this.draco.DracoInt8Array();
76
-
77
63
  try {
78
64
  const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(dracoPointCloud, false, dracoData);
79
-
80
65
  if (!(encodedLen > 0)) {
81
66
  throw new Error('Draco encoding failed.');
82
67
  }
83
-
84
68
  this.log("DRACO encoded ".concat(dracoPointCloud.num_points(), " points\n with ").concat(dracoPointCloud.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
85
69
  return dracoInt8ArrayToArrayBuffer(dracoData);
86
70
  } finally {
@@ -88,27 +72,20 @@ export default class DracoBuilder {
88
72
  this.destroyEncodedObject(dracoPointCloud);
89
73
  }
90
74
  }
91
-
92
75
  _encodeMesh(mesh, options) {
93
76
  const dracoMesh = new this.draco.Mesh();
94
-
95
77
  if (options.metadata) {
96
78
  this._addGeometryMetadata(dracoMesh, options.metadata);
97
79
  }
98
-
99
80
  const attributes = this._getAttributesFromMesh(mesh);
100
81
 
101
82
  this._createDracoMesh(dracoMesh, attributes, options);
102
-
103
83
  const dracoData = new this.draco.DracoInt8Array();
104
-
105
84
  try {
106
85
  const encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
107
-
108
86
  if (encodedLen <= 0) {
109
87
  throw new Error('Draco encoding failed.');
110
88
  }
111
-
112
89
  this.log("DRACO encoded ".concat(dracoMesh.num_points(), " points\n with ").concat(dracoMesh.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
113
90
  return dracoInt8ArrayToArrayBuffer(dracoData);
114
91
  } finally {
@@ -121,12 +98,10 @@ export default class DracoBuilder {
121
98
  if ('speed' in options) {
122
99
  this.dracoEncoder.SetSpeedOptions(...options.speed);
123
100
  }
124
-
125
101
  if ('method' in options) {
126
102
  const dracoMethod = this.draco[options.method || 'MESH_SEQUENTIAL_ENCODING'];
127
103
  this.dracoEncoder.SetEncodingMethod(dracoMethod);
128
104
  }
129
-
130
105
  if ('quantization' in options) {
131
106
  for (const attribute in options.quantization) {
132
107
  const bits = options.quantization[attribute];
@@ -138,22 +113,16 @@ export default class DracoBuilder {
138
113
 
139
114
  _createDracoMesh(dracoMesh, attributes, options) {
140
115
  const optionalMetadata = options.attributesMetadata || {};
141
-
142
116
  try {
143
117
  const positions = this._getPositionAttribute(attributes);
144
-
145
118
  if (!positions) {
146
119
  throw new Error('positions');
147
120
  }
148
-
149
121
  const vertexCount = positions.length / 3;
150
-
151
122
  for (let attributeName in attributes) {
152
123
  const attribute = attributes[attributeName];
153
124
  attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
154
-
155
125
  const uniqueId = this._addAttributeToMesh(dracoMesh, attributeName, attribute, vertexCount);
156
-
157
126
  if (uniqueId !== -1) {
158
127
  this._addAttributeMetadata(dracoMesh, uniqueId, {
159
128
  name: attributeName,
@@ -165,28 +134,21 @@ export default class DracoBuilder {
165
134
  this.destroyEncodedObject(dracoMesh);
166
135
  throw error;
167
136
  }
168
-
169
137
  return dracoMesh;
170
138
  }
171
139
 
172
140
  _createDracoPointCloud(dracoPointCloud, attributes, options) {
173
141
  const optionalMetadata = options.attributesMetadata || {};
174
-
175
142
  try {
176
143
  const positions = this._getPositionAttribute(attributes);
177
-
178
144
  if (!positions) {
179
145
  throw new Error('positions');
180
146
  }
181
-
182
147
  const vertexCount = positions.length / 3;
183
-
184
148
  for (let attributeName in attributes) {
185
149
  const attribute = attributes[attributeName];
186
150
  attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
187
-
188
151
  const uniqueId = this._addAttributeToMesh(dracoPointCloud, attributeName, attribute, vertexCount);
189
-
190
152
  if (uniqueId !== -1) {
191
153
  this._addAttributeMetadata(dracoPointCloud, uniqueId, {
192
154
  name: attributeName,
@@ -198,7 +160,6 @@ export default class DracoBuilder {
198
160
  this.destroyEncodedObject(dracoPointCloud);
199
161
  throw error;
200
162
  }
201
-
202
163
  return dracoPointCloud;
203
164
  }
204
165
 
@@ -206,44 +167,34 @@ export default class DracoBuilder {
206
167
  if (!ArrayBuffer.isView(attribute)) {
207
168
  return -1;
208
169
  }
209
-
210
170
  const type = this._getDracoAttributeType(attributeName);
211
-
212
171
  const size = attribute.length / vertexCount;
213
-
214
172
  if (type === 'indices') {
215
173
  const numFaces = attribute.length / 3;
216
174
  this.log("Adding attribute ".concat(attributeName, ", size ").concat(numFaces));
175
+
217
176
  this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);
218
177
  return -1;
219
178
  }
220
-
221
179
  this.log("Adding attribute ".concat(attributeName, ", size ").concat(size));
222
180
  const builder = this.dracoMeshBuilder;
223
181
  const {
224
182
  buffer
225
183
  } = attribute;
226
-
227
184
  switch (attribute.constructor) {
228
185
  case Int8Array:
229
186
  return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));
230
-
231
187
  case Int16Array:
232
188
  return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));
233
-
234
189
  case Int32Array:
235
190
  return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));
236
-
237
191
  case Uint8Array:
238
192
  case Uint8ClampedArray:
239
193
  return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));
240
-
241
194
  case Uint16Array:
242
195
  return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));
243
-
244
196
  case Uint32Array:
245
197
  return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));
246
-
247
198
  case Float32Array:
248
199
  default:
249
200
  return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));
@@ -254,56 +205,43 @@ export default class DracoBuilder {
254
205
  switch (attributeName.toLowerCase()) {
255
206
  case 'indices':
256
207
  return 'indices';
257
-
258
208
  case 'position':
259
209
  case 'positions':
260
210
  case 'vertices':
261
211
  return this.draco.POSITION;
262
-
263
212
  case 'normal':
264
213
  case 'normals':
265
214
  return this.draco.NORMAL;
266
-
267
215
  case 'color':
268
216
  case 'colors':
269
217
  return this.draco.COLOR;
270
-
271
218
  case 'texcoord':
272
219
  case 'texcoords':
273
220
  return this.draco.TEX_COORD;
274
-
275
221
  default:
276
222
  return this.draco.GENERIC;
277
223
  }
278
224
  }
279
-
280
225
  _getPositionAttribute(attributes) {
281
226
  for (const attributeName in attributes) {
282
227
  const attribute = attributes[attributeName];
283
-
284
228
  const dracoType = this._getDracoAttributeType(attributeName);
285
-
286
229
  if (dracoType === this.draco.POSITION) {
287
230
  return attribute;
288
231
  }
289
232
  }
290
-
291
233
  return null;
292
234
  }
293
235
 
294
236
  _addGeometryMetadata(dracoGeometry, metadata) {
295
237
  const dracoMetadata = new this.draco.Metadata();
296
-
297
238
  this._populateDracoMetadata(dracoMetadata, metadata);
298
-
299
239
  this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);
300
240
  }
301
241
 
302
242
  _addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
303
243
  const dracoAttributeMetadata = new this.draco.Metadata();
304
-
305
244
  this._populateDracoMetadata(dracoAttributeMetadata, metadata);
306
-
307
245
  this.dracoMeshBuilder.SetMetadataForAttribute(dracoGeometry, uniqueAttributeId, dracoAttributeMetadata);
308
246
  }
309
247
 
@@ -316,34 +254,27 @@ export default class DracoBuilder {
316
254
  } else {
317
255
  this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, key, value);
318
256
  }
319
-
320
257
  break;
321
-
322
258
  case 'object':
323
259
  if (value instanceof Int32Array) {
324
260
  this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, key, value, value.length);
325
261
  }
326
-
327
262
  break;
328
-
329
263
  case 'string':
330
264
  default:
331
265
  this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, key, value);
332
266
  }
333
267
  }
334
268
  }
335
-
336
269
  }
337
270
 
338
271
  function dracoInt8ArrayToArrayBuffer(dracoData) {
339
272
  const byteLength = dracoData.size();
340
273
  const outputBuffer = new ArrayBuffer(byteLength);
341
274
  const outputData = new Int8Array(outputBuffer);
342
-
343
275
  for (let i = 0; i < byteLength; ++i) {
344
276
  outputData[i] = dracoData.GetValue(i);
345
277
  }
346
-
347
278
  return outputBuffer;
348
279
  }
349
280
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/draco-builder.ts"],"names":["GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","noop","DracoBuilder","constructor","draco","dracoEncoder","Encoder","dracoMeshBuilder","MeshBuilder","dracoMetadataBuilder","MetadataBuilder","destroy","destroyEncodedObject","object","encodeSync","mesh","options","log","_setOptions","pointcloud","_encodePointCloud","_encodeMesh","_getAttributesFromMesh","attributes","indices","dracoPointCloud","PointCloud","metadata","_addGeometryMetadata","_createDracoPointCloud","dracoData","DracoInt8Array","encodedLen","EncodePointCloudToDracoBuffer","Error","num_points","num_attributes","dracoInt8ArrayToArrayBuffer","dracoMesh","Mesh","_createDracoMesh","EncodeMeshToDracoBuffer","SetSpeedOptions","speed","dracoMethod","method","SetEncodingMethod","attribute","quantization","bits","dracoPosition","SetAttributeQuantization","optionalMetadata","attributesMetadata","positions","_getPositionAttribute","vertexCount","length","attributeName","uniqueId","_addAttributeToMesh","_addAttributeMetadata","name","error","ArrayBuffer","isView","type","_getDracoAttributeType","size","numFaces","AddFacesToMesh","builder","buffer","Int8Array","AddInt8Attribute","Int16Array","AddInt16Attribute","Int32Array","AddInt32Attribute","Uint8Array","Uint8ClampedArray","AddUInt8Attribute","Uint16Array","AddUInt16Attribute","Uint32Array","AddUInt32Attribute","Float32Array","AddFloatAttribute","toLowerCase","COLOR","TEX_COORD","GENERIC","dracoType","dracoGeometry","dracoMetadata","Metadata","_populateDracoMetadata","AddMetadata","uniqueAttributeId","dracoAttributeMetadata","SetMetadataForAttribute","key","value","getEntries","Math","trunc","AddIntEntry","AddDoubleEntry","AddIntEntryArray","AddStringEntry","byteLength","outputBuffer","outputData","i","GetValue","container","hasEntriesFunc","entries","hasOwnProperty","Object"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\n// This code is inspired by example code in the DRACO repository\nimport type {\n Draco3D,\n DracoInt8Array,\n Encoder,\n Mesh,\n MeshBuilder,\n PointCloud,\n Metadata,\n MetadataBuilder,\n draco_GeometryAttribute_Type\n} from '../draco3d/draco3d-types';\n\nimport type {TypedArray} from '@loaders.gl/schema';\nimport type {DracoMesh} from './draco-types';\n\nexport type DracoBuildOptions = {\n pointcloud?: boolean;\n metadata?: {[key: string]: string};\n attributesMetadata?: {};\n log?: any;\n\n // draco encoding options\n speed?: [number, number];\n method?: string;\n quantization?: {[attributeName: string]: number};\n};\n\n// Native Draco attribute names to GLTF attribute names.\nconst GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {\n POSITION: 'POSITION',\n NORMAL: 'NORMAL',\n COLOR_0: 'COLOR',\n TEXCOORD_0: 'TEX_COORD'\n};\n\nconst noop = () => {};\n\nexport default class DracoBuilder {\n draco: Draco3D;\n dracoEncoder: Encoder;\n dracoMeshBuilder: MeshBuilder;\n dracoMetadataBuilder: MetadataBuilder;\n log: any;\n\n // draco - the draco decoder, either import `draco3d` or load dynamically\n constructor(draco: Draco3D) {\n this.draco = draco;\n this.dracoEncoder = new this.draco.Encoder();\n this.dracoMeshBuilder = new this.draco.MeshBuilder();\n this.dracoMetadataBuilder = new this.draco.MetadataBuilder();\n }\n\n destroy(): void {\n this.destroyEncodedObject(this.dracoMeshBuilder);\n this.destroyEncodedObject(this.dracoEncoder);\n this.destroyEncodedObject(this.dracoMetadataBuilder);\n // @ts-ignore\n this.dracoMeshBuilder = null;\n // @ts-ignore\n this.dracoEncoder = null;\n // @ts-ignore\n this.draco = null;\n }\n\n // TBD - when does this need to be called?\n destroyEncodedObject(object): void {\n if (object) {\n this.draco.destroy(object);\n }\n }\n\n /**\n * Encode mesh or point cloud\n * @param mesh =({})\n * @param options\n */\n encodeSync(mesh: DracoMesh, options: DracoBuildOptions = {}): ArrayBuffer {\n this.log = noop; // TODO\n this._setOptions(options);\n\n return options.pointcloud\n ? this._encodePointCloud(mesh, options)\n : this._encodeMesh(mesh, options);\n }\n\n // PRIVATE\n\n _getAttributesFromMesh(mesh: DracoMesh) {\n // TODO - Change the encodePointCloud interface instead?\n const attributes = {...mesh, ...mesh.attributes};\n // Fold indices into the attributes\n if (mesh.indices) {\n attributes.indices = mesh.indices;\n }\n return attributes;\n }\n\n _encodePointCloud(pointcloud: DracoMesh, options: DracoBuildOptions): ArrayBuffer {\n const dracoPointCloud = new this.draco.PointCloud();\n\n if (options.metadata) {\n this._addGeometryMetadata(dracoPointCloud, options.metadata);\n }\n\n const attributes = this._getAttributesFromMesh(pointcloud);\n\n // Build a `DracoPointCloud` from the input data\n this._createDracoPointCloud(dracoPointCloud, attributes, options);\n\n const dracoData = new this.draco.DracoInt8Array();\n\n try {\n const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(\n dracoPointCloud,\n false,\n dracoData\n );\n\n if (!(encodedLen > 0)) {\n throw new Error('Draco encoding failed.');\n }\n\n this.log(`DRACO encoded ${dracoPointCloud.num_points()} points\n with ${dracoPointCloud.num_attributes()} attributes into ${encodedLen} bytes`);\n\n return dracoInt8ArrayToArrayBuffer(dracoData);\n } finally {\n this.destroyEncodedObject(dracoData);\n this.destroyEncodedObject(dracoPointCloud);\n }\n }\n\n _encodeMesh(mesh: DracoMesh, options: DracoBuildOptions): ArrayBuffer {\n const dracoMesh = new this.draco.Mesh();\n\n if (options.metadata) {\n this._addGeometryMetadata(dracoMesh, options.metadata);\n }\n\n const attributes = this._getAttributesFromMesh(mesh);\n\n // Build a `DracoMesh` from the input data\n this._createDracoMesh(dracoMesh, attributes, options);\n\n const dracoData = new this.draco.DracoInt8Array();\n\n try {\n const encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);\n if (encodedLen <= 0) {\n throw new Error('Draco encoding failed.');\n }\n\n this.log(`DRACO encoded ${dracoMesh.num_points()} points\n with ${dracoMesh.num_attributes()} attributes into ${encodedLen} bytes`);\n\n return dracoInt8ArrayToArrayBuffer(dracoData);\n } finally {\n this.destroyEncodedObject(dracoData);\n this.destroyEncodedObject(dracoMesh);\n }\n }\n\n /**\n * Set encoding options.\n * @param {{speed?: any; method?: any; quantization?: any;}} options\n */\n _setOptions(options: DracoBuildOptions): void {\n if ('speed' in options) {\n // @ts-ignore\n this.dracoEncoder.SetSpeedOptions(...options.speed);\n }\n if ('method' in options) {\n const dracoMethod = this.draco[options.method || 'MESH_SEQUENTIAL_ENCODING'];\n // assert(dracoMethod)\n this.dracoEncoder.SetEncodingMethod(dracoMethod);\n }\n if ('quantization' in options) {\n for (const attribute in options.quantization) {\n const bits = options.quantization[attribute];\n const dracoPosition = this.draco[attribute];\n this.dracoEncoder.SetAttributeQuantization(dracoPosition, bits);\n }\n }\n }\n\n /**\n * @param {Mesh} dracoMesh\n * @param {object} attributes\n * @returns {Mesh}\n */\n _createDracoMesh(dracoMesh: Mesh, attributes, options: DracoBuildOptions): Mesh {\n const optionalMetadata = options.attributesMetadata || {};\n\n try {\n const positions = this._getPositionAttribute(attributes);\n if (!positions) {\n throw new Error('positions');\n }\n const vertexCount = positions.length / 3;\n\n for (let attributeName in attributes) {\n const attribute = attributes[attributeName];\n attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;\n const uniqueId = this._addAttributeToMesh(dracoMesh, attributeName, attribute, vertexCount);\n\n if (uniqueId !== -1) {\n this._addAttributeMetadata(dracoMesh, uniqueId, {\n name: attributeName,\n ...(optionalMetadata[attributeName] || {})\n });\n }\n }\n } catch (error) {\n this.destroyEncodedObject(dracoMesh);\n throw error;\n }\n\n return dracoMesh;\n }\n\n /**\n * @param {} dracoPointCloud\n * @param {object} attributes\n */\n _createDracoPointCloud(\n dracoPointCloud: PointCloud,\n attributes: object,\n options: DracoBuildOptions\n ): PointCloud {\n const optionalMetadata = options.attributesMetadata || {};\n\n try {\n const positions = this._getPositionAttribute(attributes);\n if (!positions) {\n throw new Error('positions');\n }\n const vertexCount = positions.length / 3;\n\n for (let attributeName in attributes) {\n const attribute = attributes[attributeName];\n attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;\n const uniqueId = this._addAttributeToMesh(\n dracoPointCloud,\n attributeName,\n attribute,\n vertexCount\n );\n if (uniqueId !== -1) {\n this._addAttributeMetadata(dracoPointCloud, uniqueId, {\n name: attributeName,\n ...(optionalMetadata[attributeName] || {})\n });\n }\n }\n } catch (error) {\n this.destroyEncodedObject(dracoPointCloud);\n throw error;\n }\n\n return dracoPointCloud;\n }\n\n /**\n * @param mesh\n * @param attributeName\n * @param attribute\n * @param vertexCount\n */\n _addAttributeToMesh(\n mesh: PointCloud,\n attributeName: string,\n attribute: TypedArray,\n vertexCount: number\n ) {\n if (!ArrayBuffer.isView(attribute)) {\n return -1;\n }\n\n const type = this._getDracoAttributeType(attributeName);\n // @ts-ignore TODO/fix types\n const size = attribute.length / vertexCount;\n\n if (type === 'indices') {\n // @ts-ignore TODO/fix types\n const numFaces = attribute.length / 3;\n this.log(`Adding attribute ${attributeName}, size ${numFaces}`);\n\n // @ts-ignore assumes mesh is a Mesh, not a point cloud\n this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);\n return -1;\n }\n\n this.log(`Adding attribute ${attributeName}, size ${size}`);\n\n const builder = this.dracoMeshBuilder;\n const {buffer} = attribute;\n\n switch (attribute.constructor) {\n case Int8Array:\n return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));\n\n case Int16Array:\n return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));\n\n case Int32Array:\n return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));\n case Uint8Array:\n case Uint8ClampedArray:\n return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));\n\n case Uint16Array:\n return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));\n\n case Uint32Array:\n return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));\n\n case Float32Array:\n default:\n return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));\n }\n }\n\n /**\n * DRACO can compress attributes of know type better\n * TODO - expose an attribute type map?\n * @param attributeName\n */\n _getDracoAttributeType(attributeName: string): draco_GeometryAttribute_Type | 'indices' {\n switch (attributeName.toLowerCase()) {\n case 'indices':\n return 'indices';\n case 'position':\n case 'positions':\n case 'vertices':\n return this.draco.POSITION;\n case 'normal':\n case 'normals':\n return this.draco.NORMAL;\n case 'color':\n case 'colors':\n return this.draco.COLOR;\n case 'texcoord':\n case 'texcoords':\n return this.draco.TEX_COORD;\n default:\n return this.draco.GENERIC;\n }\n }\n\n _getPositionAttribute(attributes) {\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const dracoType = this._getDracoAttributeType(attributeName);\n if (dracoType === this.draco.POSITION) {\n return attribute;\n }\n }\n return null;\n }\n\n /**\n * Add metadata for the geometry.\n * @param dracoGeometry - WASM Draco Object\n * @param metadata\n */\n _addGeometryMetadata(dracoGeometry: PointCloud, metadata: {[key: string]: string}) {\n const dracoMetadata = new this.draco.Metadata();\n this._populateDracoMetadata(dracoMetadata, metadata);\n this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);\n }\n\n /**\n * Add metadata for an attribute to geometry.\n * @param dracoGeometry - WASM Draco Object\n * @param uniqueAttributeId\n * @param metadata\n */\n _addAttributeMetadata(\n dracoGeometry: PointCloud,\n uniqueAttributeId: number,\n metadata: Map<string, string> | {[key: string]: string}\n ) {\n // Note: Draco JS IDL doesn't seem to expose draco.AttributeMetadata, however it seems to\n // create such objects automatically from draco.Metadata object.\n const dracoAttributeMetadata = new this.draco.Metadata();\n this._populateDracoMetadata(dracoAttributeMetadata, metadata);\n // Draco3d doc note: Directly add attribute metadata to geometry.\n // You can do this without explicitly adding |GeometryMetadata| to mesh.\n this.dracoMeshBuilder.SetMetadataForAttribute(\n dracoGeometry,\n uniqueAttributeId,\n dracoAttributeMetadata\n );\n }\n\n /**\n * Add contents of object or map to a WASM Draco Metadata Object\n * @param dracoMetadata - WASM Draco Object\n * @param metadata\n */\n _populateDracoMetadata(\n dracoMetadata: Metadata,\n metadata: Map<string, string> | {[key: string]: string}\n ) {\n for (const [key, value] of getEntries(metadata)) {\n switch (typeof value) {\n case 'number':\n if (Math.trunc(value) === value) {\n this.dracoMetadataBuilder.AddIntEntry(dracoMetadata, key, value);\n } else {\n this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, key, value);\n }\n break;\n case 'object':\n if (value instanceof Int32Array) {\n this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, key, value, value.length);\n }\n break;\n case 'string':\n default:\n this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, key, value);\n }\n }\n }\n}\n\n// HELPER FUNCTIONS\n\n/**\n * Copy encoded data to buffer\n * @param dracoData\n */\nfunction dracoInt8ArrayToArrayBuffer(dracoData: DracoInt8Array) {\n const byteLength = dracoData.size();\n const outputBuffer = new ArrayBuffer(byteLength);\n const outputData = new Int8Array(outputBuffer);\n for (let i = 0; i < byteLength; ++i) {\n outputData[i] = dracoData.GetValue(i);\n }\n return outputBuffer;\n}\n\n/** Enable iteration over either an object or a map */\nfunction getEntries(container) {\n const hasEntriesFunc = container.entries && !container.hasOwnProperty('entries');\n return hasEntriesFunc ? container.entries() : Object.entries(container);\n}\n"],"file":"draco-builder.js"}
1
+ {"version":3,"file":"draco-builder.js","names":["GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","noop","DracoBuilder","constructor","draco","dracoEncoder","Encoder","dracoMeshBuilder","MeshBuilder","dracoMetadataBuilder","MetadataBuilder","destroy","destroyEncodedObject","object","encodeSync","mesh","options","log","_setOptions","pointcloud","_encodePointCloud","_encodeMesh","_getAttributesFromMesh","attributes","indices","dracoPointCloud","PointCloud","metadata","_addGeometryMetadata","_createDracoPointCloud","dracoData","DracoInt8Array","encodedLen","EncodePointCloudToDracoBuffer","Error","num_points","num_attributes","dracoInt8ArrayToArrayBuffer","dracoMesh","Mesh","_createDracoMesh","EncodeMeshToDracoBuffer","SetSpeedOptions","speed","dracoMethod","method","SetEncodingMethod","attribute","quantization","bits","dracoPosition","SetAttributeQuantization","optionalMetadata","attributesMetadata","positions","_getPositionAttribute","vertexCount","length","attributeName","uniqueId","_addAttributeToMesh","_addAttributeMetadata","name","error","ArrayBuffer","isView","type","_getDracoAttributeType","size","numFaces","AddFacesToMesh","builder","buffer","Int8Array","AddInt8Attribute","Int16Array","AddInt16Attribute","Int32Array","AddInt32Attribute","Uint8Array","Uint8ClampedArray","AddUInt8Attribute","Uint16Array","AddUInt16Attribute","Uint32Array","AddUInt32Attribute","Float32Array","AddFloatAttribute","toLowerCase","COLOR","TEX_COORD","GENERIC","dracoType","dracoGeometry","dracoMetadata","Metadata","_populateDracoMetadata","AddMetadata","uniqueAttributeId","dracoAttributeMetadata","SetMetadataForAttribute","key","value","getEntries","Math","trunc","AddIntEntry","AddDoubleEntry","AddIntEntryArray","AddStringEntry","byteLength","outputBuffer","outputData","i","GetValue","container","hasEntriesFunc","entries","hasOwnProperty","Object"],"sources":["../../../src/lib/draco-builder.ts"],"sourcesContent":["/* eslint-disable camelcase */\n// This code is inspired by example code in the DRACO repository\nimport type {\n Draco3D,\n DracoInt8Array,\n Encoder,\n Mesh,\n MeshBuilder,\n PointCloud,\n Metadata,\n MetadataBuilder,\n draco_GeometryAttribute_Type\n} from '../draco3d/draco3d-types';\n\nimport type {TypedArray} from '@loaders.gl/schema';\nimport type {DracoMesh} from './draco-types';\n\nexport type DracoBuildOptions = {\n pointcloud?: boolean;\n metadata?: {[key: string]: string};\n attributesMetadata?: {};\n log?: any;\n\n // draco encoding options\n speed?: [number, number];\n method?: string;\n quantization?: {[attributeName: string]: number};\n};\n\n// Native Draco attribute names to GLTF attribute names.\nconst GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {\n POSITION: 'POSITION',\n NORMAL: 'NORMAL',\n COLOR_0: 'COLOR',\n TEXCOORD_0: 'TEX_COORD'\n};\n\nconst noop = () => {};\n\nexport default class DracoBuilder {\n draco: Draco3D;\n dracoEncoder: Encoder;\n dracoMeshBuilder: MeshBuilder;\n dracoMetadataBuilder: MetadataBuilder;\n log: any;\n\n // draco - the draco decoder, either import `draco3d` or load dynamically\n constructor(draco: Draco3D) {\n this.draco = draco;\n this.dracoEncoder = new this.draco.Encoder();\n this.dracoMeshBuilder = new this.draco.MeshBuilder();\n this.dracoMetadataBuilder = new this.draco.MetadataBuilder();\n }\n\n destroy(): void {\n this.destroyEncodedObject(this.dracoMeshBuilder);\n this.destroyEncodedObject(this.dracoEncoder);\n this.destroyEncodedObject(this.dracoMetadataBuilder);\n // @ts-ignore\n this.dracoMeshBuilder = null;\n // @ts-ignore\n this.dracoEncoder = null;\n // @ts-ignore\n this.draco = null;\n }\n\n // TBD - when does this need to be called?\n destroyEncodedObject(object): void {\n if (object) {\n this.draco.destroy(object);\n }\n }\n\n /**\n * Encode mesh or point cloud\n * @param mesh =({})\n * @param options\n */\n encodeSync(mesh: DracoMesh, options: DracoBuildOptions = {}): ArrayBuffer {\n this.log = noop; // TODO\n this._setOptions(options);\n\n return options.pointcloud\n ? this._encodePointCloud(mesh, options)\n : this._encodeMesh(mesh, options);\n }\n\n // PRIVATE\n\n _getAttributesFromMesh(mesh: DracoMesh) {\n // TODO - Change the encodePointCloud interface instead?\n const attributes = {...mesh, ...mesh.attributes};\n // Fold indices into the attributes\n if (mesh.indices) {\n attributes.indices = mesh.indices;\n }\n return attributes;\n }\n\n _encodePointCloud(pointcloud: DracoMesh, options: DracoBuildOptions): ArrayBuffer {\n const dracoPointCloud = new this.draco.PointCloud();\n\n if (options.metadata) {\n this._addGeometryMetadata(dracoPointCloud, options.metadata);\n }\n\n const attributes = this._getAttributesFromMesh(pointcloud);\n\n // Build a `DracoPointCloud` from the input data\n this._createDracoPointCloud(dracoPointCloud, attributes, options);\n\n const dracoData = new this.draco.DracoInt8Array();\n\n try {\n const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(\n dracoPointCloud,\n false,\n dracoData\n );\n\n if (!(encodedLen > 0)) {\n throw new Error('Draco encoding failed.');\n }\n\n this.log(`DRACO encoded ${dracoPointCloud.num_points()} points\n with ${dracoPointCloud.num_attributes()} attributes into ${encodedLen} bytes`);\n\n return dracoInt8ArrayToArrayBuffer(dracoData);\n } finally {\n this.destroyEncodedObject(dracoData);\n this.destroyEncodedObject(dracoPointCloud);\n }\n }\n\n _encodeMesh(mesh: DracoMesh, options: DracoBuildOptions): ArrayBuffer {\n const dracoMesh = new this.draco.Mesh();\n\n if (options.metadata) {\n this._addGeometryMetadata(dracoMesh, options.metadata);\n }\n\n const attributes = this._getAttributesFromMesh(mesh);\n\n // Build a `DracoMesh` from the input data\n this._createDracoMesh(dracoMesh, attributes, options);\n\n const dracoData = new this.draco.DracoInt8Array();\n\n try {\n const encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);\n if (encodedLen <= 0) {\n throw new Error('Draco encoding failed.');\n }\n\n this.log(`DRACO encoded ${dracoMesh.num_points()} points\n with ${dracoMesh.num_attributes()} attributes into ${encodedLen} bytes`);\n\n return dracoInt8ArrayToArrayBuffer(dracoData);\n } finally {\n this.destroyEncodedObject(dracoData);\n this.destroyEncodedObject(dracoMesh);\n }\n }\n\n /**\n * Set encoding options.\n * @param {{speed?: any; method?: any; quantization?: any;}} options\n */\n _setOptions(options: DracoBuildOptions): void {\n if ('speed' in options) {\n // @ts-ignore\n this.dracoEncoder.SetSpeedOptions(...options.speed);\n }\n if ('method' in options) {\n const dracoMethod = this.draco[options.method || 'MESH_SEQUENTIAL_ENCODING'];\n // assert(dracoMethod)\n this.dracoEncoder.SetEncodingMethod(dracoMethod);\n }\n if ('quantization' in options) {\n for (const attribute in options.quantization) {\n const bits = options.quantization[attribute];\n const dracoPosition = this.draco[attribute];\n this.dracoEncoder.SetAttributeQuantization(dracoPosition, bits);\n }\n }\n }\n\n /**\n * @param {Mesh} dracoMesh\n * @param {object} attributes\n * @returns {Mesh}\n */\n _createDracoMesh(dracoMesh: Mesh, attributes, options: DracoBuildOptions): Mesh {\n const optionalMetadata = options.attributesMetadata || {};\n\n try {\n const positions = this._getPositionAttribute(attributes);\n if (!positions) {\n throw new Error('positions');\n }\n const vertexCount = positions.length / 3;\n\n for (let attributeName in attributes) {\n const attribute = attributes[attributeName];\n attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;\n const uniqueId = this._addAttributeToMesh(dracoMesh, attributeName, attribute, vertexCount);\n\n if (uniqueId !== -1) {\n this._addAttributeMetadata(dracoMesh, uniqueId, {\n name: attributeName,\n ...(optionalMetadata[attributeName] || {})\n });\n }\n }\n } catch (error) {\n this.destroyEncodedObject(dracoMesh);\n throw error;\n }\n\n return dracoMesh;\n }\n\n /**\n * @param {} dracoPointCloud\n * @param {object} attributes\n */\n _createDracoPointCloud(\n dracoPointCloud: PointCloud,\n attributes: object,\n options: DracoBuildOptions\n ): PointCloud {\n const optionalMetadata = options.attributesMetadata || {};\n\n try {\n const positions = this._getPositionAttribute(attributes);\n if (!positions) {\n throw new Error('positions');\n }\n const vertexCount = positions.length / 3;\n\n for (let attributeName in attributes) {\n const attribute = attributes[attributeName];\n attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;\n const uniqueId = this._addAttributeToMesh(\n dracoPointCloud,\n attributeName,\n attribute,\n vertexCount\n );\n if (uniqueId !== -1) {\n this._addAttributeMetadata(dracoPointCloud, uniqueId, {\n name: attributeName,\n ...(optionalMetadata[attributeName] || {})\n });\n }\n }\n } catch (error) {\n this.destroyEncodedObject(dracoPointCloud);\n throw error;\n }\n\n return dracoPointCloud;\n }\n\n /**\n * @param mesh\n * @param attributeName\n * @param attribute\n * @param vertexCount\n */\n _addAttributeToMesh(\n mesh: PointCloud,\n attributeName: string,\n attribute: TypedArray,\n vertexCount: number\n ) {\n if (!ArrayBuffer.isView(attribute)) {\n return -1;\n }\n\n const type = this._getDracoAttributeType(attributeName);\n // @ts-ignore TODO/fix types\n const size = attribute.length / vertexCount;\n\n if (type === 'indices') {\n // @ts-ignore TODO/fix types\n const numFaces = attribute.length / 3;\n this.log(`Adding attribute ${attributeName}, size ${numFaces}`);\n\n // @ts-ignore assumes mesh is a Mesh, not a point cloud\n this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);\n return -1;\n }\n\n this.log(`Adding attribute ${attributeName}, size ${size}`);\n\n const builder = this.dracoMeshBuilder;\n const {buffer} = attribute;\n\n switch (attribute.constructor) {\n case Int8Array:\n return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));\n\n case Int16Array:\n return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));\n\n case Int32Array:\n return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));\n case Uint8Array:\n case Uint8ClampedArray:\n return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));\n\n case Uint16Array:\n return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));\n\n case Uint32Array:\n return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));\n\n case Float32Array:\n default:\n return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));\n }\n }\n\n /**\n * DRACO can compress attributes of know type better\n * TODO - expose an attribute type map?\n * @param attributeName\n */\n _getDracoAttributeType(attributeName: string): draco_GeometryAttribute_Type | 'indices' {\n switch (attributeName.toLowerCase()) {\n case 'indices':\n return 'indices';\n case 'position':\n case 'positions':\n case 'vertices':\n return this.draco.POSITION;\n case 'normal':\n case 'normals':\n return this.draco.NORMAL;\n case 'color':\n case 'colors':\n return this.draco.COLOR;\n case 'texcoord':\n case 'texcoords':\n return this.draco.TEX_COORD;\n default:\n return this.draco.GENERIC;\n }\n }\n\n _getPositionAttribute(attributes) {\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const dracoType = this._getDracoAttributeType(attributeName);\n if (dracoType === this.draco.POSITION) {\n return attribute;\n }\n }\n return null;\n }\n\n /**\n * Add metadata for the geometry.\n * @param dracoGeometry - WASM Draco Object\n * @param metadata\n */\n _addGeometryMetadata(dracoGeometry: PointCloud, metadata: {[key: string]: string}) {\n const dracoMetadata = new this.draco.Metadata();\n this._populateDracoMetadata(dracoMetadata, metadata);\n this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);\n }\n\n /**\n * Add metadata for an attribute to geometry.\n * @param dracoGeometry - WASM Draco Object\n * @param uniqueAttributeId\n * @param metadata\n */\n _addAttributeMetadata(\n dracoGeometry: PointCloud,\n uniqueAttributeId: number,\n metadata: Map<string, string> | {[key: string]: string}\n ) {\n // Note: Draco JS IDL doesn't seem to expose draco.AttributeMetadata, however it seems to\n // create such objects automatically from draco.Metadata object.\n const dracoAttributeMetadata = new this.draco.Metadata();\n this._populateDracoMetadata(dracoAttributeMetadata, metadata);\n // Draco3d doc note: Directly add attribute metadata to geometry.\n // You can do this without explicitly adding |GeometryMetadata| to mesh.\n this.dracoMeshBuilder.SetMetadataForAttribute(\n dracoGeometry,\n uniqueAttributeId,\n dracoAttributeMetadata\n );\n }\n\n /**\n * Add contents of object or map to a WASM Draco Metadata Object\n * @param dracoMetadata - WASM Draco Object\n * @param metadata\n */\n _populateDracoMetadata(\n dracoMetadata: Metadata,\n metadata: Map<string, string> | {[key: string]: string}\n ) {\n for (const [key, value] of getEntries(metadata)) {\n switch (typeof value) {\n case 'number':\n if (Math.trunc(value) === value) {\n this.dracoMetadataBuilder.AddIntEntry(dracoMetadata, key, value);\n } else {\n this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, key, value);\n }\n break;\n case 'object':\n if (value instanceof Int32Array) {\n this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, key, value, value.length);\n }\n break;\n case 'string':\n default:\n this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, key, value);\n }\n }\n }\n}\n\n// HELPER FUNCTIONS\n\n/**\n * Copy encoded data to buffer\n * @param dracoData\n */\nfunction dracoInt8ArrayToArrayBuffer(dracoData: DracoInt8Array) {\n const byteLength = dracoData.size();\n const outputBuffer = new ArrayBuffer(byteLength);\n const outputData = new Int8Array(outputBuffer);\n for (let i = 0; i < byteLength; ++i) {\n outputData[i] = dracoData.GetValue(i);\n }\n return outputBuffer;\n}\n\n/** Enable iteration over either an object or a map */\nfunction getEntries(container) {\n const hasEntriesFunc = container.entries && !container.hasOwnProperty('entries');\n return hasEntriesFunc ? container.entries() : Object.entries(container);\n}\n"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  import { loadLibrary } from '@loaders.gl/worker-utils';
2
4
  const DRACO_VERSION = '1.4.1';
3
5
  const DRACO_JS_DECODER_URL = "https://www.gstatic.com/draco/versioned/decoders/".concat(DRACO_VERSION, "/draco_decoder.js");
@@ -18,7 +20,6 @@ export async function loadDracoDecoderModule(options) {
18
20
  } else {
19
21
  loadDecoderPromise = loadDecoderPromise || loadDracoDecoder(options);
20
22
  }
21
-
22
23
  return await loadDecoderPromise;
23
24
  }
24
25
  export async function loadDracoEncoderModule(options) {
@@ -33,37 +34,31 @@ export async function loadDracoEncoderModule(options) {
33
34
  } else {
34
35
  loadEncoderPromise = loadEncoderPromise || loadDracoEncoder(options);
35
36
  }
36
-
37
37
  return await loadEncoderPromise;
38
38
  }
39
39
 
40
40
  async function loadDracoDecoder(options) {
41
41
  let DracoDecoderModule;
42
42
  let wasmBinary;
43
-
44
43
  switch (options.draco && options.draco.decoderType) {
45
44
  case 'js':
46
45
  DracoDecoderModule = await loadLibrary(DRACO_JS_DECODER_URL, 'draco', options);
47
46
  break;
48
-
49
47
  case 'wasm':
50
48
  default:
51
49
  [DracoDecoderModule, wasmBinary] = await Promise.all([await loadLibrary(DRACO_WASM_WRAPPER_URL, 'draco', options), await loadLibrary(DRACO_WASM_DECODER_URL, 'draco', options)]);
52
50
  }
53
-
54
51
  DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
55
52
  return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
56
53
  }
57
-
58
54
  function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
59
55
  const options = {};
60
-
61
56
  if (wasmBinary) {
62
57
  options.wasmBinary = wasmBinary;
63
58
  }
64
-
65
59
  return new Promise(resolve => {
66
- DracoDecoderModule({ ...options,
60
+ DracoDecoderModule({
61
+ ...options,
67
62
  onModuleLoaded: draco => resolve({
68
63
  draco
69
64
  })