@loaders.gl/draco
Version:
Framework-independent loader and writer for Draco compressed meshes and point clouds
62 lines (51 loc) • 1.85 kB
text/typescript
// loaders.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
import type {DracoMesh, DracoLoaderData} from './lib/draco-types';
import type {DracoLoaderOptions} from './draco-loader';
import {DracoLoader as DracoWorkerLoader} from './draco-loader';
import DracoParser from './lib/draco-parser';
import {loadDracoDecoderModule} from './lib/draco-module-loader';
import {VERSION} from './lib/utils/version';
// Module constants
export {DRACO_EXTERNAL_LIBRARIES, DRACO_EXTERNAL_LIBRARY_URLS} from './lib/draco-module-loader';
// Draco data types
export type {DracoMesh, DracoLoaderData};
// Draco Writer
export type {DracoWriterOptions} from './draco-writer';
export {DracoWriter} from './draco-writer';
/**
* Browser worker doesn't work because of issue during "draco_encoder.js" loading.
* 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.
*/
export const DracoWriterWorker = {
id: 'draco-writer',
name: 'Draco compressed geometry writer',
module: 'draco',
version: VERSION,
worker: true,
options: {
draco: {},
source: null
}
};
// Draco Loader
export type {DracoLoaderOptions};
export {DracoWorkerLoader};
/**
* Loader for Draco3D compressed geometries
*/
export const DracoLoader = {
...DracoWorkerLoader,
parse
} as const satisfies LoaderWithParser<DracoMesh, never, DracoLoaderOptions>;
async function parse(arrayBuffer: ArrayBuffer, options?: DracoLoaderOptions): Promise<DracoMesh> {
const {draco} = await loadDracoDecoderModule(options);
const dracoParser = new DracoParser(draco);
try {
return dracoParser.parseSync(arrayBuffer, options?.draco);
} finally {
dracoParser.destroy();
}
}