@loaders.gl/draco
Version:
Framework-independent loader and writer for Draco compressed meshes and point clouds
486 lines (416 loc) • 13.7 kB
text/typescript
// A set of typescript types manually adapted from the Draco web IDL
// Draco JS is a bit tricky to work with due to the C++ emscripten code base
// sparse documentation, so these types provide an extra safety net.
// Typescript defs adapted from draco3d emscripten IDL
// https://raw.githubusercontent.com/google/draco/master/src/draco/javascript/emscripten/draco_web_decoder.idl
// Interface exposed to emscripten's WebIDL Binder.
// http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/WebIDL-Binder.html
/* eslint-disable camelcase */
/** Draco3D untyped memory pointer */
type VoidPtr = any;
// DRACO WEB DECODER IDL
/** Draco3D geometry attribute type */
export enum draco_GeometryAttribute_Type {
'draco_GeometryAttribute::INVALID',
'draco_GeometryAttribute::POSITION',
'draco_GeometryAttribute::NORMAL',
'draco_GeometryAttribute::COLOR',
'draco_GeometryAttribute::TEX_COORD',
'draco_GeometryAttribute::GENERIC'
}
/** Draco3D encoded geometry type */
export enum draco_EncodedGeometryType {
'draco::INVALID_GEOMETRY_TYPE',
'draco::POINT_CLOUD',
'draco::TRIANGULAR_MESH'
}
/** Draco3D data type */
export enum draco_DataType {
'draco::DT_INVALID',
'draco::DT_INT8',
'draco::DT_UINT8',
'draco::DT_INT16',
'draco::DT_UINT16',
'draco::DT_INT32',
'draco::DT_UINT32',
'draco::DT_INT64',
'draco::DT_UINT64',
'draco::DT_FLOAT32',
'draco::DT_FLOAT64',
'draco::DT_BOOL',
'draco::DT_TYPES_COUNT'
}
/** Draco3D status code */
export enum draco_StatusCode {
'draco_Status::OK',
'draco_Status::DRACO_ERROR',
'draco_Status::IO_ERROR',
'draco_Status::INVALID_PARAMETER',
'draco_Status::UNSUPPORTED_VERSION',
'draco_Status::UNKNOWN_VERSION'
}
/** Draco3D decoder buffer allocated on emscripten heap */
export declare class DecoderBuffer {
constructor();
Init(data: Int8Array, data_size: number): void;
}
/** Draco3D attribute transform data */
export declare class AttributeTransformData {
constructor();
transform_type(): number;
}
/** Draco3D geometry attribute */
export declare class GeometryAttribute {
constructor();
}
/** Draco3D point attribute */
export declare class PointAttribute {
ptr: VoidPtr;
constructor();
size(): number;
GetAttributeTransformData(): AttributeTransformData;
// From GeometryAttribute
attribute_type(): number;
data_type(): number;
num_components(): number;
normalized(): boolean;
byte_stride(): number;
byte_offset(): number;
unique_id(): number;
}
/** Draco3D attribute transform */
export declare class AttributeQuantizationTransform {
constructor();
InitFromAttribute(att: PointAttribute): boolean;
quantization_bits(): number;
min_value(axis: number): number;
range(): number;
}
/** Draco3D attribute transform */
export declare class AttributeOctahedronTransform {
constructor();
InitFromAttribute(att: PointAttribute): boolean;
quantization_bits(): number;
}
/** Draco3D point cloud */
export declare class PointCloud {
ptr: VoidPtr;
constructor();
num_attributes(): number;
num_points(): number;
}
/** Draco3D mesh */
export declare class Mesh extends PointCloud {
constructor();
num_faces(): number;
}
/** Draco3D metadata */
export declare class Metadata {
ptr: VoidPtr;
constructor();
}
/** Draco3D status */
export declare class Status {
constructor();
code(): draco_StatusCode;
ok(): boolean;
error_msg(): string;
}
/** Draco3D Float32Array allocated on the emscripten heap */
export declare class DracoFloat32Array {
constructor();
GetValue(index: number): number;
size(): number;
}
/** Draco3D Int8Array allocated on the emscripten heap */
export declare class DracoInt8Array {
constructor();
GetValue(index: number): number;
size(): number;
}
/** Draco3D Uint8Array allocated on the emscripten heap */
export declare class DracoUInt8Array {
GetValue(index: number): number;
size(): number;
}
/** Draco3D Int16Array allocated on the emscripten heap */
export declare class DracoInt16Array {
constructor();
GetValue(index: number): number;
size(): number;
}
/** Draco3D Uint16Array allocated on the emscripten heap */
export declare class DracoUInt16Array {
constructor();
GetValue(index: number): number;
size(): number;
}
/** Draco3D Int32Array allocated on the emscripten heap */
export declare class DracoInt32Array {
constructor();
GetValue(index: number): number;
size(): number;
}
/** Draco3D Uint32Array allocated on the emscripten heap */
export declare class DracoUInt32Array {
constructor();
GetValue(index: number): number;
size(): number;
}
/** Draco3D metadata querier */
export declare class MetadataQuerier {
constructor();
HasEntry(metadata: Metadata, entry_name: string): string;
GetIntEntry(metadata: Metadata, entry_name: string);
GetIntEntryArray(metadata: Metadata, entry_name: string, out_values: DracoInt32Array);
GetDoubleEntry(metadata: Metadata, entry_name: string): number;
GetStringEntry(metadata: Metadata, entry_name: string): string;
NumEntries(metadata: Metadata): number;
GetEntryName(metadata: Metadata, entry_id: number): string;
}
/**
* Draco3D Decoder class
*/
export declare class Decoder {
constructor();
GetEncodedGeometryType(in_buffer: DecoderBuffer): draco_EncodedGeometryType;
DecodeBufferToPointCloud(in_buffer: DecoderBuffer, out_point_cloud: PointCloud): Status;
DecodeBufferToMesh(in_buffer: DecoderBuffer, out_mesh: Mesh): Status;
GetAttributeId(pc: PointCloud, type: draco_GeometryAttribute_Type): number;
GetAttributeIdByName(pc: PointCloud, name: string): number;
GetAttributeIdByMetadataEntry(pc: PointCloud, name: string, value: string): number;
GetAttribute(pc: PointCloud, att_id: number): PointAttribute;
GetAttributeByUniqueId(pc: PointCloud, unique_id: number): PointAttribute;
GetMetadata(pc: PointCloud): Metadata;
GetAttributeMetadata(pc: PointCloud, att_id: number): Metadata;
GetFaceFromMesh(m: Mesh, face_id: number, out_values: DracoInt32Array): boolean;
GetTriangleStripsFromMesh(m: Mesh, strip_values: DracoInt32Array);
GetTrianglesUInt16Array(m: Mesh, out_size: number, out_values: VoidPtr): boolean;
GetTrianglesUInt32Array(m: Mesh, out_size: number, out_values: VoidPtr): boolean;
GetAttributeFloat(pa: PointAttribute, att_index: number, out_values: DracoFloat32Array): boolean;
GetAttributeFloatForAllPoints(
pc: PointCloud,
pa: PointAttribute,
out_values: DracoFloat32Array
): boolean;
// Deprecated, use GetAttributeInt32ForAllPoints instead.
GetAttributeIntForAllPoints(
pc: PointCloud,
pa: PointAttribute,
out_values: DracoInt32Array
): boolean;
GetAttributeInt8ForAllPoints(
pc: PointCloud,
pa: PointAttribute,
out_values: DracoInt8Array
): boolean;
GetAttributeUInt8ForAllPoints(
pc: PointCloud,
pa: PointAttribute,
out_values: DracoUInt8Array
): boolean;
GetAttributeInt16ForAllPoints(
pc: PointCloud,
pa: PointAttribute,
out_values: DracoInt16Array
): boolean;
GetAttributeUInt16ForAllPoints(
pc: PointCloud,
pa: PointAttribute,
out_values: DracoUInt16Array
): boolean;
GetAttributeInt32ForAllPoints(
pc: PointCloud,
pa: PointAttribute,
out_values: DracoInt32Array
): boolean;
GetAttributeUInt32ForAllPoints(
pc: PointCloud,
pa: PointAttribute,
out_values: DracoUInt32Array
): boolean;
GetAttributeDataArrayForAllPoints(
pc: PointCloud,
pa: PointAttribute,
data_type: draco_DataType,
out_size: number,
out_values: VoidPtr
): boolean;
SkipAttributeTransform(att_type: draco_GeometryAttribute_Type): void;
}
// DRACO WEB ENCODER IDL
/** Draco3D metadata builder */
export declare class MetadataBuilder {
constructor();
AddStringEntry(metadata: Metadata, entry_name: string, entry_value: string);
AddIntEntry(metadata: Metadata, entry_name: string, entry_value: number);
AddDoubleEntry(metadata: Metadata, entry_name: string, entry_value: number);
AddIntEntryArray(
metadata: Metadata,
entry_name: string,
entry_value: Int32Array,
num_values: number
);
}
/** Draco3D point cloud builder */
export declare class PointCloudBuilder {
constructor();
PointCloudBuilder(): void;
AddFloatAttribute(
pc: PointCloud,
type: draco_GeometryAttribute_Type,
num_vertices: number,
num_components: number,
att_values: Float32Array
);
AddInt8Attribute(
pc: PointCloud,
type: draco_GeometryAttribute_Type,
num_vertices: number,
num_components: number,
att_values: Int8Array
);
AddUInt8Attribute(
pc: PointCloud,
type: draco_GeometryAttribute_Type,
num_vertices: number,
num_components: number,
att_values: Uint8Array
);
AddInt16Attribute(
pc: PointCloud,
type: draco_GeometryAttribute_Type,
num_vertices: number,
num_components: number,
att_values: Int16Array
);
AddUInt16Attribute(
pc: PointCloud,
type: draco_GeometryAttribute_Type,
num_vertices: number,
num_components: number,
att_values: Uint16Array
);
AddInt32Attribute(
pc: PointCloud,
type: draco_GeometryAttribute_Type,
num_vertices: number,
num_components: number,
att_values: Int32Array
);
AddUInt32Attribute(
pc: PointCloud,
type: draco_GeometryAttribute_Type,
num_vertices: number,
num_components: number,
att_values: Uint32Array
);
AddMetadata(pc: PointCloud, metadata: Metadata): boolean;
SetMetadataForAttribute(pc: PointCloud, attribute_id: number, metadata: Metadata);
}
/** Draco3D mesh builder */
export declare class MeshBuilder extends PointCloudBuilder {
constructor();
AddFacesToMesh(mesh: Mesh, num_faces: number, faces: number[]): boolean;
}
/** Draco3D encoder */
export declare class Encoder {
constructor();
Encoder(): void;
SetEncodingMethod(method: number): void;
SetAttributeQuantization(type: draco_GeometryAttribute_Type, quantization_bits: number);
SetAttributeExplicitQuantization(
type: draco_GeometryAttribute_Type,
quantization_bits: number,
num_components: number,
origin: number[],
range: number
);
SetSpeedOptions(encoding_speed: number, decoding_speed: number): void;
SetTrackEncodedProperties(flag: boolean): void;
EncodeMeshToDracoBuffer(mesh: Mesh, encoded_data: DracoInt8Array);
EncodePointCloudToDracoBuffer(
pc: PointCloud,
deduplicate_values: boolean,
encoded_data: DracoInt8Array
);
// Returns the number of encoded points or faces from the last Encode
// operation. Returns 0 if SetTrackEncodedProperties was not set to true.
GetNumberOfEncodedPoints(): number;
GetNumberOfEncodedFaces(): number;
}
/** Draco3D expert encoder */
export declare class ExpertEncoder {
constructor();
ExpertEncoder(pc: PointCloud): void;
SetEncodingMethod(method: number): void;
SetAttributeQuantization(att_id: number, quantization_bits: number);
SetAttributeExplicitQuantization(
att_id: number,
quantization_bits: number,
num_components: number,
origin: number[],
range: number
);
SetSpeedOptions(encoding_speed: number, decoding_speed: number): void;
SetTrackEncodedProperties(flag: boolean): void;
EncodeToDracoBuffer(deduplicate_values: boolean, encoded_data: DracoInt8Array);
// Returns the number of encoded points or faces from the last Encode
// operation. Returns 0 if SetTrackEncodedProperties was not set to true.
GetNumberOfEncodedPoints(): number;
GetNumberOfEncodedFaces(): number;
}
/** Draco3D module interface */
export interface Draco3D {
// ENUMS
// draco_EncodedGeometryType
readonly INVALID_GEOMETRY_TYPE: draco_EncodedGeometryType;
readonly POINT_CLOUD: draco_EncodedGeometryType;
readonly TRIANGULAR_MESH: draco_EncodedGeometryType;
// enum draco_GeometryAttribute_Type
readonly INVALID: draco_GeometryAttribute_Type;
readonly POSITION: draco_GeometryAttribute_Type;
readonly NORMAL: draco_GeometryAttribute_Type;
readonly COLOR: draco_GeometryAttribute_Type;
readonly TEX_COORD: draco_GeometryAttribute_Type;
readonly GENERIC: draco_GeometryAttribute_Type;
// enum draco_DataType
readonly DT_INVALID: draco_DataType;
readonly DT_INT8: draco_DataType;
readonly DT_UINT8: draco_DataType;
readonly DT_INT16: draco_DataType;
readonly DT_UINT16: draco_DataType;
readonly DT_INT32: draco_DataType;
readonly DT_UINT32: draco_DataType;
readonly DT_INT64: draco_DataType;
readonly DT_UINT64: draco_DataType;
readonly DT_FLOAT32: draco_DataType;
readonly DT_FLOAT64: draco_DataType;
readonly DT_BOOL: draco_DataType;
readonly DT_TYPES_COUNT: draco_DataType;
readonly Mesh: typeof Mesh;
readonly PointCloud: typeof PointCloud;
readonly Metadata: typeof Metadata;
readonly Encoder: typeof Encoder;
readonly MeshBuilder: typeof MeshBuilder;
readonly MetadataBuilder: typeof MetadataBuilder;
readonly MetadataQuerier: typeof MetadataQuerier;
readonly Decoder: typeof Decoder;
readonly DecoderBuffer: typeof DecoderBuffer;
readonly DracoFloat32Array: typeof DracoFloat32Array;
readonly DracoInt8Array: typeof DracoInt8Array;
readonly DracoUInt8Array: typeof DracoUInt8Array;
readonly DracoInt16Array: typeof DracoInt16Array;
readonly DracoUInt16Array: typeof DracoUInt16Array;
readonly DracoInt32Array: typeof DracoInt32Array;
readonly DracoUInt32Array: typeof DracoUInt32Array;
readonly AttributeQuantizationTransform: typeof AttributeQuantizationTransform;
// createEncoderModule(): Encoder;
// createDecoderModule(): Decoder;
destroy(resource: any): void;
_malloc(byteLength: number): number;
_free(ptr: number): void;
HEAPF32: {
buffer: ArrayBuffer;
};
}