@loaders.gl/scene 5.0.0-beta.1 → 5.0.0-beta.2
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/DRACO-README.md +15 -0
- package/README.md +7 -1
- package/THIRD-PARTY-NOTICES.md +4 -1
- package/dist/dist.dev.js +5708 -4937
- package/dist/dist.min.js +24 -24
- package/dist/draco/bundled.cjs +37 -0
- package/dist/draco/bundled.cjs.map +7 -0
- package/dist/draco/bundled.d.ts +6 -0
- package/dist/draco/bundled.d.ts.map +1 -0
- package/dist/draco/bundled.js +7 -0
- package/dist/draco/bundled.js.map +1 -0
- package/dist/draco/draco-format.cjs +41 -0
- package/dist/draco/draco-format.cjs.map +7 -0
- package/dist/draco/draco-format.d.ts +15 -0
- package/dist/draco/draco-format.d.ts.map +1 -0
- package/dist/draco/draco-format.js +18 -0
- package/dist/draco/draco-format.js.map +1 -0
- package/dist/draco/draco-javascript-loader-with-parser.cjs +44 -0
- package/dist/draco/draco-javascript-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco-javascript-loader-with-parser.d.ts +34 -0
- package/dist/draco/draco-javascript-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco-javascript-loader-with-parser.js +14 -0
- package/dist/draco/draco-javascript-loader-with-parser.js.map +1 -0
- package/dist/draco/draco-libraries.cjs +61 -0
- package/dist/draco/draco-libraries.cjs.map +7 -0
- package/dist/draco/draco-libraries.d.ts +28 -0
- package/dist/draco/draco-libraries.d.ts.map +1 -0
- package/dist/draco/draco-libraries.js +33 -0
- package/dist/draco/draco-libraries.js.map +1 -0
- package/dist/draco/draco-library-options.cjs +80 -0
- package/dist/draco/draco-library-options.cjs.map +7 -0
- package/dist/draco/draco-library-options.d.ts +16 -0
- package/dist/draco/draco-library-options.d.ts.map +1 -0
- package/dist/draco/draco-library-options.js +52 -0
- package/dist/draco/draco-library-options.js.map +1 -0
- package/dist/draco/draco-loader-options.cjs +37 -0
- package/dist/draco/draco-loader-options.cjs.map +7 -0
- package/dist/draco/draco-loader-options.d.ts +27 -0
- package/dist/draco/draco-loader-options.d.ts.map +1 -0
- package/dist/draco/draco-loader-options.js +12 -0
- package/dist/draco/draco-loader-options.js.map +1 -0
- package/dist/draco/draco-loader-types.cjs +88 -0
- package/dist/draco/draco-loader-types.cjs.map +7 -0
- package/dist/draco/draco-loader-types.d.ts +69 -0
- package/dist/draco/draco-loader-types.d.ts.map +1 -0
- package/dist/draco/draco-loader-types.js +54 -0
- package/dist/draco/draco-loader-types.js.map +1 -0
- package/dist/draco/draco-loader.cjs +51 -0
- package/dist/draco/draco-loader.cjs.map +7 -0
- package/dist/draco/draco-loader.d.ts +39 -0
- package/dist/draco/draco-loader.d.ts.map +1 -0
- package/dist/draco/draco-loader.js +22 -0
- package/dist/draco/draco-loader.js.map +1 -0
- package/dist/draco/draco-wasm-loader-with-parser.cjs +48 -0
- package/dist/draco/draco-wasm-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco-wasm-loader-with-parser.d.ts +34 -0
- package/dist/draco/draco-wasm-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco-wasm-loader-with-parser.js +14 -0
- package/dist/draco/draco-wasm-loader-with-parser.js.map +1 -0
- package/dist/draco/draco-writer.cjs +183 -0
- package/dist/draco/draco-writer.cjs.map +7 -0
- package/dist/draco/draco-writer.d.ts +97 -0
- package/dist/draco/draco-writer.d.ts.map +1 -0
- package/dist/draco/draco-writer.js +166 -0
- package/dist/draco/draco-writer.js.map +1 -0
- package/dist/draco/draco3d/draco3d-types.cjs +76 -0
- package/dist/draco/draco3d/draco3d-types.cjs.map +7 -0
- package/dist/draco/draco3d/draco3d-types.d.ts +303 -0
- package/dist/draco/draco3d/draco3d-types.d.ts.map +1 -0
- package/dist/draco/draco3d/draco3d-types.js +47 -0
- package/dist/draco/draco3d/draco3d-types.js.map +1 -0
- package/dist/draco/draco3d-loader-with-parser.cjs +50 -0
- package/dist/draco/draco3d-loader-with-parser.cjs.map +7 -0
- package/dist/draco/draco3d-loader-with-parser.d.ts +34 -0
- package/dist/draco/draco3d-loader-with-parser.d.ts.map +1 -0
- package/dist/draco/draco3d-loader-with-parser.js +21 -0
- package/dist/draco/draco3d-loader-with-parser.js.map +1 -0
- package/dist/draco/index.cjs +54 -0
- package/dist/draco/index.cjs.map +7 -0
- package/dist/draco/index.d.ts +13 -0
- package/dist/draco/index.d.ts.map +1 -0
- package/dist/draco/index.js +13 -0
- package/dist/draco/index.js.map +1 -0
- package/dist/draco/lib/draco-builder.cjs +660 -0
- package/dist/draco/lib/draco-builder.cjs.map +7 -0
- package/dist/draco/lib/draco-builder.d.ts +175 -0
- package/dist/draco/lib/draco-builder.d.ts.map +1 -0
- package/dist/draco/lib/draco-builder.js +612 -0
- package/dist/draco/lib/draco-builder.js.map +1 -0
- package/dist/draco/lib/draco-library-loader.cjs +47 -0
- package/dist/draco/lib/draco-library-loader.cjs.map +7 -0
- package/dist/draco/lib/draco-library-loader.d.ts +5 -0
- package/dist/draco/lib/draco-library-loader.d.ts.map +1 -0
- package/dist/draco/lib/draco-library-loader.js +23 -0
- package/dist/draco/lib/draco-library-loader.js.map +1 -0
- package/dist/draco/lib/draco-module-loader.cjs +281 -0
- package/dist/draco/lib/draco-module-loader.cjs.map +7 -0
- package/dist/draco/lib/draco-module-loader.d.ts +25 -0
- package/dist/draco/lib/draco-module-loader.d.ts.map +1 -0
- package/dist/draco/lib/draco-module-loader.js +220 -0
- package/dist/draco/lib/draco-module-loader.js.map +1 -0
- package/dist/draco/lib/draco-parser.cjs +598 -0
- package/dist/draco/lib/draco-parser.cjs.map +7 -0
- package/dist/draco/lib/draco-parser.d.ts +142 -0
- package/dist/draco/lib/draco-parser.d.ts.map +1 -0
- package/dist/draco/lib/draco-parser.js +595 -0
- package/dist/draco/lib/draco-parser.js.map +1 -0
- package/dist/draco/lib/draco-types.cjs +19 -0
- package/dist/draco/lib/draco-types.cjs.map +7 -0
- package/dist/draco/lib/draco-types.d.ts +59 -0
- package/dist/draco/lib/draco-types.d.ts.map +1 -0
- package/dist/draco/lib/draco-types.js +5 -0
- package/dist/draco/lib/draco-types.js.map +1 -0
- package/dist/draco/lib/parse-draco.cjs +59 -0
- package/dist/draco/lib/parse-draco.cjs.map +7 -0
- package/dist/draco/lib/parse-draco.d.ts +22 -0
- package/dist/draco/lib/parse-draco.d.ts.map +1 -0
- package/dist/draco/lib/parse-draco.js +32 -0
- package/dist/draco/lib/parse-draco.js.map +1 -0
- package/dist/draco/lib/utils/get-draco-schema.cjs +74 -0
- package/dist/draco/lib/utils/get-draco-schema.cjs.map +7 -0
- package/dist/draco/lib/utils/get-draco-schema.d.ts +7 -0
- package/dist/draco/lib/utils/get-draco-schema.d.ts.map +1 -0
- package/dist/draco/lib/utils/get-draco-schema.js +45 -0
- package/dist/draco/lib/utils/get-draco-schema.js.map +1 -0
- package/dist/draco/lib/utils/version.cjs +31 -0
- package/dist/draco/lib/utils/version.cjs.map +7 -0
- package/dist/draco/lib/utils/version.d.ts +2 -0
- package/dist/draco/lib/utils/version.d.ts.map +1 -0
- package/dist/draco/lib/utils/version.js +8 -0
- package/dist/draco/lib/utils/version.js.map +1 -0
- package/dist/draco/unbundled.cjs +33 -0
- package/dist/draco/unbundled.cjs.map +7 -0
- package/dist/draco/unbundled.d.ts +3 -0
- package/dist/draco/unbundled.d.ts.map +1 -0
- package/dist/draco/unbundled.js +5 -0
- package/dist/draco/unbundled.js.map +1 -0
- package/dist/draco/workers/draco-worker-node.cjs +8 -0
- package/dist/draco/workers/draco-worker-node.cjs.map +7 -0
- package/dist/draco/workers/draco-worker-node.d.ts +2 -0
- package/dist/draco/workers/draco-worker-node.d.ts.map +1 -0
- package/dist/draco/workers/draco-worker-node.js +9 -0
- package/dist/draco/workers/draco-worker-node.js.map +1 -0
- package/dist/draco/workers/draco-worker.cjs +7 -0
- package/dist/draco/workers/draco-worker.cjs.map +7 -0
- package/dist/draco/workers/draco-worker.d.ts +2 -0
- package/dist/draco/workers/draco-worker.d.ts.map +1 -0
- package/dist/draco/workers/draco-worker.js +7 -0
- package/dist/draco/workers/draco-worker.js.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.cjs +11 -0
- package/dist/draco/workers/draco-writer-worker-node.cjs.map +7 -0
- package/dist/draco/workers/draco-writer-worker-node.d.cts +2 -0
- package/dist/draco/workers/draco-writer-worker-node.d.cts.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.d.ts +2 -0
- package/dist/draco/workers/draco-writer-worker-node.d.ts.map +1 -0
- package/dist/draco/workers/draco-writer-worker-node.js +9 -0
- package/dist/draco/workers/draco-writer-worker-node.js.map +1 -0
- package/dist/draco/workers/draco-writer-worker.cjs +10 -0
- package/dist/draco/workers/draco-writer-worker.cjs.map +7 -0
- package/dist/draco/workers/draco-writer-worker.d.ts +2 -0
- package/dist/draco/workers/draco-writer-worker.d.ts.map +1 -0
- package/dist/draco/workers/draco-writer-worker.js +7 -0
- package/dist/draco/workers/draco-writer-worker.js.map +1 -0
- package/dist/draco-javascript-loader.cjs +25 -0
- package/dist/draco-javascript-loader.cjs.map +7 -0
- package/dist/draco-javascript-loader.d.ts +2 -0
- package/dist/draco-javascript-loader.d.ts.map +1 -0
- package/dist/draco-javascript-loader.js +3 -0
- package/dist/draco-javascript-loader.js.map +1 -0
- package/dist/draco-library-options.cjs +36 -0
- package/dist/draco-library-options.cjs.map +7 -0
- package/dist/draco-library-options.d.ts +3 -0
- package/dist/draco-library-options.d.ts.map +1 -0
- package/dist/draco-library-options.js +4 -0
- package/dist/draco-library-options.js.map +1 -0
- package/dist/draco-loader-types.cjs +25 -0
- package/dist/draco-loader-types.cjs.map +7 -0
- package/dist/draco-loader-types.d.ts +2 -0
- package/dist/draco-loader-types.d.ts.map +1 -0
- package/dist/draco-loader-types.js +3 -0
- package/dist/draco-loader-types.js.map +1 -0
- package/dist/draco-loader.cjs +25 -0
- package/dist/draco-loader.cjs.map +7 -0
- package/dist/draco-loader.d.ts +2 -0
- package/dist/draco-loader.d.ts.map +1 -0
- package/dist/draco-loader.js +3 -0
- package/dist/draco-loader.js.map +1 -0
- package/dist/draco-wasm-loader.cjs +25 -0
- package/dist/draco-wasm-loader.cjs.map +7 -0
- package/dist/draco-wasm-loader.d.ts +2 -0
- package/dist/draco-wasm-loader.d.ts.map +1 -0
- package/dist/draco-wasm-loader.js +3 -0
- package/dist/draco-wasm-loader.js.map +1 -0
- package/dist/draco-worker-node.js +28279 -0
- package/dist/draco-worker-node.js.map +7 -0
- package/dist/draco-worker.js +18145 -0
- package/dist/draco-worker.js.map +7 -0
- package/dist/draco-writer-worker-node.cjs +27521 -0
- package/dist/draco-writer-worker-node.cjs.map +7 -0
- package/dist/draco-writer-worker.js +17339 -0
- package/dist/draco-writer-worker.js.map +7 -0
- package/dist/draco-writer.cjs +25 -0
- package/dist/draco-writer.cjs.map +7 -0
- package/dist/draco-writer.d.ts +2 -0
- package/dist/draco-writer.d.ts.map +1 -0
- package/dist/draco-writer.js +3 -0
- package/dist/draco-writer.js.map +1 -0
- package/dist/draco3d-loader.cjs +25 -0
- package/dist/draco3d-loader.cjs.map +7 -0
- package/dist/draco3d-loader.d.ts +2 -0
- package/dist/draco3d-loader.d.ts.map +1 -0
- package/dist/draco3d-loader.js +3 -0
- package/dist/draco3d-loader.js.map +1 -0
- package/dist/glb-loader-types.cjs +61 -0
- package/dist/glb-loader-types.cjs.map +7 -0
- package/dist/glb-loader-types.d.ts +2 -0
- package/dist/glb-loader-types.d.ts.map +1 -0
- package/dist/glb-loader-types.js +2 -0
- package/dist/glb-loader-types.js.map +1 -0
- package/dist/glb-loader.cjs +48 -0
- package/dist/glb-loader.cjs.map +7 -0
- package/dist/glb-loader.d.ts +2 -0
- package/dist/glb-loader.d.ts.map +1 -0
- package/dist/glb-loader.js +2 -0
- package/dist/glb-loader.js.map +1 -0
- package/dist/glb-writer.cjs +53 -0
- package/dist/glb-writer.cjs.map +7 -0
- package/dist/glb-writer.d.ts +2 -0
- package/dist/glb-writer.d.ts.map +1 -0
- package/dist/glb-writer.js +2 -0
- package/dist/glb-writer.js.map +1 -0
- package/dist/gltf/glb-loader-types.cjs +1 -1
- package/dist/gltf/glb-loader-types.cjs.map +2 -2
- package/dist/gltf/glb-loader-types.d.ts +2 -2
- package/dist/gltf/glb-loader-types.js +1 -1
- package/dist/gltf/glb-loader-types.js.map +1 -1
- package/dist/gltf/gltf-loader-types.cjs +1 -1
- package/dist/gltf/gltf-loader-types.cjs.map +2 -2
- package/dist/gltf/gltf-loader-types.d.ts +5 -5
- package/dist/gltf/gltf-loader-types.d.ts.map +1 -1
- package/dist/gltf/gltf-loader-types.js +1 -1
- package/dist/gltf/gltf-loader-types.js.map +1 -1
- package/dist/gltf/gltf-loader.cjs.map +1 -1
- package/dist/gltf/gltf-loader.d.ts +4 -4
- package/dist/gltf/gltf-loader.d.ts.map +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.cjs +12 -2
- package/dist/gltf/lib/encoders/encode-gltf-draco.cjs.map +2 -2
- package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts.map +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.js +1 -1
- package/dist/gltf/lib/encoders/encode-gltf-draco.js.map +1 -1
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs +2 -2
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs.map +2 -2
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js +1 -1
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/gltf/lib/parsers/parse-gltf.cjs +2 -2
- package/dist/gltf/lib/parsers/parse-gltf.cjs.map +3 -3
- package/dist/gltf/lib/parsers/parse-gltf.js +5 -5
- package/dist/gltf/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/gltf/lib/types/gltf-zod-schema.d.ts +1 -1
- package/dist/gltf/lib/utils/version.cjs +1 -1
- package/dist/gltf/lib/utils/version.js +1 -1
- package/dist/gltf-loader-types.cjs +73 -0
- package/dist/gltf-loader-types.cjs.map +7 -0
- package/dist/gltf-loader-types.d.ts +2 -0
- package/dist/gltf-loader-types.d.ts.map +1 -0
- package/dist/gltf-loader-types.js +2 -0
- package/dist/gltf-loader-types.js.map +1 -0
- package/dist/gltf-loader.cjs +48 -0
- package/dist/gltf-loader.cjs.map +7 -0
- package/dist/gltf-loader.d.ts +2 -0
- package/dist/gltf-loader.d.ts.map +1 -0
- package/dist/gltf-loader.js +2 -0
- package/dist/gltf-loader.js.map +1 -0
- package/dist/gltf-source.cjs +238 -0
- package/dist/gltf-source.cjs.map +7 -0
- package/dist/gltf-source.d.ts +2 -0
- package/dist/gltf-source.d.ts.map +1 -0
- package/dist/gltf-source.js +2 -0
- package/dist/gltf-source.js.map +1 -0
- package/dist/gltf-writer.cjs +69 -0
- package/dist/gltf-writer.cjs.map +7 -0
- package/dist/gltf-writer.d.ts +2 -0
- package/dist/gltf-writer.d.ts.map +1 -0
- package/dist/gltf-writer.js +2 -0
- package/dist/gltf-writer.js.map +1 -0
- package/dist/index.cjs +13 -0
- package/dist/index.cjs.map +2 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/libs/DRACO-LICENSE +252 -0
- package/dist/libs/README.md +20 -0
- package/dist/libs/draco_decoder.js +34 -0
- package/dist/libs/draco_decoder.mjs +37 -0
- package/dist/libs/draco_decoder.wasm +0 -0
- package/dist/libs/draco_decoder_gltf.wasm +0 -0
- package/dist/libs/draco_encoder.js +98 -0
- package/dist/libs/draco_encoder.mjs +101 -0
- package/dist/libs/draco_encoder.wasm +0 -0
- package/dist/libs/draco_wasm_wrapper.js +117 -0
- package/dist/libs/draco_wasm_wrapper.mjs +120 -0
- package/dist/libs/draco_wasm_wrapper_gltf.js +116 -0
- package/dist/libs/draco_wasm_wrapper_gltf.mjs +119 -0
- package/dist/mtl-loader-types.cjs +64 -0
- package/dist/mtl-loader-types.cjs.map +7 -0
- package/dist/mtl-loader-types.d.ts +2 -0
- package/dist/mtl-loader-types.d.ts.map +1 -0
- package/dist/mtl-loader-types.js +2 -0
- package/dist/mtl-loader-types.js.map +1 -0
- package/dist/mtl-loader.cjs +47 -0
- package/dist/mtl-loader.cjs.map +7 -0
- package/dist/mtl-loader.d.ts +2 -0
- package/dist/mtl-loader.d.ts.map +1 -0
- package/dist/mtl-loader.js +2 -0
- package/dist/mtl-loader.js.map +1 -0
- package/dist/obj/mtl-loader-types.cjs +2 -2
- package/dist/obj/mtl-loader-types.cjs.map +2 -2
- package/dist/obj/mtl-loader-types.d.ts +2 -2
- package/dist/obj/mtl-loader-types.js +2 -2
- package/dist/obj/mtl-loader-types.js.map +1 -1
- package/dist/obj/mtl-loader.cjs +1 -1
- package/dist/obj/mtl-loader.cjs.map +2 -2
- package/dist/obj/mtl-loader.js +1 -1
- package/dist/obj/mtl-loader.js.map +1 -1
- package/dist/obj/obj-loader-types.cjs +2 -2
- package/dist/obj/obj-loader-types.cjs.map +2 -2
- package/dist/obj/obj-loader-types.js +2 -2
- package/dist/obj/obj-loader-types.js.map +1 -1
- package/dist/obj/obj-writer.cjs +1 -1
- package/dist/obj/obj-writer.js +1 -1
- package/dist/obj-loader-types.cjs +71 -0
- package/dist/obj-loader-types.cjs.map +7 -0
- package/dist/obj-loader-types.d.ts +2 -0
- package/dist/obj-loader-types.d.ts.map +1 -0
- package/dist/obj-loader-types.js +2 -0
- package/dist/obj-loader-types.js.map +1 -0
- package/dist/obj-loader.cjs +163 -0
- package/dist/obj-loader.cjs.map +7 -0
- package/dist/obj-loader.d.ts +2 -0
- package/dist/obj-loader.d.ts.map +1 -0
- package/dist/obj-loader.js +2 -0
- package/dist/obj-loader.js.map +1 -0
- package/dist/obj-worker.js +204 -71
- package/dist/obj-writer.cjs +167 -0
- package/dist/obj-writer.cjs.map +7 -0
- package/dist/obj-writer.d.ts +2 -0
- package/dist/obj-writer.d.ts.map +1 -0
- package/dist/obj-writer.js +2 -0
- package/dist/obj-writer.js.map +1 -0
- package/dist/usd/usd-loader-types.cjs +2 -2
- package/dist/usd/usd-loader-types.cjs.map +2 -2
- package/dist/usd/usd-loader-types.js +2 -2
- package/dist/usd/usd-loader-types.js.map +1 -1
- package/dist/usd-loader-types.cjs +69 -0
- package/dist/usd-loader-types.cjs.map +7 -0
- package/dist/usd-loader-types.d.ts +2 -0
- package/dist/usd-loader-types.d.ts.map +1 -0
- package/dist/usd-loader-types.js +2 -0
- package/dist/usd-loader-types.js.map +1 -0
- package/dist/usd-loader.cjs +43 -0
- package/dist/usd-loader.cjs.map +7 -0
- package/dist/usd-loader.d.ts +2 -0
- package/dist/usd-loader.d.ts.map +1 -0
- package/dist/usd-loader.js +2 -0
- package/dist/usd-loader.js.map +1 -0
- package/package.json +130 -71
- package/src/draco/bundled.ts +10 -0
- package/src/draco/draco-format.ts +20 -0
- package/src/draco/draco-javascript-loader-with-parser.ts +26 -0
- package/src/draco/draco-libraries.ts +35 -0
- package/src/draco/draco-library-options.ts +76 -0
- package/src/draco/draco-loader-options.ts +33 -0
- package/src/draco/draco-loader-types.ts +78 -0
- package/src/draco/draco-loader.ts +45 -0
- package/src/draco/draco-wasm-loader-with-parser.ts +31 -0
- package/src/draco/draco-writer.ts +252 -0
- package/src/draco/draco3d/draco3d-types.ts +498 -0
- package/src/draco/draco3d-loader-with-parser.ts +34 -0
- package/src/draco/index.ts +46 -0
- package/src/draco/lib/draco-builder.ts +935 -0
- package/src/draco/lib/draco-library-loader.ts +38 -0
- package/src/draco/lib/draco-module-loader.ts +370 -0
- package/src/draco/lib/draco-parser.ts +776 -0
- package/src/draco/lib/draco-types.ts +72 -0
- package/src/draco/lib/parse-draco.ts +51 -0
- package/src/draco/lib/utils/get-draco-schema.ts +65 -0
- package/src/draco/lib/utils/version.ts +8 -0
- package/src/draco/libs/DRACO-LICENSE +252 -0
- package/src/draco/libs/README.md +20 -0
- package/src/draco/libs/draco_decoder.js +34 -0
- package/src/draco/libs/draco_decoder.wasm +0 -0
- package/src/draco/libs/draco_decoder_gltf.wasm +0 -0
- package/src/draco/libs/draco_encoder.js +98 -0
- package/src/draco/libs/draco_encoder.wasm +0 -0
- package/src/draco/libs/draco_wasm_wrapper.js +117 -0
- package/src/draco/libs/draco_wasm_wrapper_gltf.js +116 -0
- package/src/draco/unbundled.ts +6 -0
- package/src/draco/workers/draco-worker-node.ts +10 -0
- package/src/draco/workers/draco-worker.ts +8 -0
- package/src/draco/workers/draco-writer-worker-node.cjs +21 -0
- package/src/draco/workers/draco-writer-worker-node.ts +13 -0
- package/src/draco/workers/draco-writer-worker.ts +11 -0
- package/src/draco-javascript-loader.ts +2 -0
- package/src/draco-library-options.ts +6 -0
- package/src/draco-loader-types.ts +2 -0
- package/src/draco-loader.ts +2 -0
- package/src/draco-wasm-loader.ts +2 -0
- package/src/draco-writer.ts +2 -0
- package/src/draco3d-loader.ts +2 -0
- package/src/glb-loader-types.ts +1 -0
- package/src/glb-loader.ts +1 -0
- package/src/glb-writer.ts +1 -0
- package/src/gltf/glb-loader-types.ts +1 -1
- package/src/gltf/gltf-loader-types.ts +5 -5
- package/src/gltf/gltf-loader.ts +4 -4
- package/src/gltf/lib/encoders/encode-gltf-draco.ts +2 -2
- package/src/gltf/lib/extensions/KHR_draco_mesh_compression.ts +2 -1
- package/src/gltf/lib/parsers/parse-gltf.ts +5 -5
- package/src/gltf-loader-types.ts +1 -0
- package/src/gltf-loader.ts +1 -0
- package/src/gltf-source.ts +1 -0
- package/src/gltf-writer.ts +1 -0
- package/src/index.ts +5 -0
- package/src/mtl-loader-types.ts +1 -0
- package/src/mtl-loader.ts +1 -0
- package/src/obj/mtl-loader-types.ts +1 -1
- package/src/obj/mtl-loader.ts +1 -1
- package/src/obj/obj-loader-types.ts +1 -1
- package/src/obj-loader-types.ts +1 -0
- package/src/obj-loader.ts +1 -0
- package/src/obj-writer.ts +1 -0
- package/src/usd/usd-loader-types.ts +1 -1
- package/src/usd-loader-types.ts +1 -0
- package/src/usd-loader.ts +1 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {LoadLibraryOptions} from '@loaders.gl/core/worker-utils';
|
|
6
|
+
import type {DracoDecoderProfile} from './lib/draco-module-loader';
|
|
7
|
+
|
|
8
|
+
/** Bundled Draco runtime selection and optional application overrides. */
|
|
9
|
+
export type DracoLibraryOptions = LoadLibraryOptions & {
|
|
10
|
+
/** Selects the full decoder or the smaller glTF-compatible subset. Defaults to full. */
|
|
11
|
+
decoderProfile?: DracoDecoderProfile;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Creates browser-bundler URL overrides for vendored Draco encoder and decoder runtimes.
|
|
16
|
+
* Classic and generated ESM assets live in the scene package’s dist/libs directory.
|
|
17
|
+
* Explicit application modules override the bundled defaults.
|
|
18
|
+
*/
|
|
19
|
+
export function getDracoLibraryOptions(
|
|
20
|
+
options: DracoLibraryOptions = {}
|
|
21
|
+
): DracoLibraryOptions & {decoderProfile: DracoDecoderProfile} {
|
|
22
|
+
const decoderProfile = options.decoderProfile ?? 'full';
|
|
23
|
+
const decoderModules =
|
|
24
|
+
decoderProfile === 'gltf'
|
|
25
|
+
? {
|
|
26
|
+
'draco_wasm_wrapper_gltf.js': new URL(
|
|
27
|
+
'../../dist/libs/draco_wasm_wrapper_gltf.js',
|
|
28
|
+
import.meta.url
|
|
29
|
+
).href,
|
|
30
|
+
'draco_decoder_gltf.wasm': new URL(
|
|
31
|
+
'../../dist/libs/draco_decoder_gltf.wasm',
|
|
32
|
+
import.meta.url
|
|
33
|
+
).href
|
|
34
|
+
}
|
|
35
|
+
: {
|
|
36
|
+
'draco_wasm_wrapper.js': new URL('../../dist/libs/draco_wasm_wrapper.js', import.meta.url)
|
|
37
|
+
.href,
|
|
38
|
+
'draco_decoder.wasm': new URL('../../dist/libs/draco_decoder.wasm', import.meta.url).href
|
|
39
|
+
};
|
|
40
|
+
const moduleLibraries: Record<string, string> = {
|
|
41
|
+
'draco_encoder.mjs': new URL('../../dist/libs/draco_encoder.mjs', import.meta.url).href,
|
|
42
|
+
'draco_decoder.mjs': new URL('../../dist/libs/draco_decoder.mjs', import.meta.url).href,
|
|
43
|
+
...(decoderProfile === 'gltf'
|
|
44
|
+
? {
|
|
45
|
+
'draco_wasm_wrapper_gltf.mjs': new URL(
|
|
46
|
+
'../../dist/libs/draco_wasm_wrapper_gltf.mjs',
|
|
47
|
+
import.meta.url
|
|
48
|
+
).href
|
|
49
|
+
}
|
|
50
|
+
: {
|
|
51
|
+
'draco_wasm_wrapper.mjs': new URL(
|
|
52
|
+
'../../dist/libs/draco_wasm_wrapper.mjs',
|
|
53
|
+
import.meta.url
|
|
54
|
+
).href
|
|
55
|
+
})
|
|
56
|
+
};
|
|
57
|
+
// Do not substitute bundled ESM assets for an application's classic-name override.
|
|
58
|
+
for (const libraryName of Object.keys(moduleLibraries)) {
|
|
59
|
+
const classicName = libraryName.replace(/\.mjs$/, '.js');
|
|
60
|
+
if (options.modules?.[classicName] !== undefined) {
|
|
61
|
+
delete moduleLibraries[libraryName];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
...options,
|
|
66
|
+
decoderProfile,
|
|
67
|
+
modules: {
|
|
68
|
+
'draco_encoder.js': new URL('../../dist/libs/draco_encoder.js', import.meta.url).href,
|
|
69
|
+
'draco_encoder.wasm': new URL('../../dist/libs/draco_encoder.wasm', import.meta.url).href,
|
|
70
|
+
'draco_decoder.js': new URL('../../dist/libs/draco_decoder.js', import.meta.url).href,
|
|
71
|
+
...decoderModules,
|
|
72
|
+
...moduleLibraries,
|
|
73
|
+
...options.modules
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {StrictLoaderOptions} from '@loaders.gl/core/loader-utils';
|
|
6
|
+
import type {DracoParseOptions} from './lib/draco-parser';
|
|
7
|
+
import type {DracoDecoderProfile} from './lib/draco-module-loader';
|
|
8
|
+
|
|
9
|
+
/** Draco decoder backend selected by the metadata loader. */
|
|
10
|
+
export type DracoDecoderBackend = 'wasm' | 'javascript' | 'draco3d';
|
|
11
|
+
|
|
12
|
+
/** Options for the Draco loader. */
|
|
13
|
+
export type DracoLoaderOptions = StrictLoaderOptions & {
|
|
14
|
+
draco?: DracoParseOptions & {
|
|
15
|
+
/** Decoder backend. Defaults to WASM when available and JavaScript otherwise. */
|
|
16
|
+
backend?: DracoDecoderBackend | 'js';
|
|
17
|
+
/** Selects mesh output or Apache Arrow output. */
|
|
18
|
+
shape?: 'mesh' | 'arrow-table';
|
|
19
|
+
/** Selects the full decoder or the smaller glTF-compatible decoder build. */
|
|
20
|
+
decoderProfile?: DracoDecoderProfile;
|
|
21
|
+
/** Override the URL to the worker bundle (by default loads from unpkg.com) */
|
|
22
|
+
workerUrl?: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/** Default option bag for the Draco loader. */
|
|
27
|
+
export const DRACO_LOADER_DEFAULT_OPTIONS = {
|
|
28
|
+
backend: typeof WebAssembly === 'object' ? 'wasm' : 'javascript',
|
|
29
|
+
extraAttributes: {},
|
|
30
|
+
attributeNameEntry: undefined,
|
|
31
|
+
shape: 'arrow-table',
|
|
32
|
+
decoderProfile: 'full'
|
|
33
|
+
} as const;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Loader, LoaderWithParser} from '@loaders.gl/core/loader-utils';
|
|
6
|
+
import type {ArrowTable} from '@loaders.gl/core/schema';
|
|
7
|
+
import type {DracoMesh} from './lib/draco-types';
|
|
8
|
+
import {
|
|
9
|
+
deserializeArrowWorkerResult,
|
|
10
|
+
serializeArrowWorkerResult
|
|
11
|
+
} from '@loaders.gl/core/schema-utils/arrow-transport';
|
|
12
|
+
import {VERSION} from './lib/utils/version';
|
|
13
|
+
import {DracoFormat} from './draco-format';
|
|
14
|
+
import {
|
|
15
|
+
DRACO_LOADER_DEFAULT_OPTIONS,
|
|
16
|
+
type DracoDecoderBackend,
|
|
17
|
+
type DracoLoaderOptions
|
|
18
|
+
} from './draco-loader-options';
|
|
19
|
+
|
|
20
|
+
export type {DracoLoaderOptions} from './draco-loader-options';
|
|
21
|
+
|
|
22
|
+
/** Preloads the parser-bearing Draco loader implementation. */
|
|
23
|
+
async function preload(
|
|
24
|
+
_url: string,
|
|
25
|
+
options?: Record<string, unknown>
|
|
26
|
+
): Promise<LoaderWithParser<DracoMesh | ArrowTable, never, DracoLoaderOptions>> {
|
|
27
|
+
const dracoLoaderOptions = options as DracoLoaderOptions | undefined;
|
|
28
|
+
switch (getDracoBackend(dracoLoaderOptions)) {
|
|
29
|
+
case 'wasm': {
|
|
30
|
+
const {DracoWASMLoaderWithParser} = await import('@loaders.gl/scene/draco-wasm-loader');
|
|
31
|
+
return DracoWASMLoaderWithParser;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
case 'javascript': {
|
|
35
|
+
const {DracoJavaScriptLoaderWithParser} = await import(
|
|
36
|
+
'@loaders.gl/scene/draco-javascript-loader'
|
|
37
|
+
);
|
|
38
|
+
return DracoJavaScriptLoaderWithParser;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
case 'draco3d': {
|
|
42
|
+
const {Draco3DLoaderWithParser} = await import('@loaders.gl/scene/draco3d-loader');
|
|
43
|
+
return Draco3DLoaderWithParser;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
default:
|
|
47
|
+
throw new Error(`DracoLoader: unsupported backend "${dracoLoaderOptions?.draco?.backend}"`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Metadata-only worker loader for Draco3D compressed geometries. */
|
|
52
|
+
export const DracoLoader = {
|
|
53
|
+
dataType: null as unknown as DracoMesh | ArrowTable,
|
|
54
|
+
batchType: null as never,
|
|
55
|
+
...DracoFormat,
|
|
56
|
+
// shapes: ['mesh'],
|
|
57
|
+
version: VERSION,
|
|
58
|
+
worker: true,
|
|
59
|
+
/** Node test workers live with the Draco implementation. */
|
|
60
|
+
workerSourceNode: 'draco/workers/draco-worker-node.ts',
|
|
61
|
+
serializeWorkerResult: serializeArrowWorkerResult,
|
|
62
|
+
deserializeWorkerResult: deserializeArrowWorkerResult,
|
|
63
|
+
options: {
|
|
64
|
+
draco: DRACO_LOADER_DEFAULT_OPTIONS
|
|
65
|
+
},
|
|
66
|
+
preload
|
|
67
|
+
} as const satisfies Loader<DracoMesh | ArrowTable, never, DracoLoaderOptions>;
|
|
68
|
+
|
|
69
|
+
/** @deprecated Use DracoLoader. */
|
|
70
|
+
export const DracoWorkerLoader = DracoLoader;
|
|
71
|
+
|
|
72
|
+
/** Resolves the Draco decoder backend from loader options. */
|
|
73
|
+
function getDracoBackend(options?: DracoLoaderOptions): DracoDecoderBackend {
|
|
74
|
+
if (options?.draco?.backend) {
|
|
75
|
+
return options.draco.backend === 'js' ? 'javascript' : options.draco.backend;
|
|
76
|
+
}
|
|
77
|
+
return DracoLoader.options.draco.backend;
|
|
78
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {LoaderWithParser, LoaderContext} from '@loaders.gl/core/loader-utils';
|
|
6
|
+
import {extractLoadLibraryOptions} from '@loaders.gl/core/worker-utils';
|
|
7
|
+
import type {ArrowTable} from '@loaders.gl/core/schema';
|
|
8
|
+
import type {DracoMesh} from './lib/draco-types';
|
|
9
|
+
import {parseDraco} from './lib/parse-draco';
|
|
10
|
+
import {loadDracoDecoderModule} from './lib/draco-module-loader';
|
|
11
|
+
import {DracoLoader as DracoLoaderMetadata} from './draco-loader-types';
|
|
12
|
+
import type {DracoLoaderOptions} from './draco-loader-options';
|
|
13
|
+
|
|
14
|
+
const {preload: _DracoLoaderPreload, ...DracoLoaderMetadataWithoutPreload} = DracoLoaderMetadata;
|
|
15
|
+
|
|
16
|
+
export type {DracoLoaderOptions} from './draco-loader-options';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Loader for Draco3D compressed geometries
|
|
20
|
+
*/
|
|
21
|
+
export const DracoLoaderWithParser = {
|
|
22
|
+
...DracoLoaderMetadataWithoutPreload,
|
|
23
|
+
parse
|
|
24
|
+
} as const satisfies LoaderWithParser<DracoMesh | ArrowTable, never, DracoLoaderOptions>;
|
|
25
|
+
|
|
26
|
+
/** Decodes compressed geometry through the selected Draco runtime. */
|
|
27
|
+
async function parse(
|
|
28
|
+
arrayBuffer: ArrayBuffer,
|
|
29
|
+
options?: DracoLoaderOptions,
|
|
30
|
+
context?: LoaderContext
|
|
31
|
+
): Promise<DracoMesh | ArrowTable> {
|
|
32
|
+
return await parseDraco(
|
|
33
|
+
arrayBuffer,
|
|
34
|
+
options,
|
|
35
|
+
async () =>
|
|
36
|
+
await loadDracoDecoderModule(
|
|
37
|
+
extractLoadLibraryOptions(options),
|
|
38
|
+
options?.draco?.backend === 'javascript' || options?.draco?.backend === 'js'
|
|
39
|
+
? 'js'
|
|
40
|
+
: 'wasm',
|
|
41
|
+
options?.draco?.decoderProfile
|
|
42
|
+
),
|
|
43
|
+
context
|
|
44
|
+
);
|
|
45
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {LoaderWithParser, LoaderContext} from '@loaders.gl/core/loader-utils';
|
|
6
|
+
import {extractLoadLibraryOptions} from '@loaders.gl/core/worker-utils';
|
|
7
|
+
import type {ArrowTable} from '@loaders.gl/core/schema';
|
|
8
|
+
import type {DracoMesh} from './lib/draco-types';
|
|
9
|
+
import {loadDracoDecoderModule} from './lib/draco-module-loader';
|
|
10
|
+
import {parseDraco} from './lib/parse-draco';
|
|
11
|
+
import {DracoLoader as DracoLoaderMetadata} from './draco-loader-types';
|
|
12
|
+
import type {DracoLoaderOptions} from './draco-loader-options';
|
|
13
|
+
|
|
14
|
+
const {preload: _DracoLoaderPreload, ...DracoLoaderMetadataWithoutPreload} = DracoLoaderMetadata;
|
|
15
|
+
|
|
16
|
+
/** Parser-bearing Draco loader backed by the WASM decoder. */
|
|
17
|
+
export const DracoWASMLoaderWithParser = {
|
|
18
|
+
...DracoLoaderMetadataWithoutPreload,
|
|
19
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: DracoLoaderOptions, context?: LoaderContext) =>
|
|
20
|
+
await parseDraco(
|
|
21
|
+
arrayBuffer,
|
|
22
|
+
options,
|
|
23
|
+
async () =>
|
|
24
|
+
await loadDracoDecoderModule(
|
|
25
|
+
extractLoadLibraryOptions(options),
|
|
26
|
+
'wasm',
|
|
27
|
+
options?.draco?.decoderProfile
|
|
28
|
+
),
|
|
29
|
+
context
|
|
30
|
+
)
|
|
31
|
+
} as const satisfies LoaderWithParser<DracoMesh | ArrowTable, never, DracoLoaderOptions>;
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
canEncodeWithWorker,
|
|
7
|
+
type WriterWithEncoder,
|
|
8
|
+
type WriterOptions
|
|
9
|
+
} from '@loaders.gl/core/loader-utils';
|
|
10
|
+
import type {Mesh, MeshArrowTable, TypedArray} from '@loaders.gl/core/schema';
|
|
11
|
+
import {convertTableToMesh} from '@loaders.gl/core/schema-utils';
|
|
12
|
+
import {extractLoadLibraryOptions, processOnWorkerInBatches} from '@loaders.gl/core/worker-utils';
|
|
13
|
+
import type {DracoMesh} from './lib/draco-types';
|
|
14
|
+
import type {DracoBuilderMesh, DracoBuildOptions, DracoEncodingResult} from './lib/draco-builder';
|
|
15
|
+
import DRACOBuilder from './lib/draco-builder';
|
|
16
|
+
import {loadDracoEncoderModule} from './lib/draco-module-loader';
|
|
17
|
+
import {VERSION} from './lib/utils/version';
|
|
18
|
+
import {DracoFormat} from './draco-format';
|
|
19
|
+
|
|
20
|
+
/** Legacy flat attribute map accepted by `DracoWriter`. */
|
|
21
|
+
export type DracoWriterAttributes = Record<string, TypedArray>;
|
|
22
|
+
|
|
23
|
+
/** Inputs accepted by `DracoWriter`. */
|
|
24
|
+
export type DracoWriterInput =
|
|
25
|
+
| DracoMesh
|
|
26
|
+
| Mesh
|
|
27
|
+
| MeshArrowTable
|
|
28
|
+
| DracoBuilderMesh
|
|
29
|
+
| DracoWriterAttributes;
|
|
30
|
+
|
|
31
|
+
/** Options for `DracoWriter`. */
|
|
32
|
+
export type DracoWriterOptions = WriterOptions & {
|
|
33
|
+
/** Draco-specific writer options. */
|
|
34
|
+
draco?: DracoBuildOptions;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/** Progress notification emitted after each geometry in a batch. */
|
|
38
|
+
export type DracoBatchProgress = {
|
|
39
|
+
/** Number of geometries completed. */
|
|
40
|
+
completed: number;
|
|
41
|
+
/** Total number of geometries in the batch. */
|
|
42
|
+
total: number;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/** Options for cancellable, progress-reporting batch encoding. */
|
|
46
|
+
export type DracoBatchOptions = DracoWriterOptions & {
|
|
47
|
+
/** Abort signal checked between native encoding operations. */
|
|
48
|
+
signal?: AbortSignal;
|
|
49
|
+
/** Called after each geometry is encoded. */
|
|
50
|
+
onProgress?: (progress: DracoBatchProgress) => void;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/** A batch of Draco-writable geometries. */
|
|
54
|
+
export type DracoWriterInputBatch = DracoWriterInput[];
|
|
55
|
+
|
|
56
|
+
const DEFAULT_DRACO_WRITER_OPTIONS = {
|
|
57
|
+
pointcloud: false, // Set to true if pointcloud (mode: 0, no indices)
|
|
58
|
+
attributeNameEntry: 'name'
|
|
59
|
+
// Draco Compression Parameters
|
|
60
|
+
// method: 'MESH_EDGEBREAKER_ENCODING', // Use draco defaults
|
|
61
|
+
// speed: [5, 5], // Use draco defaults
|
|
62
|
+
// quantization: { // Use draco defaults
|
|
63
|
+
// POSITION: 10
|
|
64
|
+
// }
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/** Worker-enabled exporter for Draco3D compressed geometries. */
|
|
68
|
+
export const DracoWriterWorker = {
|
|
69
|
+
...DracoFormat,
|
|
70
|
+
id: 'draco-writer',
|
|
71
|
+
name: 'Draco compressed geometry writer',
|
|
72
|
+
module: 'scene',
|
|
73
|
+
version: VERSION,
|
|
74
|
+
worker: true,
|
|
75
|
+
workerNode: 'draco-writer-worker-node.cjs',
|
|
76
|
+
/** Node test workers live with the Draco implementation. */
|
|
77
|
+
workerSourceNode: 'draco/workers/draco-writer-worker-node.ts',
|
|
78
|
+
options: {
|
|
79
|
+
draco: {}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Exporter for Draco3D compressed geometries
|
|
85
|
+
*/
|
|
86
|
+
export const DracoWriter = {
|
|
87
|
+
...DracoFormat,
|
|
88
|
+
name: 'DRACO',
|
|
89
|
+
version: VERSION,
|
|
90
|
+
options: {
|
|
91
|
+
draco: DEFAULT_DRACO_WRITER_OPTIONS
|
|
92
|
+
},
|
|
93
|
+
encode,
|
|
94
|
+
encodeInBatches
|
|
95
|
+
} as const satisfies WriterWithEncoder<DracoWriterInput, unknown, DracoWriterOptions>;
|
|
96
|
+
|
|
97
|
+
/** Encode Draco mesh category data. */
|
|
98
|
+
async function encode(
|
|
99
|
+
data: DracoWriterInput,
|
|
100
|
+
options: DracoWriterOptions = {}
|
|
101
|
+
): Promise<ArrayBuffer> {
|
|
102
|
+
return (await encodeDraco(data, options)).data;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Encodes Draco geometry and returns bytes together with native encoding diagnostics. */
|
|
106
|
+
export async function encodeDraco(
|
|
107
|
+
data: DracoWriterInput,
|
|
108
|
+
options: DracoWriterOptions = {}
|
|
109
|
+
): Promise<DracoEncodingResult> {
|
|
110
|
+
// Dynamically load draco
|
|
111
|
+
const {draco} = await loadDracoEncoderModule(extractLoadLibraryOptions(options));
|
|
112
|
+
const dracoBuilder = new DRACOBuilder(draco);
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
return dracoBuilder.encodeSyncWithReport(normalizeDracoMesh(data), options.draco);
|
|
116
|
+
} finally {
|
|
117
|
+
dracoBuilder.destroy();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Encodes multiple geometries while loading and initializing the Draco runtime once.
|
|
123
|
+
*
|
|
124
|
+
* The input geometries are processed sequentially to keep peak native memory bounded.
|
|
125
|
+
* Each result is independent and uses the same writer options.
|
|
126
|
+
*/
|
|
127
|
+
export async function encodeDracoBatch(
|
|
128
|
+
data: DracoWriterInput[],
|
|
129
|
+
options: DracoBatchOptions = {}
|
|
130
|
+
): Promise<DracoEncodingResult[]> {
|
|
131
|
+
throwIfAborted(options.signal);
|
|
132
|
+
const results: DracoEncodingResult[] = [];
|
|
133
|
+
let completed = 0;
|
|
134
|
+
for await (const result of encodeDracoInBatches([data], options)) {
|
|
135
|
+
results.push(result);
|
|
136
|
+
completed++;
|
|
137
|
+
options.onProgress?.({completed, total: data.length});
|
|
138
|
+
}
|
|
139
|
+
return results;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Encodes geometry batches while retaining one encoder runtime and one worker
|
|
144
|
+
* lease for the complete input iterator.
|
|
145
|
+
*
|
|
146
|
+
* Worker mode is selected with `worker: true` and the normal Draco writer
|
|
147
|
+
* worker options. Set `worker: false` to keep the operation local.
|
|
148
|
+
*/
|
|
149
|
+
export function encodeDracoInBatches(
|
|
150
|
+
data: AsyncIterable<DracoWriterInputBatch> | Iterable<DracoWriterInputBatch>,
|
|
151
|
+
options: DracoBatchOptions = {}
|
|
152
|
+
): AsyncIterable<DracoEncodingResult> {
|
|
153
|
+
const normalizedData = normalizeDracoInputBatches(data);
|
|
154
|
+
if (canEncodeWithWorker(DracoWriterWorker, options)) {
|
|
155
|
+
const {onProgress: _onProgress, ...workerOptions} = options;
|
|
156
|
+
return processOnWorkerInBatches<DracoBuilderMesh[], DracoEncodingResult>(
|
|
157
|
+
DracoWriterWorker,
|
|
158
|
+
normalizedData,
|
|
159
|
+
workerOptions
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
return encodeDracoInBatchesLocally(normalizedData, options);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** Encodes batches through the public writer's ArrayBuffer-only batch API. */
|
|
166
|
+
async function* encodeInBatches(
|
|
167
|
+
data: AsyncIterable<DracoWriterInput> | Iterable<DracoWriterInput>,
|
|
168
|
+
options: DracoBatchOptions = {}
|
|
169
|
+
): AsyncIterable<ArrayBuffer> {
|
|
170
|
+
const geometryBatches = (async function* () {
|
|
171
|
+
for await (const geometry of data) {
|
|
172
|
+
yield [geometry];
|
|
173
|
+
}
|
|
174
|
+
})();
|
|
175
|
+
for await (const result of encodeDracoInBatches(geometryBatches, options)) {
|
|
176
|
+
yield result.data;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** Worker-safe local implementation that initializes Draco exactly once. */
|
|
181
|
+
export async function* encodeDracoInBatchesLocally(
|
|
182
|
+
data: AsyncIterable<DracoBuilderMesh[]> | Iterable<DracoBuilderMesh[]>,
|
|
183
|
+
options: DracoBatchOptions = {}
|
|
184
|
+
): AsyncIterable<DracoEncodingResult> {
|
|
185
|
+
const {draco} = await loadDracoEncoderModule(extractLoadLibraryOptions(options));
|
|
186
|
+
const dracoBuilder = new DRACOBuilder(draco);
|
|
187
|
+
try {
|
|
188
|
+
for await (const batch of data) {
|
|
189
|
+
for (const geometry of batch) {
|
|
190
|
+
throwIfAborted(options.signal);
|
|
191
|
+
yield dracoBuilder.encodeSyncWithReport(geometry, options.draco);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
} finally {
|
|
195
|
+
dracoBuilder.destroy();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** Converts any accepted input batch into structured-clone-safe builder meshes. */
|
|
200
|
+
async function* normalizeDracoInputBatches(
|
|
201
|
+
data: AsyncIterable<DracoWriterInputBatch> | Iterable<DracoWriterInputBatch>
|
|
202
|
+
): AsyncIterable<DracoBuilderMesh[]> {
|
|
203
|
+
for await (const batch of data) {
|
|
204
|
+
yield batch.map(normalizeDracoMesh);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** Throws the signal's reason before starting or between native encodes. */
|
|
209
|
+
function throwIfAborted(signal: AbortSignal | undefined): void {
|
|
210
|
+
if (!signal?.aborted) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (signal.reason !== undefined) {
|
|
214
|
+
throw signal.reason;
|
|
215
|
+
}
|
|
216
|
+
const error = new Error('Draco batch encoding aborted');
|
|
217
|
+
error.name = 'AbortError';
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/** Returns Draco-writable mesh data without copying ordinary Mesh attributes. */
|
|
222
|
+
function normalizeDracoMesh(data: DracoWriterInput): DracoBuilderMesh {
|
|
223
|
+
if (isMeshArrowTable(data)) {
|
|
224
|
+
return convertTableToMesh(data);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
if (isDracoBuilderMesh(data)) {
|
|
228
|
+
return data;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const {indices, ...attributes} = data;
|
|
232
|
+
return {attributes, ...(indices ? {indices} : {})};
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/** Return true when the input is MeshArrowTable category data. */
|
|
236
|
+
function isMeshArrowTable(data: unknown): data is MeshArrowTable {
|
|
237
|
+
return (
|
|
238
|
+
typeof data === 'object' && data !== null && 'shape' in data && data.shape === 'arrow-table'
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Returns true when input uses the nested Mesh attribute representation. */
|
|
243
|
+
function isDracoBuilderMesh(data: DracoWriterInput): data is DracoBuilderMesh | Mesh | DracoMesh {
|
|
244
|
+
return (
|
|
245
|
+
typeof data === 'object' &&
|
|
246
|
+
data !== null &&
|
|
247
|
+
'attributes' in data &&
|
|
248
|
+
typeof data.attributes === 'object' &&
|
|
249
|
+
data.attributes !== null &&
|
|
250
|
+
!ArrayBuffer.isView(data.attributes)
|
|
251
|
+
);
|
|
252
|
+
}
|