@loaders.gl/draco 4.0.0-alpha.5 → 4.0.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.
- package/dist/bundle.js +2 -2
- package/dist/dist.min.js +3 -3
- package/dist/dist.min.js.map +3 -3
- package/dist/draco-loader.d.ts +4 -14
- package/dist/draco-loader.d.ts.map +1 -1
- package/dist/draco-loader.js +28 -21
- package/dist/draco-nodejs-worker.js +191 -0
- package/dist/draco-nodejs-worker.js.map +7 -0
- package/dist/draco-worker.js +1 -1
- package/dist/draco-worker.js.map +3 -3
- package/dist/draco-writer-nodejs-worker.js +193 -0
- package/dist/draco-writer-nodejs-worker.js.map +7 -0
- package/dist/draco-writer-nodejs.d.ts +3 -0
- package/dist/draco-writer-nodejs.d.ts.map +1 -0
- package/dist/draco-writer-nodejs.js +7 -0
- package/dist/draco-writer-worker.js +4 -0
- package/dist/draco-writer-worker.js.map +7 -0
- package/dist/draco-writer.d.ts +12 -3
- package/dist/draco-writer.d.ts.map +1 -1
- package/dist/draco-writer.js +40 -28
- package/dist/draco3d/draco3d-types.d.ts +1 -1
- package/dist/draco3d/draco3d-types.d.ts.map +1 -1
- package/dist/draco3d/draco3d-types.js +47 -44
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/draco-loader.js +34 -0
- package/dist/es5/draco-loader.js.map +1 -0
- package/dist/es5/draco-writer-nodejs.js +14 -0
- package/dist/es5/draco-writer-nodejs.js.map +1 -0
- package/dist/es5/draco-writer.js +63 -0
- package/dist/es5/draco-writer.js.map +1 -0
- package/dist/es5/draco3d/draco3d-types.js +51 -0
- package/dist/es5/draco3d/draco3d-types.js.map +1 -0
- package/dist/es5/index.js +79 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/lib/draco-builder.js +324 -0
- package/dist/es5/lib/draco-builder.js.map +1 -0
- package/dist/es5/lib/draco-module-loader.js +183 -0
- package/dist/es5/lib/draco-module-loader.js.map +1 -0
- package/dist/es5/lib/draco-parser.js +435 -0
- package/dist/es5/lib/draco-parser.js.map +1 -0
- package/dist/es5/lib/draco-types.js +2 -0
- package/dist/es5/lib/draco-types.js.map +1 -0
- package/dist/es5/lib/utils/get-draco-schema.js +47 -0
- package/dist/es5/lib/utils/get-draco-schema.js.map +1 -0
- package/dist/es5/lib/utils/version.js +9 -0
- package/dist/es5/lib/utils/version.js.map +1 -0
- package/dist/es5/workers/draco-nodejs-worker.js +7 -0
- package/dist/es5/workers/draco-nodejs-worker.js.map +1 -0
- package/dist/es5/workers/draco-worker.js +6 -0
- package/dist/es5/workers/draco-worker.js.map +1 -0
- package/dist/es5/workers/draco-writer-nodejs-worker.js +53 -0
- package/dist/es5/workers/draco-writer-nodejs-worker.js.map +1 -0
- package/dist/es5/workers/draco-writer-worker.js +53 -0
- package/dist/es5/workers/draco-writer-worker.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/draco-loader.js +24 -0
- package/dist/esm/draco-loader.js.map +1 -0
- package/dist/esm/draco-writer-nodejs.js +3 -0
- package/dist/esm/draco-writer-nodejs.js.map +1 -0
- package/dist/esm/draco-writer.js +31 -0
- package/dist/esm/draco-writer.js.map +1 -0
- package/dist/esm/draco3d/draco3d-types.js +41 -0
- package/dist/esm/draco3d/draco3d-types.js.map +1 -0
- package/dist/esm/index.js +35 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/draco-builder.js +268 -0
- package/dist/esm/lib/draco-builder.js.map +1 -0
- package/dist/esm/lib/draco-module-loader.js +76 -0
- package/dist/esm/lib/draco-module-loader.js.map +1 -0
- package/dist/esm/lib/draco-parser.js +363 -0
- package/dist/esm/lib/draco-parser.js.map +1 -0
- package/dist/esm/lib/draco-types.js +2 -0
- package/dist/esm/lib/draco-types.js.map +1 -0
- package/dist/esm/lib/utils/get-draco-schema.js +41 -0
- package/dist/esm/lib/utils/get-draco-schema.js.map +1 -0
- package/dist/esm/lib/utils/version.js +2 -0
- package/dist/esm/lib/utils/version.js.map +1 -0
- package/dist/esm/workers/draco-nodejs-worker.js +5 -0
- package/dist/esm/workers/draco-nodejs-worker.js.map +1 -0
- package/dist/esm/workers/draco-worker.js +4 -0
- package/dist/esm/workers/draco-worker.js.map +1 -0
- package/dist/esm/workers/draco-writer-nodejs-worker.js +30 -0
- package/dist/esm/workers/draco-writer-nodejs-worker.js.map +1 -0
- package/dist/esm/workers/draco-writer-worker.js +30 -0
- package/dist/esm/workers/draco-writer-worker.js.map +1 -0
- package/dist/index.d.ts +14 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -21
- package/dist/lib/draco-builder.d.ts +1 -1
- package/dist/lib/draco-builder.d.ts.map +1 -1
- package/dist/lib/draco-builder.js +313 -329
- package/dist/lib/draco-module-loader.d.ts.map +1 -1
- package/dist/lib/draco-module-loader.js +81 -73
- package/dist/lib/draco-parser.d.ts +1 -1
- package/dist/lib/draco-parser.d.ts.map +1 -1
- package/dist/lib/draco-parser.js +440 -416
- package/dist/lib/draco-types.d.ts +6 -6
- package/dist/lib/draco-types.d.ts.map +1 -1
- package/dist/lib/draco-types.js +3 -2
- package/dist/lib/utils/get-draco-schema.js +35 -41
- package/dist/lib/utils/version.js +7 -2
- package/dist/workers/draco-nodejs-worker.d.ts +2 -0
- package/dist/workers/draco-nodejs-worker.d.ts.map +1 -0
- package/dist/workers/draco-nodejs-worker.js +6 -0
- package/dist/workers/draco-worker.js +5 -4
- package/dist/workers/draco-writer-nodejs-worker.d.ts +2 -0
- package/dist/workers/draco-writer-nodejs-worker.d.ts.map +1 -0
- package/dist/workers/draco-writer-nodejs-worker.js +26 -0
- package/dist/workers/draco-writer-worker.d.ts +2 -0
- package/dist/workers/draco-writer-worker.d.ts.map +1 -0
- package/dist/workers/draco-writer-worker.js +26 -0
- package/package.json +16 -9
- package/src/draco-loader.ts +8 -4
- package/src/draco-writer-nodejs.ts +4 -0
- package/src/draco-writer.ts +17 -12
- package/src/index.ts +21 -1
- package/src/lib/draco-module-loader.ts +9 -5
- package/src/lib/utils/get-draco-schema.ts +7 -6
- package/src/workers/draco-nodejs-worker.ts +5 -0
- package/src/workers/draco-writer-nodejs-worker.ts +25 -0
- package/src/workers/draco-writer-worker.ts +25 -0
- package/dist/bundle.js.map +0 -1
- package/dist/draco-loader.js.map +0 -1
- package/dist/draco-writer.js.map +0 -1
- package/dist/draco3d/draco3d-types.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/draco-builder.js.map +0 -1
- package/dist/lib/draco-module-loader.js.map +0 -1
- package/dist/lib/draco-parser.js.map +0 -1
- package/dist/lib/draco-types.js.map +0 -1
- package/dist/lib/utils/get-draco-schema.js.map +0 -1
- package/dist/lib/utils/version.js.map +0 -1
- package/dist/workers/draco-worker.js.map +0 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.draco_StatusCode = exports.draco_GeometryAttribute_Type = exports.draco_EncodedGeometryType = exports.draco_DataType = void 0;
|
|
7
|
+
var draco_GeometryAttribute_Type = function (draco_GeometryAttribute_Type) {
|
|
8
|
+
draco_GeometryAttribute_Type[draco_GeometryAttribute_Type["draco_GeometryAttribute::INVALID"] = 0] = "draco_GeometryAttribute::INVALID";
|
|
9
|
+
draco_GeometryAttribute_Type[draco_GeometryAttribute_Type["draco_GeometryAttribute::POSITION"] = 1] = "draco_GeometryAttribute::POSITION";
|
|
10
|
+
draco_GeometryAttribute_Type[draco_GeometryAttribute_Type["draco_GeometryAttribute::NORMAL"] = 2] = "draco_GeometryAttribute::NORMAL";
|
|
11
|
+
draco_GeometryAttribute_Type[draco_GeometryAttribute_Type["draco_GeometryAttribute::COLOR"] = 3] = "draco_GeometryAttribute::COLOR";
|
|
12
|
+
draco_GeometryAttribute_Type[draco_GeometryAttribute_Type["draco_GeometryAttribute::TEX_COORD"] = 4] = "draco_GeometryAttribute::TEX_COORD";
|
|
13
|
+
draco_GeometryAttribute_Type[draco_GeometryAttribute_Type["draco_GeometryAttribute::GENERIC"] = 5] = "draco_GeometryAttribute::GENERIC";
|
|
14
|
+
return draco_GeometryAttribute_Type;
|
|
15
|
+
}({});
|
|
16
|
+
exports.draco_GeometryAttribute_Type = draco_GeometryAttribute_Type;
|
|
17
|
+
var draco_EncodedGeometryType = function (draco_EncodedGeometryType) {
|
|
18
|
+
draco_EncodedGeometryType[draco_EncodedGeometryType["draco::INVALID_GEOMETRY_TYPE"] = 0] = "draco::INVALID_GEOMETRY_TYPE";
|
|
19
|
+
draco_EncodedGeometryType[draco_EncodedGeometryType["draco::POINT_CLOUD"] = 1] = "draco::POINT_CLOUD";
|
|
20
|
+
draco_EncodedGeometryType[draco_EncodedGeometryType["draco::TRIANGULAR_MESH"] = 2] = "draco::TRIANGULAR_MESH";
|
|
21
|
+
return draco_EncodedGeometryType;
|
|
22
|
+
}({});
|
|
23
|
+
exports.draco_EncodedGeometryType = draco_EncodedGeometryType;
|
|
24
|
+
var draco_DataType = function (draco_DataType) {
|
|
25
|
+
draco_DataType[draco_DataType["draco::DT_INVALID"] = 0] = "draco::DT_INVALID";
|
|
26
|
+
draco_DataType[draco_DataType["draco::DT_INT8"] = 1] = "draco::DT_INT8";
|
|
27
|
+
draco_DataType[draco_DataType["draco::DT_UINT8"] = 2] = "draco::DT_UINT8";
|
|
28
|
+
draco_DataType[draco_DataType["draco::DT_INT16"] = 3] = "draco::DT_INT16";
|
|
29
|
+
draco_DataType[draco_DataType["draco::DT_UINT16"] = 4] = "draco::DT_UINT16";
|
|
30
|
+
draco_DataType[draco_DataType["draco::DT_INT32"] = 5] = "draco::DT_INT32";
|
|
31
|
+
draco_DataType[draco_DataType["draco::DT_UINT32"] = 6] = "draco::DT_UINT32";
|
|
32
|
+
draco_DataType[draco_DataType["draco::DT_INT64"] = 7] = "draco::DT_INT64";
|
|
33
|
+
draco_DataType[draco_DataType["draco::DT_UINT64"] = 8] = "draco::DT_UINT64";
|
|
34
|
+
draco_DataType[draco_DataType["draco::DT_FLOAT32"] = 9] = "draco::DT_FLOAT32";
|
|
35
|
+
draco_DataType[draco_DataType["draco::DT_FLOAT64"] = 10] = "draco::DT_FLOAT64";
|
|
36
|
+
draco_DataType[draco_DataType["draco::DT_BOOL"] = 11] = "draco::DT_BOOL";
|
|
37
|
+
draco_DataType[draco_DataType["draco::DT_TYPES_COUNT"] = 12] = "draco::DT_TYPES_COUNT";
|
|
38
|
+
return draco_DataType;
|
|
39
|
+
}({});
|
|
40
|
+
exports.draco_DataType = draco_DataType;
|
|
41
|
+
var draco_StatusCode = function (draco_StatusCode) {
|
|
42
|
+
draco_StatusCode[draco_StatusCode["draco_Status::OK"] = 0] = "draco_Status::OK";
|
|
43
|
+
draco_StatusCode[draco_StatusCode["draco_Status::DRACO_ERROR"] = 1] = "draco_Status::DRACO_ERROR";
|
|
44
|
+
draco_StatusCode[draco_StatusCode["draco_Status::IO_ERROR"] = 2] = "draco_Status::IO_ERROR";
|
|
45
|
+
draco_StatusCode[draco_StatusCode["draco_Status::INVALID_PARAMETER"] = 3] = "draco_Status::INVALID_PARAMETER";
|
|
46
|
+
draco_StatusCode[draco_StatusCode["draco_Status::UNSUPPORTED_VERSION"] = 4] = "draco_Status::UNSUPPORTED_VERSION";
|
|
47
|
+
draco_StatusCode[draco_StatusCode["draco_Status::UNKNOWN_VERSION"] = 5] = "draco_Status::UNKNOWN_VERSION";
|
|
48
|
+
return draco_StatusCode;
|
|
49
|
+
}({});
|
|
50
|
+
exports.draco_StatusCode = draco_StatusCode;
|
|
51
|
+
//# sourceMappingURL=draco3d-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draco3d-types.js","names":["draco_GeometryAttribute_Type","exports","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":";;;;;;IAiBYA,4BAA4B,aAA5BA,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;EAAA,OAA5BA,4BAA4B;AAAA;AAAAC,OAAA,CAAAD,4BAAA,GAAAA,4BAAA;AAAA,IAU5BE,yBAAyB,aAAzBA,yBAAyB;EAAzBA,yBAAyB,CAAzBA,yBAAyB;EAAzBA,yBAAyB,CAAzBA,yBAAyB;EAAzBA,yBAAyB,CAAzBA,yBAAyB;EAAA,OAAzBA,yBAAyB;AAAA;AAAAD,OAAA,CAAAC,yBAAA,GAAAA,yBAAA;AAAA,IAOzBC,cAAc,aAAdA,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;EAAA,OAAdA,cAAc;AAAA;AAAAF,OAAA,CAAAE,cAAA,GAAAA,cAAA;AAAA,IAiBdC,gBAAgB,aAAhBA,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;EAAA,OAAhBA,gBAAgB;AAAA;AAAAH,OAAA,CAAAG,gBAAA,GAAAA,gBAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DracoLoader = void 0;
|
|
8
|
+
Object.defineProperty(exports, "DracoWorkerLoader", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _dracoLoader.DracoLoader;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(exports, "DracoWriter", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function get() {
|
|
17
|
+
return _dracoWriter.DracoWriter;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
exports._TypecheckDracoLoader = exports.DracoWriterWorker = void 0;
|
|
21
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
22
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
23
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
24
|
+
var _workerUtils = require("@loaders.gl/worker-utils");
|
|
25
|
+
var _dracoLoader = require("./draco-loader");
|
|
26
|
+
var _dracoParser = _interopRequireDefault(require("./lib/draco-parser"));
|
|
27
|
+
var _dracoModuleLoader = require("./lib/draco-module-loader");
|
|
28
|
+
var _version = require("./lib/utils/version");
|
|
29
|
+
var _dracoWriter = require("./draco-writer");
|
|
30
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
31
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
|
+
var DracoWriterWorker = {
|
|
33
|
+
id: _workerUtils.isBrowser ? 'draco-writer' : 'draco-writer-nodejs',
|
|
34
|
+
name: 'Draco compressed geometry writer',
|
|
35
|
+
module: 'draco',
|
|
36
|
+
version: _version.VERSION,
|
|
37
|
+
worker: true,
|
|
38
|
+
options: {
|
|
39
|
+
draco: {},
|
|
40
|
+
source: null
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.DracoWriterWorker = DracoWriterWorker;
|
|
44
|
+
var DracoLoader = _objectSpread(_objectSpread({}, _dracoLoader.DracoLoader), {}, {
|
|
45
|
+
parse: parse
|
|
46
|
+
});
|
|
47
|
+
exports.DracoLoader = DracoLoader;
|
|
48
|
+
function parse(_x, _x2) {
|
|
49
|
+
return _parse.apply(this, arguments);
|
|
50
|
+
}
|
|
51
|
+
function _parse() {
|
|
52
|
+
_parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
53
|
+
var _yield$loadDracoDecod, draco, dracoParser;
|
|
54
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
55
|
+
while (1) switch (_context.prev = _context.next) {
|
|
56
|
+
case 0:
|
|
57
|
+
_context.next = 2;
|
|
58
|
+
return (0, _dracoModuleLoader.loadDracoDecoderModule)(options);
|
|
59
|
+
case 2:
|
|
60
|
+
_yield$loadDracoDecod = _context.sent;
|
|
61
|
+
draco = _yield$loadDracoDecod.draco;
|
|
62
|
+
dracoParser = new _dracoParser.default(draco);
|
|
63
|
+
_context.prev = 5;
|
|
64
|
+
return _context.abrupt("return", dracoParser.parseSync(arrayBuffer, options === null || options === void 0 ? void 0 : options.draco));
|
|
65
|
+
case 7:
|
|
66
|
+
_context.prev = 7;
|
|
67
|
+
dracoParser.destroy();
|
|
68
|
+
return _context.finish(7);
|
|
69
|
+
case 10:
|
|
70
|
+
case "end":
|
|
71
|
+
return _context.stop();
|
|
72
|
+
}
|
|
73
|
+
}, _callee, null, [[5,, 7, 10]]);
|
|
74
|
+
}));
|
|
75
|
+
return _parse.apply(this, arguments);
|
|
76
|
+
}
|
|
77
|
+
var _TypecheckDracoLoader = DracoLoader;
|
|
78
|
+
exports._TypecheckDracoLoader = _TypecheckDracoLoader;
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_workerUtils","require","_dracoLoader","_dracoParser","_interopRequireDefault","_dracoModuleLoader","_version","_dracoWriter","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","DracoWriterWorker","id","isBrowser","name","module","version","VERSION","worker","options","draco","exports","DracoLoader","DracoWorkerLoader","parse","_x","_x2","_parse","_asyncToGenerator2","_regenerator","mark","_callee","arrayBuffer","_yield$loadDracoDecod","dracoParser","wrap","_callee$","_context","prev","next","loadDracoDecoderModule","sent","DracoParser","abrupt","parseSync","destroy","finish","stop","_TypecheckDracoLoader"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {isBrowser} from '@loaders.gl/worker-utils';\nimport 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';\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: LoaderWithParser<DracoMesh, never, DracoLoaderOptions> = {\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":";;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,YAAA,GAAAC,OAAA;AAIA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AASA,IAAAM,YAAA,GAAAN,OAAA;AAA2C,SAAAO,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAMpC,IAAMY,iBAAiB,GAAG;EAC/BC,EAAE,EAAEC,sBAAS,GAAG,cAAc,GAAG,qBAAqB;EACtDC,IAAI,EAAE,kCAAkC;EACxCC,MAAM,EAAE,OAAO;EACfC,OAAO,EAAEC,gBAAO;EAChBC,MAAM,EAAE,IAAI;EACZC,OAAO,EAAE;IACPC,KAAK,EAAE,CAAC,CAAC;IACTjB,MAAM,EAAE;EACV;AACF,CAAC;AAACkB,OAAA,CAAAV,iBAAA,GAAAA,iBAAA;AAUK,IAAMW,WAAmE,GAAAxB,aAAA,CAAAA,aAAA,KAC3EyB,wBAAiB;EACpBC,KAAK,EAALA;AAAK,EACN;AAACH,OAAA,CAAAC,WAAA,GAAAA,WAAA;AAAA,SAEaE,KAAKA,CAAAC,EAAA,EAAAC,GAAA;EAAA,OAAAC,MAAA,CAAA9B,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAA0B,OAAA;EAAAA,MAAA,OAAAC,kBAAA,CAAArB,OAAA,EAAAsB,YAAA,CAAAtB,OAAA,CAAAuB,IAAA,CAApB,SAAAC,QAAqBC,WAAwB,EAAEb,OAA4B;IAAA,IAAAc,qBAAA,EAAAb,KAAA,EAAAc,WAAA;IAAA,OAAAL,YAAA,CAAAtB,OAAA,CAAA4B,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAAF,QAAA,CAAAE,IAAA;UAAA,OACnD,IAAAC,yCAAsB,EAACrB,OAAO,CAAC;QAAA;UAAAc,qBAAA,GAAAI,QAAA,CAAAI,IAAA;UAA9CrB,KAAK,GAAAa,qBAAA,CAALb,KAAK;UACNc,WAAW,GAAG,IAAIQ,oBAAW,CAACtB,KAAK,CAAC;UAAAiB,QAAA,CAAAC,IAAA;UAAA,OAAAD,QAAA,CAAAM,MAAA,WAEjCT,WAAW,CAACU,SAAS,CAACZ,WAAW,EAAEb,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,KAAK,CAAC;QAAA;UAAAiB,QAAA,CAAAC,IAAA;UAEzDJ,WAAW,CAACW,OAAO,CAAC,CAAC;UAAC,OAAAR,QAAA,CAAAS,MAAA;QAAA;QAAA;UAAA,OAAAT,QAAA,CAAAU,IAAA;MAAA;IAAA,GAAAhB,OAAA;EAAA,CAEzB;EAAA,OAAAJ,MAAA,CAAA9B,KAAA,OAAAI,SAAA;AAAA;AAGM,IAAM+C,qBAAuC,GAAG1B,WAAW;AAACD,OAAA,CAAA2B,qBAAA,GAAAA,qBAAA"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
15
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
16
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
|
+
var GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
|
|
20
|
+
POSITION: 'POSITION',
|
|
21
|
+
NORMAL: 'NORMAL',
|
|
22
|
+
COLOR_0: 'COLOR',
|
|
23
|
+
TEXCOORD_0: 'TEX_COORD'
|
|
24
|
+
};
|
|
25
|
+
var noop = function noop() {};
|
|
26
|
+
var DracoBuilder = function () {
|
|
27
|
+
function DracoBuilder(draco) {
|
|
28
|
+
(0, _classCallCheck2.default)(this, DracoBuilder);
|
|
29
|
+
(0, _defineProperty2.default)(this, "draco", void 0);
|
|
30
|
+
(0, _defineProperty2.default)(this, "dracoEncoder", void 0);
|
|
31
|
+
(0, _defineProperty2.default)(this, "dracoMeshBuilder", void 0);
|
|
32
|
+
(0, _defineProperty2.default)(this, "dracoMetadataBuilder", void 0);
|
|
33
|
+
(0, _defineProperty2.default)(this, "log", void 0);
|
|
34
|
+
this.draco = draco;
|
|
35
|
+
this.dracoEncoder = new this.draco.Encoder();
|
|
36
|
+
this.dracoMeshBuilder = new this.draco.MeshBuilder();
|
|
37
|
+
this.dracoMetadataBuilder = new this.draco.MetadataBuilder();
|
|
38
|
+
}
|
|
39
|
+
(0, _createClass2.default)(DracoBuilder, [{
|
|
40
|
+
key: "destroy",
|
|
41
|
+
value: function destroy() {
|
|
42
|
+
this.destroyEncodedObject(this.dracoMeshBuilder);
|
|
43
|
+
this.destroyEncodedObject(this.dracoEncoder);
|
|
44
|
+
this.destroyEncodedObject(this.dracoMetadataBuilder);
|
|
45
|
+
this.dracoMeshBuilder = null;
|
|
46
|
+
this.dracoEncoder = null;
|
|
47
|
+
this.draco = null;
|
|
48
|
+
}
|
|
49
|
+
}, {
|
|
50
|
+
key: "destroyEncodedObject",
|
|
51
|
+
value: function destroyEncodedObject(object) {
|
|
52
|
+
if (object) {
|
|
53
|
+
this.draco.destroy(object);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}, {
|
|
57
|
+
key: "encodeSync",
|
|
58
|
+
value: function encodeSync(mesh) {
|
|
59
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
60
|
+
this.log = noop;
|
|
61
|
+
this._setOptions(options);
|
|
62
|
+
return options.pointcloud ? this._encodePointCloud(mesh, options) : this._encodeMesh(mesh, options);
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "_getAttributesFromMesh",
|
|
66
|
+
value: function _getAttributesFromMesh(mesh) {
|
|
67
|
+
var attributes = _objectSpread(_objectSpread({}, mesh), mesh.attributes);
|
|
68
|
+
if (mesh.indices) {
|
|
69
|
+
attributes.indices = mesh.indices;
|
|
70
|
+
}
|
|
71
|
+
return attributes;
|
|
72
|
+
}
|
|
73
|
+
}, {
|
|
74
|
+
key: "_encodePointCloud",
|
|
75
|
+
value: function _encodePointCloud(pointcloud, options) {
|
|
76
|
+
var dracoPointCloud = new this.draco.PointCloud();
|
|
77
|
+
if (options.metadata) {
|
|
78
|
+
this._addGeometryMetadata(dracoPointCloud, options.metadata);
|
|
79
|
+
}
|
|
80
|
+
var attributes = this._getAttributesFromMesh(pointcloud);
|
|
81
|
+
this._createDracoPointCloud(dracoPointCloud, attributes, options);
|
|
82
|
+
var dracoData = new this.draco.DracoInt8Array();
|
|
83
|
+
try {
|
|
84
|
+
var encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(dracoPointCloud, false, dracoData);
|
|
85
|
+
if (!(encodedLen > 0)) {
|
|
86
|
+
throw new Error('Draco encoding failed.');
|
|
87
|
+
}
|
|
88
|
+
this.log("DRACO encoded ".concat(dracoPointCloud.num_points(), " points\n with ").concat(dracoPointCloud.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
|
|
89
|
+
return dracoInt8ArrayToArrayBuffer(dracoData);
|
|
90
|
+
} finally {
|
|
91
|
+
this.destroyEncodedObject(dracoData);
|
|
92
|
+
this.destroyEncodedObject(dracoPointCloud);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}, {
|
|
96
|
+
key: "_encodeMesh",
|
|
97
|
+
value: function _encodeMesh(mesh, options) {
|
|
98
|
+
var dracoMesh = new this.draco.Mesh();
|
|
99
|
+
if (options.metadata) {
|
|
100
|
+
this._addGeometryMetadata(dracoMesh, options.metadata);
|
|
101
|
+
}
|
|
102
|
+
var attributes = this._getAttributesFromMesh(mesh);
|
|
103
|
+
this._createDracoMesh(dracoMesh, attributes, options);
|
|
104
|
+
var dracoData = new this.draco.DracoInt8Array();
|
|
105
|
+
try {
|
|
106
|
+
var encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
|
|
107
|
+
if (encodedLen <= 0) {
|
|
108
|
+
throw new Error('Draco encoding failed.');
|
|
109
|
+
}
|
|
110
|
+
this.log("DRACO encoded ".concat(dracoMesh.num_points(), " points\n with ").concat(dracoMesh.num_attributes(), " attributes into ").concat(encodedLen, " bytes"));
|
|
111
|
+
return dracoInt8ArrayToArrayBuffer(dracoData);
|
|
112
|
+
} finally {
|
|
113
|
+
this.destroyEncodedObject(dracoData);
|
|
114
|
+
this.destroyEncodedObject(dracoMesh);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}, {
|
|
118
|
+
key: "_setOptions",
|
|
119
|
+
value: function _setOptions(options) {
|
|
120
|
+
if ('speed' in options) {
|
|
121
|
+
var _this$dracoEncoder;
|
|
122
|
+
(_this$dracoEncoder = this.dracoEncoder).SetSpeedOptions.apply(_this$dracoEncoder, (0, _toConsumableArray2.default)(options.speed));
|
|
123
|
+
}
|
|
124
|
+
if ('method' in options) {
|
|
125
|
+
var dracoMethod = this.draco[options.method || 'MESH_SEQUENTIAL_ENCODING'];
|
|
126
|
+
this.dracoEncoder.SetEncodingMethod(dracoMethod);
|
|
127
|
+
}
|
|
128
|
+
if ('quantization' in options) {
|
|
129
|
+
for (var attribute in options.quantization) {
|
|
130
|
+
var bits = options.quantization[attribute];
|
|
131
|
+
var dracoPosition = this.draco[attribute];
|
|
132
|
+
this.dracoEncoder.SetAttributeQuantization(dracoPosition, bits);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}, {
|
|
137
|
+
key: "_createDracoMesh",
|
|
138
|
+
value: function _createDracoMesh(dracoMesh, attributes, options) {
|
|
139
|
+
var optionalMetadata = options.attributesMetadata || {};
|
|
140
|
+
try {
|
|
141
|
+
var positions = this._getPositionAttribute(attributes);
|
|
142
|
+
if (!positions) {
|
|
143
|
+
throw new Error('positions');
|
|
144
|
+
}
|
|
145
|
+
var vertexCount = positions.length / 3;
|
|
146
|
+
for (var _attributeName in attributes) {
|
|
147
|
+
var attribute = attributes[_attributeName];
|
|
148
|
+
_attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[_attributeName] || _attributeName;
|
|
149
|
+
var uniqueId = this._addAttributeToMesh(dracoMesh, _attributeName, attribute, vertexCount);
|
|
150
|
+
if (uniqueId !== -1) {
|
|
151
|
+
this._addAttributeMetadata(dracoMesh, uniqueId, _objectSpread({
|
|
152
|
+
name: _attributeName
|
|
153
|
+
}, optionalMetadata[_attributeName] || {}));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} catch (error) {
|
|
157
|
+
this.destroyEncodedObject(dracoMesh);
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
return dracoMesh;
|
|
161
|
+
}
|
|
162
|
+
}, {
|
|
163
|
+
key: "_createDracoPointCloud",
|
|
164
|
+
value: function _createDracoPointCloud(dracoPointCloud, attributes, options) {
|
|
165
|
+
var optionalMetadata = options.attributesMetadata || {};
|
|
166
|
+
try {
|
|
167
|
+
var positions = this._getPositionAttribute(attributes);
|
|
168
|
+
if (!positions) {
|
|
169
|
+
throw new Error('positions');
|
|
170
|
+
}
|
|
171
|
+
var vertexCount = positions.length / 3;
|
|
172
|
+
for (var _attributeName2 in attributes) {
|
|
173
|
+
var attribute = attributes[_attributeName2];
|
|
174
|
+
_attributeName2 = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[_attributeName2] || _attributeName2;
|
|
175
|
+
var uniqueId = this._addAttributeToMesh(dracoPointCloud, _attributeName2, attribute, vertexCount);
|
|
176
|
+
if (uniqueId !== -1) {
|
|
177
|
+
this._addAttributeMetadata(dracoPointCloud, uniqueId, _objectSpread({
|
|
178
|
+
name: _attributeName2
|
|
179
|
+
}, optionalMetadata[_attributeName2] || {}));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
} catch (error) {
|
|
183
|
+
this.destroyEncodedObject(dracoPointCloud);
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
return dracoPointCloud;
|
|
187
|
+
}
|
|
188
|
+
}, {
|
|
189
|
+
key: "_addAttributeToMesh",
|
|
190
|
+
value: function _addAttributeToMesh(mesh, attributeName, attribute, vertexCount) {
|
|
191
|
+
if (!ArrayBuffer.isView(attribute)) {
|
|
192
|
+
return -1;
|
|
193
|
+
}
|
|
194
|
+
var type = this._getDracoAttributeType(attributeName);
|
|
195
|
+
var size = attribute.length / vertexCount;
|
|
196
|
+
if (type === 'indices') {
|
|
197
|
+
var numFaces = attribute.length / 3;
|
|
198
|
+
this.log("Adding attribute ".concat(attributeName, ", size ").concat(numFaces));
|
|
199
|
+
this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);
|
|
200
|
+
return -1;
|
|
201
|
+
}
|
|
202
|
+
this.log("Adding attribute ".concat(attributeName, ", size ").concat(size));
|
|
203
|
+
var builder = this.dracoMeshBuilder;
|
|
204
|
+
var buffer = attribute.buffer;
|
|
205
|
+
switch (attribute.constructor) {
|
|
206
|
+
case Int8Array:
|
|
207
|
+
return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));
|
|
208
|
+
case Int16Array:
|
|
209
|
+
return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));
|
|
210
|
+
case Int32Array:
|
|
211
|
+
return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));
|
|
212
|
+
case Uint8Array:
|
|
213
|
+
case Uint8ClampedArray:
|
|
214
|
+
return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));
|
|
215
|
+
case Uint16Array:
|
|
216
|
+
return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));
|
|
217
|
+
case Uint32Array:
|
|
218
|
+
return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));
|
|
219
|
+
case Float32Array:
|
|
220
|
+
default:
|
|
221
|
+
return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}, {
|
|
225
|
+
key: "_getDracoAttributeType",
|
|
226
|
+
value: function _getDracoAttributeType(attributeName) {
|
|
227
|
+
switch (attributeName.toLowerCase()) {
|
|
228
|
+
case 'indices':
|
|
229
|
+
return 'indices';
|
|
230
|
+
case 'position':
|
|
231
|
+
case 'positions':
|
|
232
|
+
case 'vertices':
|
|
233
|
+
return this.draco.POSITION;
|
|
234
|
+
case 'normal':
|
|
235
|
+
case 'normals':
|
|
236
|
+
return this.draco.NORMAL;
|
|
237
|
+
case 'color':
|
|
238
|
+
case 'colors':
|
|
239
|
+
return this.draco.COLOR;
|
|
240
|
+
case 'texcoord':
|
|
241
|
+
case 'texcoords':
|
|
242
|
+
return this.draco.TEX_COORD;
|
|
243
|
+
default:
|
|
244
|
+
return this.draco.GENERIC;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}, {
|
|
248
|
+
key: "_getPositionAttribute",
|
|
249
|
+
value: function _getPositionAttribute(attributes) {
|
|
250
|
+
for (var _attributeName3 in attributes) {
|
|
251
|
+
var attribute = attributes[_attributeName3];
|
|
252
|
+
var dracoType = this._getDracoAttributeType(_attributeName3);
|
|
253
|
+
if (dracoType === this.draco.POSITION) {
|
|
254
|
+
return attribute;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
}, {
|
|
260
|
+
key: "_addGeometryMetadata",
|
|
261
|
+
value: function _addGeometryMetadata(dracoGeometry, metadata) {
|
|
262
|
+
var dracoMetadata = new this.draco.Metadata();
|
|
263
|
+
this._populateDracoMetadata(dracoMetadata, metadata);
|
|
264
|
+
this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);
|
|
265
|
+
}
|
|
266
|
+
}, {
|
|
267
|
+
key: "_addAttributeMetadata",
|
|
268
|
+
value: function _addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
|
|
269
|
+
var dracoAttributeMetadata = new this.draco.Metadata();
|
|
270
|
+
this._populateDracoMetadata(dracoAttributeMetadata, metadata);
|
|
271
|
+
this.dracoMeshBuilder.SetMetadataForAttribute(dracoGeometry, uniqueAttributeId, dracoAttributeMetadata);
|
|
272
|
+
}
|
|
273
|
+
}, {
|
|
274
|
+
key: "_populateDracoMetadata",
|
|
275
|
+
value: function _populateDracoMetadata(dracoMetadata, metadata) {
|
|
276
|
+
var _iterator = _createForOfIteratorHelper(getEntries(metadata)),
|
|
277
|
+
_step;
|
|
278
|
+
try {
|
|
279
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
280
|
+
var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
|
|
281
|
+
_key = _step$value[0],
|
|
282
|
+
value = _step$value[1];
|
|
283
|
+
switch ((0, _typeof2.default)(value)) {
|
|
284
|
+
case 'number':
|
|
285
|
+
if (Math.trunc(value) === value) {
|
|
286
|
+
this.dracoMetadataBuilder.AddIntEntry(dracoMetadata, _key, value);
|
|
287
|
+
} else {
|
|
288
|
+
this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, _key, value);
|
|
289
|
+
}
|
|
290
|
+
break;
|
|
291
|
+
case 'object':
|
|
292
|
+
if (value instanceof Int32Array) {
|
|
293
|
+
this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, _key, value, value.length);
|
|
294
|
+
}
|
|
295
|
+
break;
|
|
296
|
+
case 'string':
|
|
297
|
+
default:
|
|
298
|
+
this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, _key, value);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
} catch (err) {
|
|
302
|
+
_iterator.e(err);
|
|
303
|
+
} finally {
|
|
304
|
+
_iterator.f();
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}]);
|
|
308
|
+
return DracoBuilder;
|
|
309
|
+
}();
|
|
310
|
+
exports.default = DracoBuilder;
|
|
311
|
+
function dracoInt8ArrayToArrayBuffer(dracoData) {
|
|
312
|
+
var byteLength = dracoData.size();
|
|
313
|
+
var outputBuffer = new ArrayBuffer(byteLength);
|
|
314
|
+
var outputData = new Int8Array(outputBuffer);
|
|
315
|
+
for (var i = 0; i < byteLength; ++i) {
|
|
316
|
+
outputData[i] = dracoData.GetValue(i);
|
|
317
|
+
}
|
|
318
|
+
return outputBuffer;
|
|
319
|
+
}
|
|
320
|
+
function getEntries(container) {
|
|
321
|
+
var hasEntriesFunc = container.entries && !container.hasOwnProperty('entries');
|
|
322
|
+
return hasEntriesFunc ? container.entries() : Object.entries(container);
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=draco-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draco-builder.js","names":["GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","noop","DracoBuilder","draco","_classCallCheck2","default","_defineProperty2","dracoEncoder","Encoder","dracoMeshBuilder","MeshBuilder","dracoMetadataBuilder","MetadataBuilder","_createClass2","key","value","destroy","destroyEncodedObject","object","encodeSync","mesh","options","arguments","length","undefined","log","_setOptions","pointcloud","_encodePointCloud","_encodeMesh","_getAttributesFromMesh","attributes","_objectSpread","indices","dracoPointCloud","PointCloud","metadata","_addGeometryMetadata","_createDracoPointCloud","dracoData","DracoInt8Array","encodedLen","EncodePointCloudToDracoBuffer","Error","concat","num_points","num_attributes","dracoInt8ArrayToArrayBuffer","dracoMesh","Mesh","_createDracoMesh","EncodeMeshToDracoBuffer","_this$dracoEncoder","SetSpeedOptions","apply","_toConsumableArray2","speed","dracoMethod","method","SetEncodingMethod","attribute","quantization","bits","dracoPosition","SetAttributeQuantization","optionalMetadata","attributesMetadata","positions","_getPositionAttribute","vertexCount","attributeName","uniqueId","_addAttributeToMesh","_addAttributeMetadata","name","error","ArrayBuffer","isView","type","_getDracoAttributeType","size","numFaces","AddFacesToMesh","builder","buffer","constructor","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","_iterator","_createForOfIteratorHelper","getEntries","_step","s","n","done","_step$value","_slicedToArray2","_typeof2","Math","trunc","AddIntEntry","AddDoubleEntry","AddIntEntryArray","AddStringEntry","err","e","f","exports","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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"}
|