@loaders.gl/scene 5.0.0-alpha.9 → 5.0.0-beta.1
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/GLTF-README.md +46 -0
- package/LICENSE +2 -30
- package/OBJ-README.md +28 -0
- package/README.md +5 -0
- package/THIRD-PARTY-NOTICES.md +23 -0
- package/bin/gltf/glbdump.js +8 -0
- package/dist/dist.dev.js +33820 -23
- package/dist/dist.min.js +38 -3
- package/dist/gltf/bundled.cjs +34 -0
- package/dist/gltf/bundled.cjs.map +7 -0
- package/dist/gltf/bundled.d.ts +5 -0
- package/dist/gltf/bundled.d.ts.map +1 -0
- package/dist/gltf/bundled.js +6 -0
- package/dist/gltf/bundled.js.map +1 -0
- package/dist/gltf/glb-loader-types.cjs +59 -0
- package/dist/gltf/glb-loader-types.cjs.map +7 -0
- package/dist/gltf/glb-loader-types.d.ts +58 -0
- package/dist/gltf/glb-loader-types.d.ts.map +1 -0
- package/dist/gltf/glb-loader-types.js +24 -0
- package/dist/gltf/glb-loader-types.js.map +1 -0
- package/dist/gltf/glb-loader.cjs +46 -0
- package/dist/gltf/glb-loader.cjs.map +7 -0
- package/dist/gltf/glb-loader.d.ts +42 -0
- package/dist/gltf/glb-loader.d.ts.map +1 -0
- package/dist/gltf/glb-loader.js +24 -0
- package/dist/gltf/glb-loader.js.map +1 -0
- package/dist/gltf/glb-writer.cjs +51 -0
- package/dist/gltf/glb-writer.cjs.map +7 -0
- package/dist/gltf/glb-writer.d.ts +30 -0
- package/dist/gltf/glb-writer.d.ts.map +1 -0
- package/dist/gltf/glb-writer.js +31 -0
- package/dist/gltf/glb-writer.js.map +1 -0
- package/dist/gltf/gltf-1.schema.json +2075 -0
- package/dist/gltf/gltf-2.1.schema.json +1786 -0
- package/dist/gltf/gltf-2.schema.json +1786 -0
- package/dist/gltf/gltf-all.schema.json +5654 -0
- package/dist/gltf/gltf-format.cjs +55 -0
- package/dist/gltf/gltf-format.cjs.map +7 -0
- package/dist/gltf/gltf-format.d.ts +26 -0
- package/dist/gltf/gltf-format.d.ts.map +1 -0
- package/dist/gltf/gltf-format.js +29 -0
- package/dist/gltf/gltf-format.js.map +1 -0
- package/dist/gltf/gltf-loader-types.cjs +71 -0
- package/dist/gltf/gltf-loader-types.cjs.map +7 -0
- package/dist/gltf/gltf-loader-types.d.ts +71 -0
- package/dist/gltf/gltf-loader-types.d.ts.map +1 -0
- package/dist/gltf/gltf-loader-types.js +30 -0
- package/dist/gltf/gltf-loader-types.js.map +1 -0
- package/dist/gltf/gltf-loader.cjs +46 -0
- package/dist/gltf/gltf-loader.cjs.map +7 -0
- package/dist/gltf/gltf-loader.d.ts +45 -0
- package/dist/gltf/gltf-loader.d.ts.map +1 -0
- package/dist/gltf/gltf-loader.js +22 -0
- package/dist/gltf/gltf-loader.js.map +1 -0
- package/dist/gltf/gltf-source.cjs +236 -0
- package/dist/gltf/gltf-source.cjs.map +7 -0
- package/dist/gltf/gltf-source.d.ts +59 -0
- package/dist/gltf/gltf-source.d.ts.map +1 -0
- package/dist/gltf/gltf-source.js +230 -0
- package/dist/gltf/gltf-source.js.map +1 -0
- package/dist/gltf/gltf-writer.cjs +67 -0
- package/dist/gltf/gltf-writer.cjs.map +7 -0
- package/dist/gltf/gltf-writer.d.ts +14 -0
- package/dist/gltf/gltf-writer.d.ts.map +1 -0
- package/dist/gltf/gltf-writer.js +44 -0
- package/dist/gltf/gltf-writer.js.map +1 -0
- package/dist/gltf/gltf.schema.json +5654 -0
- package/dist/gltf/index.cjs +225 -0
- package/dist/gltf/index.cjs.map +7 -0
- package/dist/gltf/index.d.ts +46 -0
- package/dist/gltf/index.d.ts.map +1 -0
- package/dist/gltf/index.js +39 -0
- package/dist/gltf/index.js.map +1 -0
- package/dist/gltf/lib/api/append-gltf-v1-buffer-data.cjs +68 -0
- package/dist/gltf/lib/api/append-gltf-v1-buffer-data.cjs.map +7 -0
- package/dist/gltf/lib/api/append-gltf-v1-buffer-data.d.ts +17 -0
- package/dist/gltf/lib/api/append-gltf-v1-buffer-data.d.ts.map +1 -0
- package/dist/gltf/lib/api/append-gltf-v1-buffer-data.js +45 -0
- package/dist/gltf/lib/api/append-gltf-v1-buffer-data.js.map +1 -0
- package/dist/gltf/lib/api/bake-gltf-v1-bind-shapes.cjs +133 -0
- package/dist/gltf/lib/api/bake-gltf-v1-bind-shapes.cjs.map +7 -0
- package/dist/gltf/lib/api/bake-gltf-v1-bind-shapes.d.ts +8 -0
- package/dist/gltf/lib/api/bake-gltf-v1-bind-shapes.d.ts.map +1 -0
- package/dist/gltf/lib/api/bake-gltf-v1-bind-shapes.js +138 -0
- package/dist/gltf/lib/api/bake-gltf-v1-bind-shapes.js.map +1 -0
- package/dist/gltf/lib/api/clean-gltf-v1-fields.cjs +93 -0
- package/dist/gltf/lib/api/clean-gltf-v1-fields.cjs.map +7 -0
- package/dist/gltf/lib/api/clean-gltf-v1-fields.d.ts +6 -0
- package/dist/gltf/lib/api/clean-gltf-v1-fields.d.ts.map +1 -0
- package/dist/gltf/lib/api/clean-gltf-v1-fields.js +87 -0
- package/dist/gltf/lib/api/clean-gltf-v1-fields.js.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-accessors.cjs +128 -0
- package/dist/gltf/lib/api/convert-gltf-v1-accessors.cjs.map +7 -0
- package/dist/gltf/lib/api/convert-gltf-v1-accessors.d.ts +8 -0
- package/dist/gltf/lib/api/convert-gltf-v1-accessors.d.ts.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-accessors.js +147 -0
- package/dist/gltf/lib/api/convert-gltf-v1-accessors.js.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-animations.cjs +81 -0
- package/dist/gltf/lib/api/convert-gltf-v1-animations.cjs.map +7 -0
- package/dist/gltf/lib/api/convert-gltf-v1-animations.d.ts +4 -0
- package/dist/gltf/lib/api/convert-gltf-v1-animations.d.ts.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-animations.js +61 -0
- package/dist/gltf/lib/api/convert-gltf-v1-animations.js.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-materials.cjs +265 -0
- package/dist/gltf/lib/api/convert-gltf-v1-materials.cjs.map +7 -0
- package/dist/gltf/lib/api/convert-gltf-v1-materials.d.ts +6 -0
- package/dist/gltf/lib/api/convert-gltf-v1-materials.d.ts.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-materials.js +266 -0
- package/dist/gltf/lib/api/convert-gltf-v1-materials.js.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-matrix-nodes.cjs +98 -0
- package/dist/gltf/lib/api/convert-gltf-v1-matrix-nodes.cjs.map +7 -0
- package/dist/gltf/lib/api/convert-gltf-v1-matrix-nodes.d.ts +4 -0
- package/dist/gltf/lib/api/convert-gltf-v1-matrix-nodes.d.ts.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-matrix-nodes.js +86 -0
- package/dist/gltf/lib/api/convert-gltf-v1-matrix-nodes.js.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skin-scenes.cjs +87 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skin-scenes.cjs.map +7 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skin-scenes.d.ts +4 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skin-scenes.d.ts.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skin-scenes.js +72 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skin-scenes.js.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skins.cjs +173 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skins.cjs.map +7 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skins.d.ts +9 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skins.d.ts.map +1 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skins.js +161 -0
- package/dist/gltf/lib/api/convert-gltf-v1-skins.js.map +1 -0
- package/dist/gltf/lib/api/gltf-accessors.cjs +83 -0
- package/dist/gltf/lib/api/gltf-accessors.cjs.map +7 -0
- package/dist/gltf/lib/api/gltf-accessors.d.ts +22 -0
- package/dist/gltf/lib/api/gltf-accessors.d.ts.map +1 -0
- package/dist/gltf/lib/api/gltf-accessors.js +66 -0
- package/dist/gltf/lib/api/gltf-accessors.js.map +1 -0
- package/dist/gltf/lib/api/gltf-culling.cjs +73 -0
- package/dist/gltf/lib/api/gltf-culling.cjs.map +7 -0
- package/dist/gltf/lib/api/gltf-culling.d.ts +12 -0
- package/dist/gltf/lib/api/gltf-culling.d.ts.map +1 -0
- package/dist/gltf/lib/api/gltf-culling.js +55 -0
- package/dist/gltf/lib/api/gltf-culling.js.map +1 -0
- package/dist/gltf/lib/api/gltf-extension-data.cjs +102 -0
- package/dist/gltf/lib/api/gltf-extension-data.cjs.map +7 -0
- package/dist/gltf/lib/api/gltf-extension-data.d.ts +38 -0
- package/dist/gltf/lib/api/gltf-extension-data.d.ts.map +1 -0
- package/dist/gltf/lib/api/gltf-extension-data.js +75 -0
- package/dist/gltf/lib/api/gltf-extension-data.js.map +1 -0
- package/dist/gltf/lib/api/gltf-extensions.cjs +123 -0
- package/dist/gltf/lib/api/gltf-extensions.cjs.map +7 -0
- package/dist/gltf/lib/api/gltf-extensions.d.ts +33 -0
- package/dist/gltf/lib/api/gltf-extensions.d.ts.map +1 -0
- package/dist/gltf/lib/api/gltf-extensions.js +100 -0
- package/dist/gltf/lib/api/gltf-extensions.js.map +1 -0
- package/dist/gltf/lib/api/gltf-iterator.cjs +1001 -0
- package/dist/gltf/lib/api/gltf-iterator.cjs.map +7 -0
- package/dist/gltf/lib/api/gltf-iterator.d.ts +407 -0
- package/dist/gltf/lib/api/gltf-iterator.d.ts.map +1 -0
- package/dist/gltf/lib/api/gltf-iterator.js +940 -0
- package/dist/gltf/lib/api/gltf-iterator.js.map +1 -0
- package/dist/gltf/lib/api/gltf-mesh-arrow.cjs +269 -0
- package/dist/gltf/lib/api/gltf-mesh-arrow.cjs.map +7 -0
- package/dist/gltf/lib/api/gltf-mesh-arrow.d.ts +53 -0
- package/dist/gltf/lib/api/gltf-mesh-arrow.d.ts.map +1 -0
- package/dist/gltf/lib/api/gltf-mesh-arrow.js +247 -0
- package/dist/gltf/lib/api/gltf-mesh-arrow.js.map +1 -0
- package/dist/gltf/lib/api/gltf-scenegraph.cjs +615 -0
- package/dist/gltf/lib/api/gltf-scenegraph.cjs.map +7 -0
- package/dist/gltf/lib/api/gltf-scenegraph.d.ts +183 -0
- package/dist/gltf/lib/api/gltf-scenegraph.d.ts.map +1 -0
- package/dist/gltf/lib/api/gltf-scenegraph.js +624 -0
- package/dist/gltf/lib/api/gltf-scenegraph.js.map +1 -0
- package/dist/gltf/lib/api/normalize-gltf-v1.cjs +479 -0
- package/dist/gltf/lib/api/normalize-gltf-v1.cjs.map +7 -0
- package/dist/gltf/lib/api/normalize-gltf-v1.d.ts +37 -0
- package/dist/gltf/lib/api/normalize-gltf-v1.d.ts.map +1 -0
- package/dist/gltf/lib/api/normalize-gltf-v1.js +461 -0
- package/dist/gltf/lib/api/normalize-gltf-v1.js.map +1 -0
- package/dist/gltf/lib/api/repack-gltf-v1-accessors.cjs +405 -0
- package/dist/gltf/lib/api/repack-gltf-v1-accessors.cjs.map +7 -0
- package/dist/gltf/lib/api/repack-gltf-v1-accessors.d.ts +50 -0
- package/dist/gltf/lib/api/repack-gltf-v1-accessors.d.ts.map +1 -0
- package/dist/gltf/lib/api/repack-gltf-v1-accessors.js +448 -0
- package/dist/gltf/lib/api/repack-gltf-v1-accessors.js.map +1 -0
- package/dist/gltf/lib/api/validate-gltf-v1-buffers.cjs +110 -0
- package/dist/gltf/lib/api/validate-gltf-v1-buffers.cjs.map +7 -0
- package/dist/gltf/lib/api/validate-gltf-v1-buffers.d.ts +4 -0
- package/dist/gltf/lib/api/validate-gltf-v1-buffers.d.ts.map +1 -0
- package/dist/gltf/lib/api/validate-gltf-v1-buffers.js +111 -0
- package/dist/gltf/lib/api/validate-gltf-v1-buffers.js.map +1 -0
- package/dist/gltf/lib/api/validate-gltf-v1-cameras.cjs +41 -0
- package/dist/gltf/lib/api/validate-gltf-v1-cameras.cjs.map +7 -0
- package/dist/gltf/lib/api/validate-gltf-v1-cameras.d.ts +4 -0
- package/dist/gltf/lib/api/validate-gltf-v1-cameras.d.ts.map +1 -0
- package/dist/gltf/lib/api/validate-gltf-v1-cameras.js +34 -0
- package/dist/gltf/lib/api/validate-gltf-v1-cameras.js.map +1 -0
- package/dist/gltf/lib/api/validate-gltf-v1-geometry.cjs +121 -0
- package/dist/gltf/lib/api/validate-gltf-v1-geometry.cjs.map +7 -0
- package/dist/gltf/lib/api/validate-gltf-v1-geometry.d.ts +5 -0
- package/dist/gltf/lib/api/validate-gltf-v1-geometry.d.ts.map +1 -0
- package/dist/gltf/lib/api/validate-gltf-v1-geometry.js +118 -0
- package/dist/gltf/lib/api/validate-gltf-v1-geometry.js.map +1 -0
- package/dist/gltf/lib/api/validate-gltf-v1-payloads.cjs +265 -0
- package/dist/gltf/lib/api/validate-gltf-v1-payloads.cjs.map +7 -0
- package/dist/gltf/lib/api/validate-gltf-v1-payloads.d.ts +4 -0
- package/dist/gltf/lib/api/validate-gltf-v1-payloads.d.ts.map +1 -0
- package/dist/gltf/lib/api/validate-gltf-v1-payloads.js +268 -0
- package/dist/gltf/lib/api/validate-gltf-v1-payloads.js.map +1 -0
- package/dist/gltf/lib/encoders/encode-glb.cjs +147 -0
- package/dist/gltf/lib/encoders/encode-glb.cjs.map +7 -0
- package/dist/gltf/lib/encoders/encode-glb.d.ts +21 -0
- package/dist/gltf/lib/encoders/encode-glb.d.ts.map +1 -0
- package/dist/gltf/lib/encoders/encode-glb.js +142 -0
- package/dist/gltf/lib/encoders/encode-glb.js.map +1 -0
- package/dist/gltf/lib/encoders/encode-gltf-draco.cjs +202 -0
- package/dist/gltf/lib/encoders/encode-gltf-draco.cjs.map +7 -0
- package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts +20 -0
- package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts.map +1 -0
- package/dist/gltf/lib/encoders/encode-gltf-draco.js +187 -0
- package/dist/gltf/lib/encoders/encode-gltf-draco.js.map +1 -0
- package/dist/gltf/lib/encoders/encode-gltf.cjs +40 -0
- package/dist/gltf/lib/encoders/encode-gltf.cjs.map +7 -0
- package/dist/gltf/lib/encoders/encode-gltf.d.ts +22 -0
- package/dist/gltf/lib/encoders/encode-gltf.d.ts.map +1 -0
- package/dist/gltf/lib/encoders/encode-gltf.js +32 -0
- package/dist/gltf/lib/encoders/encode-gltf.js.map +1 -0
- package/dist/gltf/lib/extensions/EXT_mesh_features.cjs +175 -0
- package/dist/gltf/lib/extensions/EXT_mesh_features.cjs.map +7 -0
- package/dist/gltf/lib/extensions/EXT_mesh_features.d.ts +22 -0
- package/dist/gltf/lib/extensions/EXT_mesh_features.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/EXT_mesh_features.js +189 -0
- package/dist/gltf/lib/extensions/EXT_mesh_features.js.map +1 -0
- package/dist/gltf/lib/extensions/EXT_mesh_polygon.cjs +149 -0
- package/dist/gltf/lib/extensions/EXT_mesh_polygon.cjs.map +7 -0
- package/dist/gltf/lib/extensions/EXT_mesh_polygon.d.ts +7 -0
- package/dist/gltf/lib/extensions/EXT_mesh_polygon.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/EXT_mesh_polygon.js +125 -0
- package/dist/gltf/lib/extensions/EXT_mesh_polygon.js.map +1 -0
- package/dist/gltf/lib/extensions/EXT_meshopt_compression.cjs +37 -0
- package/dist/gltf/lib/extensions/EXT_meshopt_compression.cjs.map +7 -0
- package/dist/gltf/lib/extensions/EXT_meshopt_compression.d.ts +25 -0
- package/dist/gltf/lib/extensions/EXT_meshopt_compression.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/EXT_meshopt_compression.js +29 -0
- package/dist/gltf/lib/extensions/EXT_meshopt_compression.js.map +1 -0
- package/dist/gltf/lib/extensions/EXT_primitive_voxels.cjs +87 -0
- package/dist/gltf/lib/extensions/EXT_primitive_voxels.cjs.map +7 -0
- package/dist/gltf/lib/extensions/EXT_primitive_voxels.d.ts +10 -0
- package/dist/gltf/lib/extensions/EXT_primitive_voxels.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/EXT_primitive_voxels.js +57 -0
- package/dist/gltf/lib/extensions/EXT_primitive_voxels.js.map +1 -0
- package/dist/gltf/lib/extensions/EXT_structural_metadata.cjs +684 -0
- package/dist/gltf/lib/extensions/EXT_structural_metadata.cjs.map +7 -0
- package/dist/gltf/lib/extensions/EXT_structural_metadata.d.ts +26 -0
- package/dist/gltf/lib/extensions/EXT_structural_metadata.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/EXT_structural_metadata.js +786 -0
- package/dist/gltf/lib/extensions/EXT_structural_metadata.js.map +1 -0
- package/dist/gltf/lib/extensions/EXT_texture_avif.cjs +56 -0
- package/dist/gltf/lib/extensions/EXT_texture_avif.cjs.map +7 -0
- package/dist/gltf/lib/extensions/EXT_texture_avif.d.ts +15 -0
- package/dist/gltf/lib/extensions/EXT_texture_avif.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/EXT_texture_avif.js +40 -0
- package/dist/gltf/lib/extensions/EXT_texture_avif.js.map +1 -0
- package/dist/gltf/lib/extensions/EXT_texture_webp.cjs +53 -0
- package/dist/gltf/lib/extensions/EXT_texture_webp.cjs.map +7 -0
- package/dist/gltf/lib/extensions/EXT_texture_webp.d.ts +10 -0
- package/dist/gltf/lib/extensions/EXT_texture_webp.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/EXT_texture_webp.js +32 -0
- package/dist/gltf/lib/extensions/EXT_texture_webp.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_audio_emitter.cjs +128 -0
- package/dist/gltf/lib/extensions/KHR_audio_emitter.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_audio_emitter.d.ts +8 -0
- package/dist/gltf/lib/extensions/KHR_audio_emitter.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_audio_emitter.js +121 -0
- package/dist/gltf/lib/extensions/KHR_audio_emitter.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_binary_gltf.cjs +53 -0
- package/dist/gltf/lib/extensions/KHR_binary_gltf.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_binary_gltf.d.ts +6 -0
- package/dist/gltf/lib/extensions/KHR_binary_gltf.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_binary_gltf.js +40 -0
- package/dist/gltf/lib/extensions/KHR_binary_gltf.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs +131 -0
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.d.ts +8 -0
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js +107 -0
- package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.cjs +209 -0
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.d.ts +13 -0
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.js +160 -0
- package/dist/gltf/lib/extensions/KHR_gaussian_splatting.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_mesh_primitive_restart.cjs +110 -0
- package/dist/gltf/lib/extensions/KHR_mesh_primitive_restart.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_mesh_primitive_restart.d.ts +10 -0
- package/dist/gltf/lib/extensions/KHR_mesh_primitive_restart.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_mesh_primitive_restart.js +87 -0
- package/dist/gltf/lib/extensions/KHR_mesh_primitive_restart.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_meshopt_compression.cjs +37 -0
- package/dist/gltf/lib/extensions/KHR_meshopt_compression.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_meshopt_compression.d.ts +24 -0
- package/dist/gltf/lib/extensions/KHR_meshopt_compression.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_meshopt_compression.js +28 -0
- package/dist/gltf/lib/extensions/KHR_meshopt_compression.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_texture_basisu.cjs +47 -0
- package/dist/gltf/lib/extensions/KHR_texture_basisu.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_texture_basisu.d.ts +10 -0
- package/dist/gltf/lib/extensions/KHR_texture_basisu.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_texture_basisu.js +26 -0
- package/dist/gltf/lib/extensions/KHR_texture_basisu.js.map +1 -0
- package/dist/gltf/lib/extensions/KHR_texture_transform.cjs +258 -0
- package/dist/gltf/lib/extensions/KHR_texture_transform.cjs.map +7 -0
- package/dist/gltf/lib/extensions/KHR_texture_transform.d.ts +10 -0
- package/dist/gltf/lib/extensions/KHR_texture_transform.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/KHR_texture_transform.js +271 -0
- package/dist/gltf/lib/extensions/KHR_texture_transform.js.map +1 -0
- package/dist/gltf/lib/extensions/MPEG_audio_spatial.cjs +70 -0
- package/dist/gltf/lib/extensions/MPEG_audio_spatial.cjs.map +7 -0
- package/dist/gltf/lib/extensions/MPEG_audio_spatial.d.ts +10 -0
- package/dist/gltf/lib/extensions/MPEG_audio_spatial.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/MPEG_audio_spatial.js +45 -0
- package/dist/gltf/lib/extensions/MPEG_audio_spatial.js.map +1 -0
- package/dist/gltf/lib/extensions/deprecated/EXT_feature_metadata.cjs +276 -0
- package/dist/gltf/lib/extensions/deprecated/EXT_feature_metadata.cjs.map +7 -0
- package/dist/gltf/lib/extensions/deprecated/EXT_feature_metadata.d.ts +5 -0
- package/dist/gltf/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/deprecated/EXT_feature_metadata.js +306 -0
- package/dist/gltf/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_lights_punctual.cjs +71 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_lights_punctual.cjs.map +7 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_lights_punctual.d.ts +5 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_lights_punctual.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_lights_punctual.js +54 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_materials_unlit.cjs +62 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_materials_unlit.cjs.map +7 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_materials_unlit.d.ts +9 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_materials_unlit.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_materials_unlit.js +38 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_techniques_webgl.cjs +99 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_techniques_webgl.cjs.map +7 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_techniques_webgl.d.ts +5 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_techniques_webgl.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_techniques_webgl.js +76 -0
- package/dist/gltf/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
- package/dist/gltf/lib/extensions/meshopt-compression.cjs +114 -0
- package/dist/gltf/lib/extensions/meshopt-compression.cjs.map +7 -0
- package/dist/gltf/lib/extensions/meshopt-compression.d.ts +48 -0
- package/dist/gltf/lib/extensions/meshopt-compression.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/meshopt-compression.js +123 -0
- package/dist/gltf/lib/extensions/meshopt-compression.js.map +1 -0
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.cjs +280 -0
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.cjs.map +7 -0
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.d.ts +84 -0
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.d.ts.map +1 -0
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.js +358 -0
- package/dist/gltf/lib/extensions/utils/3d-tiles-utils.js.map +1 -0
- package/dist/gltf/lib/gltf-utils/get-typed-array.cjs +189 -0
- package/dist/gltf/lib/gltf-utils/get-typed-array.cjs.map +7 -0
- package/dist/gltf/lib/gltf-utils/get-typed-array.d.ts +13 -0
- package/dist/gltf/lib/gltf-utils/get-typed-array.d.ts.map +1 -0
- package/dist/gltf/lib/gltf-utils/get-typed-array.js +175 -0
- package/dist/gltf/lib/gltf-utils/get-typed-array.js.map +1 -0
- package/dist/gltf/lib/gltf-utils/gltf-attribute-utils.cjs +90 -0
- package/dist/gltf/lib/gltf-utils/gltf-attribute-utils.cjs.map +7 -0
- package/dist/gltf/lib/gltf-utils/gltf-attribute-utils.d.ts +6 -0
- package/dist/gltf/lib/gltf-utils/gltf-attribute-utils.d.ts.map +1 -0
- package/dist/gltf/lib/gltf-utils/gltf-attribute-utils.js +72 -0
- package/dist/gltf/lib/gltf-utils/gltf-attribute-utils.js.map +1 -0
- package/dist/gltf/lib/gltf-utils/gltf-constants.cjs +90 -0
- package/dist/gltf/lib/gltf-utils/gltf-constants.cjs.map +7 -0
- package/dist/gltf/lib/gltf-utils/gltf-constants.d.ts +26 -0
- package/dist/gltf/lib/gltf-utils/gltf-constants.d.ts.map +1 -0
- package/dist/gltf/lib/gltf-utils/gltf-constants.js +46 -0
- package/dist/gltf/lib/gltf-utils/gltf-constants.js.map +1 -0
- package/dist/gltf/lib/gltf-utils/gltf-utils.cjs +157 -0
- package/dist/gltf/lib/gltf-utils/gltf-utils.cjs.map +7 -0
- package/dist/gltf/lib/gltf-utils/gltf-utils.d.ts +17 -0
- package/dist/gltf/lib/gltf-utils/gltf-utils.d.ts.map +1 -0
- package/dist/gltf/lib/gltf-utils/gltf-utils.js +135 -0
- package/dist/gltf/lib/gltf-utils/gltf-utils.js.map +1 -0
- package/dist/gltf/lib/gltf-utils/resolve-gltf-file.cjs +91 -0
- package/dist/gltf/lib/gltf-utils/resolve-gltf-file.cjs.map +7 -0
- package/dist/gltf/lib/gltf-utils/resolve-gltf-file.d.ts +21 -0
- package/dist/gltf/lib/gltf-utils/resolve-gltf-file.d.ts.map +1 -0
- package/dist/gltf/lib/gltf-utils/resolve-gltf-file.js +77 -0
- package/dist/gltf/lib/gltf-utils/resolve-gltf-file.js.map +1 -0
- package/dist/gltf/lib/gltf-utils/resolve-url.cjs +61 -0
- package/dist/gltf/lib/gltf-utils/resolve-url.cjs.map +7 -0
- package/dist/gltf/lib/gltf-utils/resolve-url.d.ts +10 -0
- package/dist/gltf/lib/gltf-utils/resolve-url.d.ts.map +1 -0
- package/dist/gltf/lib/gltf-utils/resolve-url.js +43 -0
- package/dist/gltf/lib/gltf-utils/resolve-url.js.map +1 -0
- package/dist/gltf/lib/parsers/parse-glb.cjs +185 -0
- package/dist/gltf/lib/parsers/parse-glb.cjs.map +7 -0
- package/dist/gltf/lib/parsers/parse-glb.d.ts +20 -0
- package/dist/gltf/lib/parsers/parse-glb.d.ts.map +1 -0
- package/dist/gltf/lib/parsers/parse-glb.js +216 -0
- package/dist/gltf/lib/parsers/parse-glb.js.map +1 -0
- package/dist/gltf/lib/parsers/parse-gltf.cjs +365 -0
- package/dist/gltf/lib/parsers/parse-gltf.cjs.map +7 -0
- package/dist/gltf/lib/parsers/parse-gltf.d.ts +43 -0
- package/dist/gltf/lib/parsers/parse-gltf.d.ts.map +1 -0
- package/dist/gltf/lib/parsers/parse-gltf.js +372 -0
- package/dist/gltf/lib/parsers/parse-gltf.js.map +1 -0
- package/dist/gltf/lib/types/glb-types.cjs +19 -0
- package/dist/gltf/lib/types/glb-types.cjs.map +7 -0
- package/dist/gltf/lib/types/glb-types.d.ts +35 -0
- package/dist/gltf/lib/types/glb-types.d.ts.map +1 -0
- package/dist/gltf/lib/types/glb-types.js +5 -0
- package/dist/gltf/lib/types/glb-types.js.map +1 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.cjs +123 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.d.ts +110 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.js +87 -0
- package/dist/gltf/lib/types/gltf-additional-extension-schemas.js.map +1 -0
- package/dist/gltf/lib/types/gltf-audio-extension-schemas.cjs +189 -0
- package/dist/gltf/lib/types/gltf-audio-extension-schemas.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-audio-extension-schemas.d.ts +192 -0
- package/dist/gltf/lib/types/gltf-audio-extension-schemas.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-audio-extension-schemas.js +154 -0
- package/dist/gltf/lib/types/gltf-audio-extension-schemas.js.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-feature-metadata-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-ext-feature-metadata-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-ext-feature-metadata-schema.d.ts +421 -0
- package/dist/gltf/lib/types/gltf-ext-feature-metadata-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-feature-metadata-schema.js +5 -0
- package/dist/gltf/lib/types/gltf-ext-feature-metadata-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.d.ts +39 -0
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.js +5 -0
- package/dist/gltf/lib/types/gltf-ext-gaussian-splatting-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-mesh-features-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-ext-mesh-features-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-ext-mesh-features-schema.d.ts +49 -0
- package/dist/gltf/lib/types/gltf-ext-mesh-features-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-mesh-features-schema.js +5 -0
- package/dist/gltf/lib/types/gltf-ext-mesh-features-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-structural-metadata-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-ext-structural-metadata-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-ext-structural-metadata-schema.d.ts +334 -0
- package/dist/gltf/lib/types/gltf-ext-structural-metadata-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-structural-metadata-schema.js +5 -0
- package/dist/gltf/lib/types/gltf-ext-structural-metadata-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-vector-voxel-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-ext-vector-voxel-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-ext-vector-voxel-schema.d.ts +42 -0
- package/dist/gltf/lib/types/gltf-ext-vector-voxel-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-ext-vector-voxel-schema.js +5 -0
- package/dist/gltf/lib/types/gltf-ext-vector-voxel-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-extension-schemas.cjs +83 -0
- package/dist/gltf/lib/types/gltf-extension-schemas.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-extension-schemas.d.ts +229 -0
- package/dist/gltf/lib/types/gltf-extension-schemas.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-extension-schemas.js +53 -0
- package/dist/gltf/lib/types/gltf-extension-schemas.js.map +1 -0
- package/dist/gltf/lib/types/gltf-interactivity.cjs +34 -0
- package/dist/gltf/lib/types/gltf-interactivity.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-interactivity.d.ts +131 -0
- package/dist/gltf/lib/types/gltf-interactivity.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-interactivity.js +13 -0
- package/dist/gltf/lib/types/gltf-interactivity.js.map +1 -0
- package/dist/gltf/lib/types/gltf-json-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-json-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-json-schema.d.ts +841 -0
- package/dist/gltf/lib/types/gltf-json-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-json-schema.js +3 -0
- package/dist/gltf/lib/types/gltf-json-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-khr-audio-emitter-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-khr-audio-emitter-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-khr-audio-emitter-schema.d.ts +46 -0
- package/dist/gltf/lib/types/gltf-khr-audio-emitter-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-khr-audio-emitter-schema.js +5 -0
- package/dist/gltf/lib/types/gltf-khr-audio-emitter-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-mpeg-audio-spatial-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-mpeg-audio-spatial-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-mpeg-audio-spatial-schema.d.ts +20 -0
- package/dist/gltf/lib/types/gltf-mpeg-audio-spatial-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-mpeg-audio-spatial-schema.js +5 -0
- package/dist/gltf/lib/types/gltf-mpeg-audio-spatial-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-official-json-schemas.cjs +17840 -0
- package/dist/gltf/lib/types/gltf-official-json-schemas.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-official-json-schemas.d.ts +14 -0
- package/dist/gltf/lib/types/gltf-official-json-schemas.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-official-json-schemas.js +17751 -0
- package/dist/gltf/lib/types/gltf-official-json-schemas.js.map +1 -0
- package/dist/gltf/lib/types/gltf-shape-schema.cjs +19 -0
- package/dist/gltf/lib/types/gltf-shape-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-shape-schema.d.ts +49 -0
- package/dist/gltf/lib/types/gltf-shape-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-shape-schema.js +5 -0
- package/dist/gltf/lib/types/gltf-shape-schema.js.map +1 -0
- package/dist/gltf/lib/types/gltf-types.cjs +19 -0
- package/dist/gltf/lib/types/gltf-types.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-types.d.ts +53 -0
- package/dist/gltf/lib/types/gltf-types.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-types.js +5 -0
- package/dist/gltf/lib/types/gltf-types.js.map +1 -0
- package/dist/gltf/lib/types/gltf-vector-topology.cjs +19 -0
- package/dist/gltf/lib/types/gltf-vector-topology.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-vector-topology.d.ts +56 -0
- package/dist/gltf/lib/types/gltf-vector-topology.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-vector-topology.js +5 -0
- package/dist/gltf/lib/types/gltf-vector-topology.js.map +1 -0
- package/dist/gltf/lib/types/gltf-version-zod-schemas.cjs +423 -0
- package/dist/gltf/lib/types/gltf-version-zod-schemas.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-version-zod-schemas.d.ts +1129 -0
- package/dist/gltf/lib/types/gltf-version-zod-schemas.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-version-zod-schemas.js +333 -0
- package/dist/gltf/lib/types/gltf-version-zod-schemas.js.map +1 -0
- package/dist/gltf/lib/types/gltf-zod-schema.cjs +462 -0
- package/dist/gltf/lib/types/gltf-zod-schema.cjs.map +7 -0
- package/dist/gltf/lib/types/gltf-zod-schema.d.ts +1595 -0
- package/dist/gltf/lib/types/gltf-zod-schema.d.ts.map +1 -0
- package/dist/gltf/lib/types/gltf-zod-schema.js +497 -0
- package/dist/gltf/lib/types/gltf-zod-schema.js.map +1 -0
- package/dist/gltf/lib/utils/assert.cjs +35 -0
- package/dist/gltf/lib/utils/assert.cjs.map +7 -0
- package/dist/gltf/lib/utils/assert.d.ts +2 -0
- package/dist/gltf/lib/utils/assert.d.ts.map +1 -0
- package/dist/gltf/lib/utils/assert.js +12 -0
- package/dist/gltf/lib/utils/assert.js.map +1 -0
- package/dist/gltf/lib/utils/version.cjs +31 -0
- package/dist/gltf/lib/utils/version.cjs.map +7 -0
- package/dist/gltf/lib/utils/version.d.ts +2 -0
- package/dist/gltf/lib/utils/version.d.ts.map +1 -0
- package/dist/gltf/lib/utils/version.js +8 -0
- package/dist/gltf/lib/utils/version.js.map +1 -0
- package/dist/gltf/libs/README.md +12 -0
- package/dist/gltf/libs/meshopt-decoder.d.mts +15 -0
- package/dist/gltf/libs/meshopt-decoder.mjs +196 -0
- package/dist/gltf/libs/meshoptimizer-LICENSE.md +21 -0
- package/dist/gltf/mesh-arrow.cjs +31 -0
- package/dist/gltf/mesh-arrow.cjs.map +7 -0
- package/dist/gltf/mesh-arrow.d.ts +2 -0
- package/dist/gltf/mesh-arrow.d.ts.map +1 -0
- package/dist/gltf/mesh-arrow.js +5 -0
- package/dist/gltf/mesh-arrow.js.map +1 -0
- package/dist/gltf/meshopt/meshopt-decoder.cjs +93 -0
- package/dist/gltf/meshopt/meshopt-decoder.cjs.map +7 -0
- package/dist/gltf/meshopt/meshopt-decoder.d.ts +78 -0
- package/dist/gltf/meshopt/meshopt-decoder.d.ts.map +1 -0
- package/dist/gltf/meshopt/meshopt-decoder.js +111 -0
- package/dist/gltf/meshopt/meshopt-decoder.js.map +1 -0
- package/dist/gltf/meshopt/meshopt-module-loader.cjs +43 -0
- package/dist/gltf/meshopt/meshopt-module-loader.cjs.map +7 -0
- package/dist/gltf/meshopt/meshopt-module-loader.d.ts +3 -0
- package/dist/gltf/meshopt/meshopt-module-loader.d.ts.map +1 -0
- package/dist/gltf/meshopt/meshopt-module-loader.js +8 -0
- package/dist/gltf/meshopt/meshopt-module-loader.js.map +1 -0
- package/dist/gltf/schema.cjs +60 -0
- package/dist/gltf/schema.cjs.map +7 -0
- package/dist/gltf/schema.d.ts +6 -0
- package/dist/gltf/schema.d.ts.map +1 -0
- package/dist/gltf/schema.js +10 -0
- package/dist/gltf/schema.js.map +1 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_binary_glTF/image.KHR_binary_glTF.schema.json +34 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_binary_glTF/shader.KHR_binary_glTF.schema.json +16 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_materials_common/glTF.KHR_materials_common.schema.json +272 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_materials_common/light.ambient.schema.json +57 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_materials_common/light.directional.schema.json +57 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_materials_common/light.point.schema.json +72 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_materials_common/light.schema.json +258 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_materials_common/light.spot.schema.json +82 -0
- package/dist/gltf/schemas/extensions/1.0/Khronos/KHR_materials_common/node.KHR_materials_common.schema.json +23 -0
- package/dist/gltf/schemas/extensions/1.0/Vendor/CESIUM_RTC/CESIUM_RTC.schema.json +21 -0
- package/dist/gltf/schemas/extensions/1.0/Vendor/WEB3D_quantized_attributes/WEB3D_quantized_attributes.accessor.schema.json +40 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness/glTF.KHR_materials_pbrSpecularGlossiness.schema.json +141 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_techniques_webgl/glTF.KHR_techniques_webgl.schema.json +417 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_techniques_webgl/material.KHR_techniques_webgl.schema.json +133 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_techniques_webgl/program.schema.json +97 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_techniques_webgl/shader.schema.json +109 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_techniques_webgl/technique.attribute.schema.json +51 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_techniques_webgl/technique.schema.json +267 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_techniques_webgl/technique.uniform.schema.json +185 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_techniques_webgl/uniform.value.schema.json +98 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_xmp/glTF.KHR_xmp.schema.json +61 -0
- package/dist/gltf/schemas/extensions/2.0/Archived/KHR_xmp/node.KHR_xmp.schema.json +59 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_animation_pointer/animation.channel.target.KHR_animation_pointer.schema.json +51 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_draco_mesh_compression/mesh.primitive.KHR_draco_mesh_compression.schema.json +67 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_gaussian_splatting/mesh.primitive.KHR_gaussian_splatting.schema.json +100 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_interactivity/declaration.KHR_interactivity.schema.json +106 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_interactivity/event.KHR_interactivity.schema.json +90 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_interactivity/glTF.KHR_interactivity.schema.json +546 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_interactivity/graph.KHR_interactivity.schema.json +512 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_interactivity/node.KHR_interactivity.schema.json +183 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_interactivity/type.KHR_interactivity.schema.json +96 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_interactivity/variable.KHR_interactivity.schema.json +64 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_lights_punctual/glTF.KHR_lights_punctual.schema.json +175 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_lights_punctual/light.schema.json +151 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_lights_punctual/light.spot.schema.json +58 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_lights_punctual/node.KHR_lights_punctual.schema.json +58 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_anisotropy/material.KHR_materials_anisotropy.schema.json +103 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_clearcoat/material.KHR_materials_clearcoat.schema.json +144 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/material.KHR_materials_diffuse_transmission.schema.json +123 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_dispersion/material.KHR_materials_dispersion.schema.json +50 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_emissive_strength/material.KHR_materials_emissive_strength.schema.json +49 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_ior/material.KHR_materials_ior.schema.json +58 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_iridescence/material.KHR_materials_iridescence.schema.json +125 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_sheen/material.KHR_materials_sheen.schema.json +122 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_specular/material.KHR_materials_specular.schema.json +122 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_transmission/material.KHR_materials_transmission.schema.json +97 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_unlit/material.KHR_materials_unlit.schema.json +43 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_variants/glTF.KHR_materials_variants.schema.json +88 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_variants/mesh.primitive.KHR_materials_variants.schema.json +100 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_materials_volume/material.KHR_materials_volume.schema.json +119 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_meshopt_compression/buffer.KHR_meshopt_compression.schema.json +48 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_meshopt_compression/bufferView.KHR_meshopt_compression.schema.json +106 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_node_hoverability/node.KHR_node_hoverability.schema.json +49 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_node_selectability/node.KHR_node_selectability.schema.json +49 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_node_visibility/node.KHR_node_visibility.schema.json +49 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_texture_basisu/texture.KHR_texture_basisu.schema.json +56 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_texture_transform/textureInfo.KHR_texture_transform.schema.json +79 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_xmp_json_ld/KHR_xmp_json_ld.schema.json +59 -0
- package/dist/gltf/schemas/extensions/2.0/Khronos/KHR_xmp_json_ld/glTF.KHR_xmp_json_ld.schema.json +70 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/ADOBE_materials_clearcoat_specular/glTF.ADOBE_materials_clearcoat_specular.schema.json +105 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/ADOBE_materials_clearcoat_tint/material.ADOBE_materials_clearcoat_tint.schema.json +106 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/ADOBE_materials_thin_transparency/glTF.ADOBE_materials_thin_transparency.schema.json +105 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/AGI_articulations/articulation.schema.json +177 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/AGI_articulations/articulation.stage.schema.json +136 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/AGI_articulations/gltf.AGI_articulations.schema.json +200 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/AGI_articulations/node.AGI_articulations.schema.json +53 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/AGI_stk_metadata/gltf.AGI_stk_metadata.schema.json +81 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/AGI_stk_metadata/node.AGI_stk_metadata.schema.json +53 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/AGI_stk_metadata/solarPanelGroup.schema.json +59 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/CESIUM_primitive_outline/primitive.CESIUM_primitive_outline.schema.json +56 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_lights_ies/glTF.EXT_lights_ies.schema.json +132 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_lights_ies/lightProfile.schema.json +107 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_lights_ies/node.EXT_lights_ies.schema.json +80 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_lights_image_based/glTF.EXT_lights_image_based.schema.json +145 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_lights_image_based/light.schema.json +121 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_lights_image_based/scene.EXT_lights_image_based.schema.json +58 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_mesh_gpu_instancing/glTF.EXT_mesh_gpu_instancing.schema.json +56 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_mesh_manifold/mesh.EXT_mesh_manifold.schema.json +175 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_mesh_primitive_edge_visibility/lineString.schema.json +70 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_mesh_primitive_edge_visibility/primitive.EXT_mesh_primitive_edge_visibility.schema.json +119 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_mesh_primitive_restart/EXT_mesh_primitive_restart.schema.json +97 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_mesh_primitive_restart/primitiveGroup.schema.json +72 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_meshopt_compression/buffer.EXT_meshopt_compression.schema.json +48 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_meshopt_compression/bufferView.EXT_meshopt_compression.schema.json +105 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_texture_astc/texture.EXT_texture_astc.schema.json +56 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/EXT_texture_webp/glTF.EXT_texture_webp.schema.json +56 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/FB_geometry_metadata/scene.FB_geometry_metadata.schema.json +97 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/FB_geometry_metadata/sceneBounds.schema.json +64 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/GRIFFEL_bim_data/GRIFFEL_bim_data.schema.json +164 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/GRIFFEL_bim_data/glTF.GRIFFEL_bim_data.schema.json +107 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/GRIFFEL_bim_data/node.GRIFFEL_bim_data.schema.json +95 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_accessor_timed/MPEG_accessor_timed.schema.json +85 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_animation_timing/MPEG_animation_timing.schema.json +60 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_audio_spatial/MPEG_audio_spatial.listener.schema.json +51 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_audio_spatial/MPEG_audio_spatial.reverb.property.schema.json +63 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_audio_spatial/MPEG_audio_spatial.reverb.schema.json +107 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_audio_spatial/MPEG_audio_spatial.schema.json +276 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_audio_spatial/MPEG_audio_spatial.source.schema.json +139 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_buffer_circular/MPEG_buffer_circular.schema.json +80 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_media/MPEG_media.media.alternative.schema.json +110 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_media/MPEG_media.media.alternative.track.schema.json +56 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_media/MPEG_media.media.schema.json +195 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_media/MPEG_media.schema.json +237 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_mesh_linking/MPEG_mesh_linking.schema.json +89 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_scene_dynamic/MPEG_scene_dynamic.schema.json +69 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_texture_video/MPEG_texture_video.schema.json +109 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_viewport_recommended/MPEG_viewport_recommended.schema.json +119 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MPEG_viewport_recommended/MPEG_viewport_recommended.viewport.schema.json +96 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MSFT_lod/glTF.MSFT_lod.schema.json +51 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MSFT_packing_normalRoughnessMetallic/glTF.MSFT_packing_normalRoughnessMetallic.schema.json +62 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MSFT_packing_occlusionRoughnessMetallic/glTF.MSFT_packing_occlusionRoughnessMetallic.schema.json +90 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/MSFT_texture_dds/glTF.MSFT_texture_dds.schema.json +56 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/NV_materials_mdl/bsdfMeasurement.schema.json +109 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/NV_materials_mdl/functionCall.argument.schema.json +228 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/NV_materials_mdl/functionCall.schema.json +292 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/NV_materials_mdl/functionCall.type.schema.json +86 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/NV_materials_mdl/glTF.NV_materials_mdl.schema.json +451 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/NV_materials_mdl/material.NV_materials_mdl.schema.json +60 -0
- package/dist/gltf/schemas/extensions/2.0/Vendor/NV_materials_mdl/module.schema.json +114 -0
- package/dist/gltf/unbundled.cjs +34 -0
- package/dist/gltf/unbundled.cjs.map +7 -0
- package/dist/gltf/unbundled.d.ts +5 -0
- package/dist/gltf/unbundled.d.ts.map +1 -0
- package/dist/gltf/unbundled.js +6 -0
- package/dist/gltf/unbundled.js.map +1 -0
- package/dist/gltf/webp/webp.cjs +53 -0
- package/dist/gltf/webp/webp.cjs.map +7 -0
- package/dist/gltf/webp/webp.d.ts +7 -0
- package/dist/gltf/webp/webp.d.ts.map +1 -0
- package/dist/gltf/webp/webp.js +38 -0
- package/dist/gltf/webp/webp.js.map +1 -0
- package/dist/index.cjs +43 -809
- package/dist/index.cjs.map +4 -3
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/obj/bundled.cjs +44 -0
- package/dist/obj/bundled.cjs.map +7 -0
- package/dist/obj/bundled.d.ts +7 -0
- package/dist/obj/bundled.d.ts.map +1 -0
- package/dist/obj/bundled.js +8 -0
- package/dist/obj/bundled.js.map +1 -0
- package/dist/obj/index.cjs +49 -0
- package/dist/obj/index.cjs.map +7 -0
- package/dist/obj/index.d.ts +13 -0
- package/dist/obj/index.d.ts.map +1 -0
- package/dist/obj/index.js +16 -0
- package/dist/obj/index.js.map +1 -0
- package/dist/obj/lib/get-obj-schema.cjs +60 -0
- package/dist/obj/lib/get-obj-schema.cjs.map +7 -0
- package/dist/obj/lib/get-obj-schema.d.ts +4 -0
- package/dist/obj/lib/get-obj-schema.d.ts.map +1 -0
- package/dist/obj/lib/get-obj-schema.js +36 -0
- package/dist/obj/lib/get-obj-schema.js.map +1 -0
- package/dist/obj/lib/obj-types.cjs +2 -0
- package/dist/obj/lib/obj-types.cjs.map +7 -0
- package/dist/obj/lib/obj-types.d.ts +1 -0
- package/dist/obj/lib/obj-types.d.ts.map +1 -0
- package/dist/obj/lib/obj-types.js +5 -0
- package/dist/obj/lib/obj-types.js.map +1 -0
- package/dist/obj/lib/parse-mtl.cjs +97 -0
- package/dist/obj/lib/parse-mtl.cjs.map +7 -0
- package/dist/obj/lib/parse-mtl.d.ts +34 -0
- package/dist/obj/lib/parse-mtl.d.ts.map +1 -0
- package/dist/obj/lib/parse-mtl.js +200 -0
- package/dist/obj/lib/parse-mtl.js.map +1 -0
- package/dist/obj/lib/parse-obj-meshes.cjs +389 -0
- package/dist/obj/lib/parse-obj-meshes.cjs.map +7 -0
- package/dist/obj/lib/parse-obj-meshes.d.ts +5 -0
- package/dist/obj/lib/parse-obj-meshes.d.ts.map +1 -0
- package/dist/obj/lib/parse-obj-meshes.js +441 -0
- package/dist/obj/lib/parse-obj-meshes.js.map +1 -0
- package/dist/obj/lib/parse-obj.cjs +96 -0
- package/dist/obj/lib/parse-obj.cjs.map +7 -0
- package/dist/obj/lib/parse-obj.d.ts +3 -0
- package/dist/obj/lib/parse-obj.d.ts.map +1 -0
- package/dist/obj/lib/parse-obj.js +72 -0
- package/dist/obj/lib/parse-obj.js.map +1 -0
- package/dist/obj/mtl-format.cjs +39 -0
- package/dist/obj/mtl-format.cjs.map +7 -0
- package/dist/obj/mtl-format.d.ts +14 -0
- package/dist/obj/mtl-format.d.ts.map +1 -0
- package/dist/obj/mtl-format.js +17 -0
- package/dist/obj/mtl-format.js.map +1 -0
- package/dist/obj/mtl-loader-types.cjs +62 -0
- package/dist/obj/mtl-loader-types.cjs.map +7 -0
- package/dist/obj/mtl-loader-types.d.ts +73 -0
- package/dist/obj/mtl-loader-types.d.ts.map +1 -0
- package/dist/obj/mtl-loader-types.js +34 -0
- package/dist/obj/mtl-loader-types.js.map +1 -0
- package/dist/obj/mtl-loader.cjs +45 -0
- package/dist/obj/mtl-loader.cjs.map +7 -0
- package/dist/obj/mtl-loader.d.ts +51 -0
- package/dist/obj/mtl-loader.d.ts.map +1 -0
- package/dist/obj/mtl-loader.js +25 -0
- package/dist/obj/mtl-loader.js.map +1 -0
- package/dist/obj/obj-format.cjs +39 -0
- package/dist/obj/obj-format.cjs.map +7 -0
- package/dist/obj/obj-format.d.ts +13 -0
- package/dist/obj/obj-format.d.ts.map +1 -0
- package/dist/obj/obj-format.js +16 -0
- package/dist/obj/obj-format.js.map +1 -0
- package/dist/obj/obj-loader-types.cjs +69 -0
- package/dist/obj/obj-loader-types.cjs.map +7 -0
- package/dist/obj/obj-loader-types.d.ts +112 -0
- package/dist/obj/obj-loader-types.d.ts.map +1 -0
- package/dist/obj/obj-loader-types.js +41 -0
- package/dist/obj/obj-loader-types.js.map +1 -0
- package/dist/obj/obj-loader.cjs +161 -0
- package/dist/obj/obj-loader.cjs.map +7 -0
- package/dist/obj/obj-loader.d.ts +40 -0
- package/dist/obj/obj-loader.d.ts.map +1 -0
- package/dist/obj/obj-loader.js +142 -0
- package/dist/obj/obj-loader.js.map +1 -0
- package/dist/obj/obj-writer.cjs +165 -0
- package/dist/obj/obj-writer.cjs.map +7 -0
- package/dist/obj/obj-writer.d.ts +35 -0
- package/dist/obj/obj-writer.d.ts.map +1 -0
- package/dist/obj/obj-writer.js +123 -0
- package/dist/obj/obj-writer.js.map +1 -0
- package/dist/obj/unbundled.cjs +44 -0
- package/dist/obj/unbundled.cjs.map +7 -0
- package/dist/obj/unbundled.d.ts +7 -0
- package/dist/obj/unbundled.d.ts.map +1 -0
- package/dist/obj/unbundled.js +8 -0
- package/dist/obj/unbundled.js.map +1 -0
- package/dist/obj/workers/obj-worker.cjs +23 -0
- package/dist/obj/workers/obj-worker.cjs.map +7 -0
- package/dist/obj/workers/obj-worker.d.ts +2 -0
- package/dist/obj/workers/obj-worker.d.ts.map +1 -0
- package/dist/obj/workers/obj-worker.js +23 -0
- package/dist/obj/workers/obj-worker.js.map +1 -0
- package/dist/obj-worker.js +17609 -0
- package/dist/usd/index.cjs +31 -0
- package/dist/usd/index.cjs.map +7 -0
- package/dist/usd/index.d.ts +3 -0
- package/dist/usd/index.d.ts.map +1 -0
- package/dist/usd/index.js +5 -0
- package/dist/usd/index.js.map +1 -0
- package/dist/usd/lib/parse-usd.cjs +294 -0
- package/dist/usd/lib/parse-usd.cjs.map +7 -0
- package/dist/{lib → usd/lib}/parse-usd.d.ts +1 -1
- package/dist/usd/lib/parse-usd.d.ts.map +1 -0
- package/dist/usd/lib/parse-usd.js.map +1 -0
- package/dist/usd/lib/parse-usda.cjs +406 -0
- package/dist/usd/lib/parse-usda.cjs.map +7 -0
- package/dist/usd/lib/parse-usda.d.ts.map +1 -0
- package/dist/usd/lib/parse-usda.js.map +1 -0
- package/dist/usd/lib/parse-usdz.cjs +76 -0
- package/dist/usd/lib/parse-usdz.cjs.map +7 -0
- package/dist/usd/lib/parse-usdz.d.ts.map +1 -0
- package/dist/usd/lib/parse-usdz.js.map +1 -0
- package/dist/usd/lib/usd-types.cjs +19 -0
- package/dist/usd/lib/usd-types.cjs.map +7 -0
- package/dist/{lib → usd/lib}/usd-types.d.ts +1 -1
- package/dist/usd/lib/usd-types.d.ts.map +1 -0
- package/dist/usd/lib/usd-types.js.map +1 -0
- package/dist/usd/usd-loader-types.cjs +67 -0
- package/dist/usd/usd-loader-types.cjs.map +7 -0
- package/dist/usd/usd-loader-types.d.ts.map +1 -0
- package/dist/{usd-loader-types.js → usd/usd-loader-types.js} +2 -2
- package/dist/usd/usd-loader-types.js.map +1 -0
- package/dist/usd/usd-loader.cjs +41 -0
- package/dist/usd/usd-loader.cjs.map +7 -0
- package/dist/usd/usd-loader.d.ts.map +1 -0
- package/dist/usd/usd-loader.js.map +1 -0
- package/package.json +181 -10
- package/src/gltf/bundled.ts +8 -0
- package/src/gltf/glb-loader-types.ts +40 -0
- package/src/gltf/glb-loader.ts +42 -0
- package/src/gltf/glb-writer.ts +46 -0
- package/src/gltf/gltf-format.ts +32 -0
- package/src/gltf/gltf-loader-types.ts +52 -0
- package/src/gltf/gltf-loader.ts +49 -0
- package/src/gltf/gltf-source.ts +244 -0
- package/src/gltf/gltf-writer.ts +62 -0
- package/src/gltf/index.ts +270 -0
- package/src/gltf/lib/api/append-gltf-v1-buffer-data.ts +61 -0
- package/src/gltf/lib/api/bake-gltf-v1-bind-shapes.ts +178 -0
- package/src/gltf/lib/api/clean-gltf-v1-fields.ts +94 -0
- package/src/gltf/lib/api/convert-gltf-v1-accessors.ts +170 -0
- package/src/gltf/lib/api/convert-gltf-v1-animations.ts +79 -0
- package/src/gltf/lib/api/convert-gltf-v1-materials.ts +351 -0
- package/src/gltf/lib/api/convert-gltf-v1-matrix-nodes.ts +116 -0
- package/src/gltf/lib/api/convert-gltf-v1-skin-scenes.ts +88 -0
- package/src/gltf/lib/api/convert-gltf-v1-skins.ts +217 -0
- package/src/gltf/lib/api/gltf-accessors.ts +87 -0
- package/src/gltf/lib/api/gltf-culling.ts +80 -0
- package/src/gltf/lib/api/gltf-extension-data.ts +125 -0
- package/src/gltf/lib/api/gltf-extensions.ts +133 -0
- package/src/gltf/lib/api/gltf-iterator.ts +1469 -0
- package/src/gltf/lib/api/gltf-mesh-arrow.ts +410 -0
- package/src/gltf/lib/api/gltf-scenegraph.ts +741 -0
- package/src/gltf/lib/api/normalize-gltf-v1.ts +603 -0
- package/src/gltf/lib/api/repack-gltf-v1-accessors.ts +566 -0
- package/src/gltf/lib/api/validate-gltf-v1-buffers.ts +139 -0
- package/src/gltf/lib/api/validate-gltf-v1-cameras.ts +40 -0
- package/src/gltf/lib/api/validate-gltf-v1-geometry.ts +156 -0
- package/src/gltf/lib/api/validate-gltf-v1-payloads.ts +315 -0
- package/src/gltf/lib/encoders/encode-glb.ts +198 -0
- package/src/gltf/lib/encoders/encode-gltf-draco.ts +239 -0
- package/src/gltf/lib/encoders/encode-gltf.ts +45 -0
- package/src/gltf/lib/extensions/EXT_mesh_features.ts +240 -0
- package/src/gltf/lib/extensions/EXT_mesh_polygon.ts +172 -0
- package/src/gltf/lib/extensions/EXT_meshopt_compression.ts +33 -0
- package/src/gltf/lib/extensions/EXT_primitive_voxels.ts +85 -0
- package/src/gltf/lib/extensions/EXT_structural_metadata.ts +1130 -0
- package/src/gltf/lib/extensions/EXT_texture_avif.ts +56 -0
- package/src/gltf/lib/extensions/EXT_texture_webp.ts +46 -0
- package/src/gltf/lib/extensions/KHR_audio_emitter.ts +136 -0
- package/src/gltf/lib/extensions/KHR_binary_gltf.ts +56 -0
- package/src/gltf/lib/extensions/KHR_draco_mesh_compression.ts +169 -0
- package/src/gltf/lib/extensions/KHR_gaussian_splatting.ts +239 -0
- package/src/gltf/lib/extensions/KHR_mesh_primitive_restart.ts +108 -0
- package/src/gltf/lib/extensions/KHR_meshopt_compression.ts +32 -0
- package/src/gltf/lib/extensions/KHR_texture_basisu.ts +39 -0
- package/src/gltf/lib/extensions/KHR_texture_transform.ts +385 -0
- package/src/gltf/lib/extensions/MPEG_audio_spatial.ts +59 -0
- package/src/gltf/lib/extensions/deprecated/EXT_feature_metadata.ts +479 -0
- package/src/gltf/lib/extensions/deprecated/KHR_lights_punctual.ts +67 -0
- package/src/gltf/lib/extensions/deprecated/KHR_materials_unlit.ts +52 -0
- package/src/gltf/lib/extensions/deprecated/KHR_techniques_webgl.ts +105 -0
- package/src/gltf/lib/extensions/meshopt-compression.ts +189 -0
- package/src/gltf/lib/extensions/utils/3d-tiles-utils.ts +473 -0
- package/src/gltf/lib/gltf-utils/get-typed-array.ts +215 -0
- package/src/gltf/lib/gltf-utils/gltf-attribute-utils.ts +85 -0
- package/src/gltf/lib/gltf-utils/gltf-constants.ts +53 -0
- package/src/gltf/lib/gltf-utils/gltf-utils.ts +162 -0
- package/src/gltf/lib/gltf-utils/resolve-gltf-file.ts +95 -0
- package/src/gltf/lib/gltf-utils/resolve-url.ts +48 -0
- package/src/gltf/lib/parsers/parse-glb.ts +299 -0
- package/src/gltf/lib/parsers/parse-gltf.ts +570 -0
- package/src/gltf/lib/types/glb-types.ts +44 -0
- package/src/gltf/lib/types/gltf-additional-extension-schemas.ts +127 -0
- package/src/gltf/lib/types/gltf-audio-extension-schemas.ts +167 -0
- package/src/gltf/lib/types/gltf-ext-feature-metadata-schema.ts +474 -0
- package/src/gltf/lib/types/gltf-ext-gaussian-splatting-schema.ts +46 -0
- package/src/gltf/lib/types/gltf-ext-mesh-features-schema.ts +56 -0
- package/src/gltf/lib/types/gltf-ext-structural-metadata-schema.ts +387 -0
- package/src/gltf/lib/types/gltf-ext-vector-voxel-schema.ts +49 -0
- package/src/gltf/lib/types/gltf-extension-schemas.ts +87 -0
- package/src/gltf/lib/types/gltf-interactivity.ts +168 -0
- package/src/gltf/lib/types/gltf-json-schema.ts +947 -0
- package/src/gltf/lib/types/gltf-khr-audio-emitter-schema.ts +60 -0
- package/src/gltf/lib/types/gltf-mpeg-audio-spatial-schema.ts +31 -0
- package/src/gltf/lib/types/gltf-official-json-schemas.ts +18619 -0
- package/src/gltf/lib/types/gltf-shape-schema.ts +47 -0
- package/src/gltf/lib/types/gltf-types.ts +90 -0
- package/src/gltf/lib/types/gltf-vector-topology.ts +65 -0
- package/src/gltf/lib/types/gltf-version-zod-schemas.ts +511 -0
- package/src/gltf/lib/types/gltf-zod-schema.ts +545 -0
- package/src/gltf/lib/utils/assert.ts +12 -0
- package/src/gltf/lib/utils/version.ts +8 -0
- package/src/gltf/libs/README.md +12 -0
- package/src/gltf/libs/meshopt-decoder.d.mts +15 -0
- package/src/gltf/libs/meshopt-decoder.mjs +196 -0
- package/src/gltf/libs/meshoptimizer-LICENSE.md +21 -0
- package/src/gltf/mesh-arrow.ts +11 -0
- package/src/gltf/meshopt/meshopt-decoder.ts +185 -0
- package/src/gltf/meshopt/meshopt-encoder.ts.disabled +409 -0
- package/src/gltf/meshopt/meshopt-module-loader.ts +8 -0
- package/src/gltf/schema.ts +24 -0
- package/src/gltf/unbundled.ts +8 -0
- package/src/gltf/webp/webp.ts +45 -0
- package/src/index.ts +13 -11
- package/src/obj/bundled.ts +16 -0
- package/src/obj/index.ts +23 -0
- package/src/obj/lib/get-obj-schema.ts +45 -0
- package/src/obj/lib/obj-types.ts +3 -0
- package/src/obj/lib/parse-mtl.ts +248 -0
- package/src/obj/lib/parse-obj-meshes.ts +530 -0
- package/src/obj/lib/parse-obj.ts +88 -0
- package/src/obj/mtl-format.ts +19 -0
- package/src/obj/mtl-loader-types.ts +46 -0
- package/src/obj/mtl-loader.ts +37 -0
- package/src/obj/obj-format.ts +18 -0
- package/src/obj/obj-loader-types.ts +75 -0
- package/src/obj/obj-loader.ts +203 -0
- package/src/obj/obj-writer.ts +190 -0
- package/src/obj/unbundled.ts +10 -0
- package/src/obj/workers/obj-worker.ts +24 -0
- package/src/usd/index.ts +15 -0
- package/src/{lib → usd/lib}/parse-usd.ts +1 -1
- package/src/{lib → usd/lib}/usd-types.ts +1 -1
- package/src/{usd-loader-types.ts → usd/usd-loader-types.ts} +2 -2
- package/src/{usd-loader.ts → usd/usd-loader.ts} +1 -1
- package/third-party-licenses/gltf-loader-ts-LICENSE +21 -0
- package/third-party-licenses/three-LICENSE +21 -0
- package/dist/lib/parse-usd.d.ts.map +0 -1
- package/dist/lib/parse-usd.js.map +0 -1
- package/dist/lib/parse-usda.d.ts.map +0 -1
- package/dist/lib/parse-usda.js.map +0 -1
- package/dist/lib/parse-usdz.d.ts.map +0 -1
- package/dist/lib/parse-usdz.js.map +0 -1
- package/dist/lib/usd-types.d.ts.map +0 -1
- package/dist/lib/usd-types.js.map +0 -1
- package/dist/usd-loader-types.d.ts.map +0 -1
- package/dist/usd-loader-types.js.map +0 -1
- package/dist/usd-loader.d.ts.map +0 -1
- package/dist/usd-loader.js.map +0 -1
- /package/dist/{lib → usd/lib}/parse-usd.js +0 -0
- /package/dist/{lib → usd/lib}/parse-usda.d.ts +0 -0
- /package/dist/{lib → usd/lib}/parse-usda.js +0 -0
- /package/dist/{lib → usd/lib}/parse-usdz.d.ts +0 -0
- /package/dist/{lib → usd/lib}/parse-usdz.js +0 -0
- /package/dist/{lib → usd/lib}/usd-types.js +0 -0
- /package/dist/{usd-loader-types.d.ts → usd/usd-loader-types.d.ts} +0 -0
- /package/dist/{usd-loader.d.ts → usd/usd-loader.d.ts} +0 -0
- /package/dist/{usd-loader.js → usd/usd-loader.js} +0 -0
- /package/src/{lib → usd/lib}/parse-usda.ts +0 -0
- /package/src/{lib → usd/lib}/parse-usdz.ts +0 -0
|
@@ -0,0 +1,1469 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {BigTypedArray} from '@loaders.gl/core/schema';
|
|
6
|
+
import type {
|
|
7
|
+
GLTF,
|
|
8
|
+
GLTFAccessor,
|
|
9
|
+
GLTFAnimation,
|
|
10
|
+
GLTFAnimationChannel,
|
|
11
|
+
GLTFAnimationChannelTarget,
|
|
12
|
+
GLTFAnimationSampler,
|
|
13
|
+
GLTFBuffer,
|
|
14
|
+
GLTFBufferView,
|
|
15
|
+
GLTFCamera,
|
|
16
|
+
GLTFExternalAsset,
|
|
17
|
+
GLTFFile,
|
|
18
|
+
GLTFImage,
|
|
19
|
+
GLTFMaterial,
|
|
20
|
+
GLTFMaterialNormalTextureInfo,
|
|
21
|
+
GLTFMaterialOcclusionTextureInfo,
|
|
22
|
+
GLTFMesh,
|
|
23
|
+
GLTFMeshPrimitive,
|
|
24
|
+
GLTFNode,
|
|
25
|
+
GLTFSampler,
|
|
26
|
+
GLTFScene,
|
|
27
|
+
GLTFSkin,
|
|
28
|
+
GLTFTexture,
|
|
29
|
+
GLTFTextureInfo
|
|
30
|
+
} from '../types/gltf-json-schema';
|
|
31
|
+
import type {GLTFWithBuffers} from '../types/gltf-types';
|
|
32
|
+
import {
|
|
33
|
+
getTypedArrayForAccessor as getAccessorTypedArray,
|
|
34
|
+
getTypedArrayForBufferView as getBufferViewTypedArray,
|
|
35
|
+
getTypedArrayForImageData as getImageTypedArray
|
|
36
|
+
} from '../gltf-utils/get-typed-array';
|
|
37
|
+
import {getAccessorTypeFromSize} from '../gltf-utils/gltf-utils';
|
|
38
|
+
|
|
39
|
+
/** String tag identifying a raw glTF object registered with an iterator. */
|
|
40
|
+
export type GLTFIteratorType =
|
|
41
|
+
| 'accessor'
|
|
42
|
+
| 'animation'
|
|
43
|
+
| 'animationChannel'
|
|
44
|
+
| 'animationChannelTarget'
|
|
45
|
+
| 'animationSampler'
|
|
46
|
+
| 'buffer'
|
|
47
|
+
| 'bufferView'
|
|
48
|
+
| 'camera'
|
|
49
|
+
| 'externalAsset'
|
|
50
|
+
| 'file'
|
|
51
|
+
| 'image'
|
|
52
|
+
| 'material'
|
|
53
|
+
| 'mesh'
|
|
54
|
+
| 'primitive'
|
|
55
|
+
| 'node'
|
|
56
|
+
| 'sampler'
|
|
57
|
+
| 'scene'
|
|
58
|
+
| 'skin'
|
|
59
|
+
| 'texture'
|
|
60
|
+
| 'textureInfo';
|
|
61
|
+
|
|
62
|
+
/** Top-level glTF collection wrapper tags. */
|
|
63
|
+
type GLTFCollectionType = Exclude<
|
|
64
|
+
GLTFIteratorType,
|
|
65
|
+
'animationChannel' | 'animationChannelTarget' | 'animationSampler' | 'primitive' | 'textureInfo'
|
|
66
|
+
>;
|
|
67
|
+
|
|
68
|
+
/** Minimum raw object shape required by extension helpers. */
|
|
69
|
+
type GLTFIteratorData = {
|
|
70
|
+
extensions?: Record<string, any>;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/** Base class for a lightweight view of one raw glTF object. */
|
|
74
|
+
abstract class GLTFObjectIterator<DataT extends GLTFIteratorData, TypeT extends GLTFIteratorType> {
|
|
75
|
+
/** Original glTF container. */
|
|
76
|
+
readonly gltf: GLTFWithBuffers;
|
|
77
|
+
|
|
78
|
+
/** Stable tag identifying the wrapped object type. */
|
|
79
|
+
readonly type: TypeT;
|
|
80
|
+
|
|
81
|
+
/** Index in the object's top-level or parent-local collection. */
|
|
82
|
+
readonly index: number;
|
|
83
|
+
|
|
84
|
+
/** Exact unmodified object from the source glTF JSON. */
|
|
85
|
+
readonly data: DataT;
|
|
86
|
+
|
|
87
|
+
/** Human-readable path to the raw object. */
|
|
88
|
+
readonly path: string;
|
|
89
|
+
|
|
90
|
+
/** Root iterator used to resolve linked indices. */
|
|
91
|
+
protected readonly iterator: GLTFIterator;
|
|
92
|
+
|
|
93
|
+
/** Create a lightweight wrapper for a raw glTF object. */
|
|
94
|
+
constructor(iterator: GLTFIterator, type: TypeT, index: number, data: DataT, path: string) {
|
|
95
|
+
this.iterator = iterator;
|
|
96
|
+
this.gltf = iterator.gltf;
|
|
97
|
+
this.type = type;
|
|
98
|
+
this.index = index;
|
|
99
|
+
this.data = data;
|
|
100
|
+
this.path = path;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Base class for an object stored in a parent-local array or property. */
|
|
105
|
+
abstract class GLTFNestedObjectIterator<
|
|
106
|
+
DataT extends GLTFIteratorData,
|
|
107
|
+
TypeT extends GLTFIteratorType,
|
|
108
|
+
ParentT extends GLTFObjectIterator<GLTFIteratorData, GLTFIteratorType>
|
|
109
|
+
> extends GLTFObjectIterator<DataT, TypeT> {
|
|
110
|
+
/** Wrapper containing this nested object. */
|
|
111
|
+
readonly parent: ParentT;
|
|
112
|
+
|
|
113
|
+
/** Create a wrapper for a parent-local raw glTF object. */
|
|
114
|
+
constructor(
|
|
115
|
+
iterator: GLTFIterator,
|
|
116
|
+
type: TypeT,
|
|
117
|
+
index: number,
|
|
118
|
+
data: DataT,
|
|
119
|
+
path: string,
|
|
120
|
+
parent: ParentT
|
|
121
|
+
) {
|
|
122
|
+
super(iterator, type, index, data, path);
|
|
123
|
+
this.parent = parent;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Metadata privately associated with a raw glTF object by an iterator. */
|
|
128
|
+
export interface GLTFIteratorMetadata {
|
|
129
|
+
readonly gltf: GLTFWithBuffers;
|
|
130
|
+
readonly type: GLTFIteratorType;
|
|
131
|
+
readonly index: number;
|
|
132
|
+
readonly parent?: GLTFIteratorData;
|
|
133
|
+
readonly path: string;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Lazily resolved standard relationships for one raw glTF object. */
|
|
137
|
+
export type GLTFIteratorReferences = object;
|
|
138
|
+
|
|
139
|
+
/** References reachable from a texture wrapper. */
|
|
140
|
+
export interface GLTFTextureReferences {
|
|
141
|
+
readonly sampler: GLTFSampler | undefined;
|
|
142
|
+
readonly source: GLTFImage | undefined;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** References reachable from a node wrapper. */
|
|
146
|
+
export interface GLTFNodeReferences {
|
|
147
|
+
readonly camera: GLTFCamera | undefined;
|
|
148
|
+
readonly children: IterableIterator<GLTFNode>;
|
|
149
|
+
readonly skin: GLTFSkin | undefined;
|
|
150
|
+
readonly mesh: GLTFMesh | undefined;
|
|
151
|
+
readonly externalAsset: GLTFExternalAsset | undefined;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** References reachable from a mesh wrapper. */
|
|
155
|
+
export interface GLTFMeshReferences {
|
|
156
|
+
readonly primitives: IterableIterator<GLTFMeshPrimitive>;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** References reachable from a scene wrapper. */
|
|
160
|
+
export interface GLTFSceneReferences {
|
|
161
|
+
readonly nodes: IterableIterator<GLTFNode>;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** References reachable from a mesh primitive wrapper. */
|
|
165
|
+
export interface GLTFMeshPrimitiveReferences {
|
|
166
|
+
readonly attributes: ReadonlyMap<string, GLTFAccessor>;
|
|
167
|
+
readonly indices: GLTFAccessor | undefined;
|
|
168
|
+
readonly material: GLTFMaterial | undefined;
|
|
169
|
+
readonly targets: ReadonlyArray<ReadonlyMap<string, GLTFAccessor>>;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** References reachable from a texture-info wrapper. */
|
|
173
|
+
export interface GLTFTextureInfoReferences {
|
|
174
|
+
readonly texture: GLTFTexture;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/** References reachable from a material wrapper. */
|
|
178
|
+
export interface GLTFMaterialReferences {
|
|
179
|
+
readonly baseColorTexture: GLTFTextureInfo | undefined;
|
|
180
|
+
readonly metallicRoughnessTexture: GLTFTextureInfo | undefined;
|
|
181
|
+
readonly normalTexture: GLTFMaterialNormalTextureInfo | undefined;
|
|
182
|
+
readonly occlusionTexture: GLTFMaterialOcclusionTextureInfo | undefined;
|
|
183
|
+
readonly emissiveTexture: GLTFTextureInfo | undefined;
|
|
184
|
+
readonly textures: IterableIterator<
|
|
185
|
+
GLTFTextureInfo | GLTFMaterialNormalTextureInfo | GLTFMaterialOcclusionTextureInfo
|
|
186
|
+
>;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** References reachable from an accessor wrapper. */
|
|
190
|
+
export interface GLTFAccessorReferences {
|
|
191
|
+
readonly bufferView: GLTFBufferView | undefined;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** References reachable from a buffer-view wrapper. */
|
|
195
|
+
export interface GLTFBufferViewReferences {
|
|
196
|
+
readonly buffer: GLTFBuffer;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** References reachable from a file or image wrapper. */
|
|
200
|
+
export interface GLTFBufferViewOwnerReferences {
|
|
201
|
+
readonly bufferView: GLTFBufferView | undefined;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** References reachable from an external asset wrapper. */
|
|
205
|
+
export interface GLTFExternalAssetReferences {
|
|
206
|
+
readonly file: GLTFFile;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** References reachable from an animation wrapper. */
|
|
210
|
+
export interface GLTFAnimationReferences {
|
|
211
|
+
readonly channels: IterableIterator<GLTFAnimationChannel>;
|
|
212
|
+
readonly samplers: IterableIterator<GLTFAnimationSampler>;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** References reachable from an animation channel wrapper. */
|
|
216
|
+
export interface GLTFAnimationChannelReferences {
|
|
217
|
+
readonly sampler: GLTFAnimationSampler;
|
|
218
|
+
readonly target: GLTFAnimationChannelTarget;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/** References reachable from an animation target wrapper. */
|
|
222
|
+
export interface GLTFAnimationChannelTargetReferences {
|
|
223
|
+
readonly node: GLTFNode | undefined;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** References reachable from an animation sampler wrapper. */
|
|
227
|
+
export interface GLTFAnimationSamplerReferences {
|
|
228
|
+
readonly input: GLTFAccessor;
|
|
229
|
+
readonly output: GLTFAccessor;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/** References reachable from a skin wrapper. */
|
|
233
|
+
export interface GLTFSkinReferences {
|
|
234
|
+
readonly inverseBindMatrices: GLTFAccessor | undefined;
|
|
235
|
+
readonly skeleton: GLTFNode | undefined;
|
|
236
|
+
readonly joints: IterableIterator<GLTFNode>;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/** Lightweight accessor wrapper. */
|
|
240
|
+
class GLTFAccessorIterator extends GLTFObjectIterator<GLTFAccessor, 'accessor'> {
|
|
241
|
+
/** Resolve the accessor's buffer view. */
|
|
242
|
+
get bufferView(): GLTFBufferViewIterator | undefined {
|
|
243
|
+
return this.data.bufferView === undefined
|
|
244
|
+
? undefined
|
|
245
|
+
: this.iterator.resolveBufferView(this.data.bufferView, `${this.path}.bufferView`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/** Lightweight animation wrapper. */
|
|
250
|
+
class GLTFAnimationIterator extends GLTFObjectIterator<GLTFAnimation, 'animation'> {
|
|
251
|
+
/** Iterate animation channels in source order. */
|
|
252
|
+
get channels(): IterableIterator<GLTFAnimationChannelIterator> {
|
|
253
|
+
return iterateValues(this.data.channels, (channel, channelIndex) =>
|
|
254
|
+
this.iterator.getOrCreateNested(
|
|
255
|
+
channel,
|
|
256
|
+
() =>
|
|
257
|
+
new GLTFAnimationChannelIterator(
|
|
258
|
+
this.iterator,
|
|
259
|
+
'animationChannel',
|
|
260
|
+
channelIndex,
|
|
261
|
+
channel,
|
|
262
|
+
`${this.path}.channels[${channelIndex}]`,
|
|
263
|
+
this
|
|
264
|
+
)
|
|
265
|
+
)
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** Iterate animation samplers in source order. */
|
|
270
|
+
get samplers(): IterableIterator<GLTFAnimationSamplerIterator> {
|
|
271
|
+
return iterateValues(this.data.samplers, (sampler, samplerIndex) =>
|
|
272
|
+
this.iterator.getOrCreateNested(
|
|
273
|
+
sampler,
|
|
274
|
+
() =>
|
|
275
|
+
new GLTFAnimationSamplerIterator(
|
|
276
|
+
this.iterator,
|
|
277
|
+
'animationSampler',
|
|
278
|
+
samplerIndex,
|
|
279
|
+
sampler,
|
|
280
|
+
`${this.path}.samplers[${samplerIndex}]`,
|
|
281
|
+
this
|
|
282
|
+
)
|
|
283
|
+
)
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/** Lightweight animation channel wrapper. */
|
|
289
|
+
class GLTFAnimationChannelIterator extends GLTFNestedObjectIterator<
|
|
290
|
+
GLTFAnimationChannel,
|
|
291
|
+
'animationChannel',
|
|
292
|
+
GLTFAnimationIterator
|
|
293
|
+
> {
|
|
294
|
+
/** Resolve the animation-local sampler. */
|
|
295
|
+
get sampler(): GLTFAnimationSamplerIterator {
|
|
296
|
+
const samplers = this.parent.data.samplers;
|
|
297
|
+
const sampler = samplers[this.data.sampler];
|
|
298
|
+
if (!sampler) {
|
|
299
|
+
throw new Error(
|
|
300
|
+
`Invalid glTF reference at ${this.path}.sampler: animation sampler index ${this.data.sampler} is out of range`
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
return this.iterator.getOrCreateNested(
|
|
304
|
+
sampler,
|
|
305
|
+
() =>
|
|
306
|
+
new GLTFAnimationSamplerIterator(
|
|
307
|
+
this.iterator,
|
|
308
|
+
'animationSampler',
|
|
309
|
+
this.data.sampler,
|
|
310
|
+
sampler,
|
|
311
|
+
`${this.parent.path}.samplers[${this.data.sampler}]`,
|
|
312
|
+
this.parent
|
|
313
|
+
)
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/** Return the channel target wrapper. */
|
|
318
|
+
get target(): GLTFAnimationChannelTargetIterator {
|
|
319
|
+
return this.iterator.getOrCreateNested(
|
|
320
|
+
this.data.target,
|
|
321
|
+
() =>
|
|
322
|
+
new GLTFAnimationChannelTargetIterator(
|
|
323
|
+
this.iterator,
|
|
324
|
+
'animationChannelTarget',
|
|
325
|
+
0,
|
|
326
|
+
this.data.target,
|
|
327
|
+
`${this.path}.target`,
|
|
328
|
+
this
|
|
329
|
+
)
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/** Lightweight animation channel target wrapper. */
|
|
335
|
+
class GLTFAnimationChannelTargetIterator extends GLTFNestedObjectIterator<
|
|
336
|
+
GLTFAnimationChannelTarget,
|
|
337
|
+
'animationChannelTarget',
|
|
338
|
+
GLTFAnimationChannelIterator
|
|
339
|
+
> {
|
|
340
|
+
/** Resolve the target node when one is specified. */
|
|
341
|
+
get node(): GLTFNodeIterator | undefined {
|
|
342
|
+
return this.data.node === undefined
|
|
343
|
+
? undefined
|
|
344
|
+
: this.iterator.resolveNode(this.data.node, `${this.path}.node`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/** Lightweight animation sampler wrapper. */
|
|
349
|
+
class GLTFAnimationSamplerIterator extends GLTFNestedObjectIterator<
|
|
350
|
+
GLTFAnimationSampler,
|
|
351
|
+
'animationSampler',
|
|
352
|
+
GLTFAnimationIterator
|
|
353
|
+
> {
|
|
354
|
+
/** Resolve the sampler input accessor. */
|
|
355
|
+
get input(): GLTFAccessorIterator {
|
|
356
|
+
return this.iterator.resolveAccessor(this.data.input, `${this.path}.input`);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/** Resolve the sampler output accessor. */
|
|
360
|
+
get output(): GLTFAccessorIterator {
|
|
361
|
+
return this.iterator.resolveAccessor(this.data.output, `${this.path}.output`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/** Lightweight buffer wrapper. */
|
|
366
|
+
class GLTFBufferIterator extends GLTFObjectIterator<GLTFBuffer, 'buffer'> {
|
|
367
|
+
/** Return the loaded byte range parallel to this JSON buffer, when available. */
|
|
368
|
+
get loadedBuffer(): GLTFWithBuffers['buffers'][number] | undefined {
|
|
369
|
+
return this.gltf.buffers[this.index];
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/** Lightweight buffer-view wrapper. */
|
|
374
|
+
class GLTFBufferViewIterator extends GLTFObjectIterator<GLTFBufferView, 'bufferView'> {
|
|
375
|
+
/** Resolve the backing JSON buffer. */
|
|
376
|
+
get buffer(): GLTFBufferIterator {
|
|
377
|
+
return this.iterator.resolveBuffer(this.data.buffer, `${this.path}.buffer`);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/** Return a byte view over the loaded buffer-view range. */
|
|
381
|
+
get loadedBufferView(): Uint8Array | undefined {
|
|
382
|
+
const loadedBuffer = this.buffer.loadedBuffer;
|
|
383
|
+
if (!loadedBuffer) {
|
|
384
|
+
return undefined;
|
|
385
|
+
}
|
|
386
|
+
const byteOffset = loadedBuffer.byteOffset + (this.data.byteOffset || 0);
|
|
387
|
+
return new Uint8Array(loadedBuffer.arrayBuffer, byteOffset, this.data.byteLength);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/** Lightweight camera wrapper. */
|
|
392
|
+
class GLTFCameraIterator extends GLTFObjectIterator<GLTFCamera, 'camera'> {}
|
|
393
|
+
|
|
394
|
+
/** Lightweight external-asset wrapper for draft glTF 2.1. */
|
|
395
|
+
class GLTFExternalAssetIterator extends GLTFObjectIterator<GLTFExternalAsset, 'externalAsset'> {
|
|
396
|
+
/** Resolve the file containing the external glTF asset. */
|
|
397
|
+
get file(): GLTFFileIterator {
|
|
398
|
+
return this.iterator.resolveFile(this.data.file, `${this.path}.file`);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/** Return the parsed external glTF loaded parallel to this definition. */
|
|
402
|
+
get loadedAsset(): GLTFWithBuffers | null | undefined {
|
|
403
|
+
return this.gltf.externalAssets?.[this.index];
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/** Lightweight file wrapper for draft glTF 2.1. */
|
|
408
|
+
class GLTFFileIterator extends GLTFObjectIterator<GLTFFile, 'file'> {
|
|
409
|
+
/** Resolve the optional buffer view containing this file. */
|
|
410
|
+
get bufferView(): GLTFBufferViewIterator | undefined {
|
|
411
|
+
return this.data.bufferView === undefined
|
|
412
|
+
? undefined
|
|
413
|
+
: this.iterator.resolveBufferView(this.data.bufferView, `${this.path}.bufferView`);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/** Return the resolved file loaded parallel to this definition. */
|
|
417
|
+
get loadedFile(): NonNullable<GLTFWithBuffers['files']>[number] | undefined {
|
|
418
|
+
return this.gltf.files?.[this.index];
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/** Lightweight image wrapper. */
|
|
423
|
+
class GLTFImageIterator extends GLTFObjectIterator<GLTFImage, 'image'> {
|
|
424
|
+
/** Resolve the optional buffer view containing this image. */
|
|
425
|
+
get bufferView(): GLTFBufferViewIterator | undefined {
|
|
426
|
+
return this.data.bufferView === undefined
|
|
427
|
+
? undefined
|
|
428
|
+
: this.iterator.resolveBufferView(this.data.bufferView, `${this.path}.bufferView`);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/** Return the decoded image loaded parallel to this definition. */
|
|
432
|
+
get loadedImage(): NonNullable<GLTFWithBuffers['images']>[number] | undefined {
|
|
433
|
+
return this.gltf.images?.[this.index];
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/** Lightweight material wrapper. */
|
|
438
|
+
class GLTFMaterialIterator extends GLTFObjectIterator<GLTFMaterial, 'material'> {
|
|
439
|
+
/** Resolve the base-color texture info. */
|
|
440
|
+
get baseColorTexture(): GLTFTextureInfoIterator | undefined {
|
|
441
|
+
return this.getTextureInfo(
|
|
442
|
+
this.data.pbrMetallicRoughness?.baseColorTexture,
|
|
443
|
+
0,
|
|
444
|
+
'pbrMetallicRoughness.baseColorTexture'
|
|
445
|
+
);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/** Resolve the metallic-roughness texture info. */
|
|
449
|
+
get metallicRoughnessTexture(): GLTFTextureInfoIterator | undefined {
|
|
450
|
+
return this.getTextureInfo(
|
|
451
|
+
this.data.pbrMetallicRoughness?.metallicRoughnessTexture,
|
|
452
|
+
1,
|
|
453
|
+
'pbrMetallicRoughness.metallicRoughnessTexture'
|
|
454
|
+
);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/** Resolve the normal texture info. */
|
|
458
|
+
get normalTexture(): GLTFTextureInfoIterator | undefined {
|
|
459
|
+
return this.getTextureInfo(this.data.normalTexture, 2, 'normalTexture');
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/** Resolve the occlusion texture info. */
|
|
463
|
+
get occlusionTexture(): GLTFTextureInfoIterator | undefined {
|
|
464
|
+
return this.getTextureInfo(this.data.occlusionTexture, 3, 'occlusionTexture');
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/** Resolve the emissive texture info. */
|
|
468
|
+
get emissiveTexture(): GLTFTextureInfoIterator | undefined {
|
|
469
|
+
return this.getTextureInfo(this.data.emissiveTexture, 4, 'emissiveTexture');
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/** Resolve standard texture-info properties in their schema order. */
|
|
473
|
+
get textures(): IterableIterator<GLTFTextureInfoIterator> {
|
|
474
|
+
const textureInfos = [
|
|
475
|
+
this.baseColorTexture,
|
|
476
|
+
this.metallicRoughnessTexture,
|
|
477
|
+
this.normalTexture,
|
|
478
|
+
this.occlusionTexture,
|
|
479
|
+
this.emissiveTexture
|
|
480
|
+
].filter((textureInfo): textureInfo is GLTFTextureInfoIterator => Boolean(textureInfo));
|
|
481
|
+
return textureInfos.values();
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/** Wrap one optional standard material texture-info property. */
|
|
485
|
+
private getTextureInfo(
|
|
486
|
+
textureInfo:
|
|
487
|
+
| GLTFTextureInfo
|
|
488
|
+
| GLTFMaterialNormalTextureInfo
|
|
489
|
+
| GLTFMaterialOcclusionTextureInfo
|
|
490
|
+
| undefined,
|
|
491
|
+
index: number,
|
|
492
|
+
propertyPath: string
|
|
493
|
+
): GLTFTextureInfoIterator | undefined {
|
|
494
|
+
return textureInfo
|
|
495
|
+
? this.iterator.getOrCreateNested(
|
|
496
|
+
textureInfo,
|
|
497
|
+
() =>
|
|
498
|
+
new GLTFTextureInfoIterator(
|
|
499
|
+
this.iterator,
|
|
500
|
+
'textureInfo',
|
|
501
|
+
index,
|
|
502
|
+
textureInfo,
|
|
503
|
+
`${this.path}.${propertyPath}`,
|
|
504
|
+
this
|
|
505
|
+
)
|
|
506
|
+
)
|
|
507
|
+
: undefined;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/** Lightweight texture-info wrapper nested in a material. */
|
|
512
|
+
class GLTFTextureInfoIterator extends GLTFNestedObjectIterator<
|
|
513
|
+
GLTFTextureInfo | GLTFMaterialNormalTextureInfo | GLTFMaterialOcclusionTextureInfo,
|
|
514
|
+
'textureInfo',
|
|
515
|
+
GLTFMaterialIterator
|
|
516
|
+
> {
|
|
517
|
+
/** Resolve the texture referenced by the raw texture-info `index` field. */
|
|
518
|
+
get texture(): GLTFTextureIterator {
|
|
519
|
+
return this.iterator.resolveTexture(this.data.index, `${this.path}.index`);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/** Lightweight mesh wrapper. */
|
|
524
|
+
class GLTFMeshIterator extends GLTFObjectIterator<GLTFMesh, 'mesh'> {
|
|
525
|
+
/** Iterate mesh primitives in source order. */
|
|
526
|
+
get primitives(): IterableIterator<GLTFMeshPrimitiveIterator> {
|
|
527
|
+
return iterateValues(this.data.primitives, (primitive, primitiveIndex) =>
|
|
528
|
+
this.iterator.getOrCreateNested(
|
|
529
|
+
primitive,
|
|
530
|
+
() =>
|
|
531
|
+
new GLTFMeshPrimitiveIterator(
|
|
532
|
+
this.iterator,
|
|
533
|
+
'primitive',
|
|
534
|
+
primitiveIndex,
|
|
535
|
+
primitive,
|
|
536
|
+
`${this.path}.primitives[${primitiveIndex}]`,
|
|
537
|
+
this
|
|
538
|
+
)
|
|
539
|
+
)
|
|
540
|
+
);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
/** Lightweight mesh primitive wrapper. */
|
|
545
|
+
class GLTFMeshPrimitiveIterator extends GLTFNestedObjectIterator<
|
|
546
|
+
GLTFMeshPrimitive,
|
|
547
|
+
'primitive',
|
|
548
|
+
GLTFMeshIterator
|
|
549
|
+
> {
|
|
550
|
+
/** Resolve every vertex attribute accessor by semantic name. */
|
|
551
|
+
get attributes(): ReadonlyMap<string, GLTFAccessorIterator> {
|
|
552
|
+
return new Map(
|
|
553
|
+
Object.entries(this.data.attributes).map(([attributeName, accessorIndex]) => [
|
|
554
|
+
attributeName,
|
|
555
|
+
this.iterator.resolveAccessor(accessorIndex, `${this.path}.attributes.${attributeName}`)
|
|
556
|
+
])
|
|
557
|
+
);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/** Resolve the optional index accessor. */
|
|
561
|
+
get indices(): GLTFAccessorIterator | undefined {
|
|
562
|
+
return this.data.indices === undefined
|
|
563
|
+
? undefined
|
|
564
|
+
: this.iterator.resolveAccessor(this.data.indices, `${this.path}.indices`);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/** Resolve the optional material. */
|
|
568
|
+
get material(): GLTFMaterialIterator | undefined {
|
|
569
|
+
return this.data.material === undefined
|
|
570
|
+
? undefined
|
|
571
|
+
: this.iterator.resolveMaterial(this.data.material, `${this.path}.material`);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/** Resolve morph-target attribute accessors without rewriting target dictionaries. */
|
|
575
|
+
get targets(): ReadonlyArray<ReadonlyMap<string, GLTFAccessorIterator>> {
|
|
576
|
+
return (this.data.targets || []).map(
|
|
577
|
+
(target, targetIndex) =>
|
|
578
|
+
new Map(
|
|
579
|
+
Object.entries(target).map(([attributeName, accessorIndex]) => [
|
|
580
|
+
attributeName,
|
|
581
|
+
this.iterator.resolveAccessor(
|
|
582
|
+
accessorIndex,
|
|
583
|
+
`${this.path}.targets[${targetIndex}].${attributeName}`
|
|
584
|
+
)
|
|
585
|
+
])
|
|
586
|
+
)
|
|
587
|
+
);
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/** Lightweight node wrapper. */
|
|
592
|
+
class GLTFNodeIterator extends GLTFObjectIterator<GLTFNode, 'node'> {
|
|
593
|
+
/** Resolve the optional camera. */
|
|
594
|
+
get camera(): GLTFCameraIterator | undefined {
|
|
595
|
+
return this.data.camera === undefined
|
|
596
|
+
? undefined
|
|
597
|
+
: this.iterator.resolveCamera(this.data.camera, `${this.path}.camera`);
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
/** Iterate resolved child nodes in source order. */
|
|
601
|
+
get children(): IterableIterator<GLTFNodeIterator> {
|
|
602
|
+
return iterateValues(this.data.children || [], (childNodeIndex, childIndex) =>
|
|
603
|
+
this.iterator.resolveNode(childNodeIndex, `${this.path}.children[${childIndex}]`)
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
/** Resolve the optional skin. */
|
|
608
|
+
get skin(): GLTFSkinIterator | undefined {
|
|
609
|
+
return this.data.skin === undefined
|
|
610
|
+
? undefined
|
|
611
|
+
: this.iterator.resolveSkin(this.data.skin, `${this.path}.skin`);
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
/** Resolve the optional mesh definition. */
|
|
615
|
+
get mesh(): GLTFMeshIterator | undefined {
|
|
616
|
+
return this.data.mesh === undefined
|
|
617
|
+
? undefined
|
|
618
|
+
: this.iterator.resolveMesh(this.data.mesh, `${this.path}.mesh`);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/** Resolve the optional draft glTF 2.1 external asset. */
|
|
622
|
+
get externalAsset(): GLTFExternalAssetIterator | undefined {
|
|
623
|
+
return this.data.externalAsset === undefined
|
|
624
|
+
? undefined
|
|
625
|
+
: this.iterator.resolveExternalAsset(this.data.externalAsset, `${this.path}.externalAsset`);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/** Lightweight texture sampler wrapper. */
|
|
630
|
+
class GLTFSamplerIterator extends GLTFObjectIterator<GLTFSampler, 'sampler'> {}
|
|
631
|
+
|
|
632
|
+
/** Lightweight scene wrapper. */
|
|
633
|
+
class GLTFSceneIterator extends GLTFObjectIterator<GLTFScene, 'scene'> {
|
|
634
|
+
/** Iterate resolved scene root nodes in source order. */
|
|
635
|
+
get nodes(): IterableIterator<GLTFNodeIterator> {
|
|
636
|
+
return iterateValues(this.data.nodes || [], (nodeIndex, sceneNodeIndex) =>
|
|
637
|
+
this.iterator.resolveNode(nodeIndex, `${this.path}.nodes[${sceneNodeIndex}]`)
|
|
638
|
+
);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
/** Lightweight skin wrapper. */
|
|
643
|
+
class GLTFSkinIterator extends GLTFObjectIterator<GLTFSkin, 'skin'> {
|
|
644
|
+
/** Resolve the optional inverse-bind-matrix accessor. */
|
|
645
|
+
get inverseBindMatrices(): GLTFAccessorIterator | undefined {
|
|
646
|
+
return this.data.inverseBindMatrices === undefined
|
|
647
|
+
? undefined
|
|
648
|
+
: this.iterator.resolveAccessor(
|
|
649
|
+
this.data.inverseBindMatrices,
|
|
650
|
+
`${this.path}.inverseBindMatrices`
|
|
651
|
+
);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/** Resolve the optional skeleton root node. */
|
|
655
|
+
get skeleton(): GLTFNodeIterator | undefined {
|
|
656
|
+
return this.data.skeleton === undefined
|
|
657
|
+
? undefined
|
|
658
|
+
: this.iterator.resolveNode(this.data.skeleton, `${this.path}.skeleton`);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
/** Iterate resolved joint nodes in source order. */
|
|
662
|
+
get joints(): IterableIterator<GLTFNodeIterator> {
|
|
663
|
+
return iterateValues(this.data.joints, (jointNodeIndex, jointIndex) =>
|
|
664
|
+
this.iterator.resolveNode(jointNodeIndex, `${this.path}.joints[${jointIndex}]`)
|
|
665
|
+
);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
/** Lightweight texture wrapper. */
|
|
670
|
+
class GLTFTextureIterator extends GLTFObjectIterator<GLTFTexture, 'texture'> {
|
|
671
|
+
/** Resolve the optional sampler. */
|
|
672
|
+
get sampler(): GLTFSamplerIterator | undefined {
|
|
673
|
+
return this.data.sampler === undefined
|
|
674
|
+
? undefined
|
|
675
|
+
: this.iterator.resolveSampler(this.data.sampler, `${this.path}.sampler`);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/** Resolve the optional source image. */
|
|
679
|
+
get source(): GLTFImageIterator | undefined {
|
|
680
|
+
return this.data.source === undefined
|
|
681
|
+
? undefined
|
|
682
|
+
: this.iterator.resolveImage(this.data.source, `${this.path}.source`);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
/**
|
|
687
|
+
* Traverse and transform raw glTF data through lazy, identity-preserving object wrappers.
|
|
688
|
+
*
|
|
689
|
+
* The iterator never clones, links, normalizes, or otherwise postprocesses its input. Wrapper
|
|
690
|
+
* `data` fields are the original mutable JSON objects so extension handlers can transform them in
|
|
691
|
+
* place while using typed reference getters for navigation.
|
|
692
|
+
*/
|
|
693
|
+
export class GLTFIterator {
|
|
694
|
+
/** Original glTF container traversed by this iterator. */
|
|
695
|
+
readonly gltf: GLTFWithBuffers;
|
|
696
|
+
|
|
697
|
+
/** Cached wrapper for each raw source object. */
|
|
698
|
+
private readonly objectCache = new WeakMap<object, GLTFObjectIterator<any, any>>();
|
|
699
|
+
|
|
700
|
+
/** Cached lazy reference facades keyed by their source wrapper. */
|
|
701
|
+
private readonly referencesCache = new WeakMap<object, GLTFIteratorReferences>();
|
|
702
|
+
|
|
703
|
+
/** Create an iterator over an existing parsed glTF container. */
|
|
704
|
+
constructor(gltf: GLTFWithBuffers) {
|
|
705
|
+
this.gltf = gltf;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/** Exact unmodified glTF JSON root. */
|
|
709
|
+
get data(): GLTF {
|
|
710
|
+
return this.gltf.json;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/** Return the loaded bytes addressed by a raw bufferView index. */
|
|
714
|
+
getTypedArrayForBufferView(bufferViewIndex: number): Uint8Array {
|
|
715
|
+
return getBufferViewTypedArray(this.data, this.gltf.buffers, bufferViewIndex);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/** Return the loaded typed values addressed by a raw accessor index or decoded accessor. */
|
|
719
|
+
getTypedArrayForAccessor(accessor: GLTFAccessor | number): BigTypedArray {
|
|
720
|
+
return getAccessorTypedArray(this.data, this.gltf.buffers, accessor);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
/** Return the loaded bytes addressed by a raw image index. */
|
|
724
|
+
getTypedArrayForImageData(imageIndex: number): Uint8Array {
|
|
725
|
+
return getImageTypedArray(this.data, this.gltf.buffers, imageIndex);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/** Return the loaded buffer companion for a raw buffer definition. */
|
|
729
|
+
getLoadedBuffer(buffer: GLTFBuffer): GLTFWithBuffers['buffers'][number] | undefined {
|
|
730
|
+
const metadata = this.getMetadata(buffer);
|
|
731
|
+
return this.gltf.buffers[metadata.index];
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
/** Return the loaded byte range for a raw buffer-view definition. */
|
|
735
|
+
getLoadedBufferView(bufferView: GLTFBufferView): Uint8Array | undefined {
|
|
736
|
+
const buffer = this.getReferences(bufferView).buffer;
|
|
737
|
+
const loadedBuffer = this.getLoadedBuffer(buffer);
|
|
738
|
+
if (!loadedBuffer) {
|
|
739
|
+
return undefined;
|
|
740
|
+
}
|
|
741
|
+
const byteOffset = loadedBuffer.byteOffset + (bufferView.byteOffset || 0);
|
|
742
|
+
return new Uint8Array(loadedBuffer.arrayBuffer, byteOffset, bufferView.byteLength);
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/** Return the loaded image companion for a raw image definition. */
|
|
746
|
+
getLoadedImage(image: GLTFImage): NonNullable<GLTFWithBuffers['images']>[number] | undefined {
|
|
747
|
+
return this.gltf.images?.[this.getMetadata(image).index];
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/** Return the loaded file companion for a raw file definition. */
|
|
751
|
+
getLoadedFile(file: GLTFFile): NonNullable<GLTFWithBuffers['files']>[number] | undefined {
|
|
752
|
+
return this.gltf.files?.[this.getMetadata(file).index];
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/** Return the loaded asset companion for a raw external-asset definition. */
|
|
756
|
+
getLoadedExternalAsset(externalAsset: GLTFExternalAsset): GLTFWithBuffers | null | undefined {
|
|
757
|
+
return this.gltf.externalAssets?.[this.getMetadata(externalAsset).index];
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
/** Append loaded bytes and a raw buffer definition, returning the new buffer index. */
|
|
761
|
+
addBuffer(array: ArrayBufferView): number {
|
|
762
|
+
const arrayBuffer = array.buffer.slice(
|
|
763
|
+
array.byteOffset,
|
|
764
|
+
array.byteOffset + array.byteLength
|
|
765
|
+
) as ArrayBuffer;
|
|
766
|
+
this.gltf.buffers.push({arrayBuffer, byteOffset: 0, byteLength: array.byteLength});
|
|
767
|
+
this.data.buffers ||= [];
|
|
768
|
+
this.data.buffers.push({byteLength: array.byteLength});
|
|
769
|
+
return this.data.buffers.length - 1;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
/** Append a raw bufferView definition and return its index. */
|
|
773
|
+
addBufferView(bufferIndex: number, byteLength: number, byteOffset = 0): number {
|
|
774
|
+
this.data.bufferViews ||= [];
|
|
775
|
+
this.data.bufferViews.push({buffer: bufferIndex, byteOffset, byteLength});
|
|
776
|
+
return this.data.bufferViews.length - 1;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/** Append a raw accessor definition and return its index. */
|
|
780
|
+
addAccessor(
|
|
781
|
+
bufferViewIndex: number,
|
|
782
|
+
accessor: {
|
|
783
|
+
size: number;
|
|
784
|
+
componentType: number;
|
|
785
|
+
count: number;
|
|
786
|
+
min?: number[];
|
|
787
|
+
max?: number[];
|
|
788
|
+
}
|
|
789
|
+
): number {
|
|
790
|
+
this.data.accessors ||= [];
|
|
791
|
+
this.data.accessors.push({
|
|
792
|
+
bufferView: bufferViewIndex,
|
|
793
|
+
type: getAccessorTypeFromSize(accessor.size),
|
|
794
|
+
componentType: accessor.componentType,
|
|
795
|
+
count: accessor.count,
|
|
796
|
+
min: accessor.min,
|
|
797
|
+
max: accessor.max
|
|
798
|
+
});
|
|
799
|
+
return this.data.accessors.length - 1;
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
/** Return lazily resolved standard relationships for a raw glTF object. */
|
|
803
|
+
getReferences(object: GLTFAccessor): GLTFAccessorReferences;
|
|
804
|
+
getReferences(object: GLTFAnimation): GLTFAnimationReferences;
|
|
805
|
+
getReferences(object: GLTFAnimationChannel): GLTFAnimationChannelReferences;
|
|
806
|
+
getReferences(object: GLTFAnimationChannelTarget): GLTFAnimationChannelTargetReferences;
|
|
807
|
+
getReferences(object: GLTFAnimationSampler): GLTFAnimationSamplerReferences;
|
|
808
|
+
getReferences(object: GLTFBufferView): GLTFBufferViewReferences;
|
|
809
|
+
getReferences(object: GLTFExternalAsset): GLTFExternalAssetReferences;
|
|
810
|
+
getReferences(object: GLTFFile): GLTFBufferViewOwnerReferences;
|
|
811
|
+
getReferences(object: GLTFImage): GLTFBufferViewOwnerReferences;
|
|
812
|
+
getReferences(object: GLTFMaterial): GLTFMaterialReferences;
|
|
813
|
+
getReferences(object: GLTFTextureInfo): GLTFTextureInfoReferences;
|
|
814
|
+
getReferences(object: GLTFMesh): GLTFMeshReferences;
|
|
815
|
+
getReferences(object: GLTFMeshPrimitive): GLTFMeshPrimitiveReferences;
|
|
816
|
+
getReferences(object: GLTFNode): GLTFNodeReferences;
|
|
817
|
+
getReferences(object: GLTFScene): GLTFSceneReferences;
|
|
818
|
+
getReferences(object: GLTFSkin): GLTFSkinReferences;
|
|
819
|
+
getReferences(object: GLTFTexture): GLTFTextureReferences;
|
|
820
|
+
getReferences(object: GLTFIteratorData): GLTFIteratorReferences {
|
|
821
|
+
const cachedReferences = this.referencesCache.get(object);
|
|
822
|
+
if (cachedReferences) {
|
|
823
|
+
return cachedReferences;
|
|
824
|
+
}
|
|
825
|
+
const objectIterator = this.getObjectIterator(object);
|
|
826
|
+
const references = createReferences(objectIterator);
|
|
827
|
+
this.referencesCache.set(object, references);
|
|
828
|
+
return references;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/** Return iterator-owned metadata for a raw glTF object. */
|
|
832
|
+
getMetadata(object: GLTFIteratorData): GLTFIteratorMetadata {
|
|
833
|
+
const objectIterator = this.getObjectIterator(object);
|
|
834
|
+
const parent =
|
|
835
|
+
objectIterator instanceof GLTFNestedObjectIterator ? objectIterator.parent.data : undefined;
|
|
836
|
+
return {
|
|
837
|
+
gltf: this.gltf,
|
|
838
|
+
type: objectIterator.type,
|
|
839
|
+
index: objectIterator.index,
|
|
840
|
+
parent,
|
|
841
|
+
path: objectIterator.path
|
|
842
|
+
};
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/** Resolve the default scene. */
|
|
846
|
+
get scene(): GLTFScene | undefined {
|
|
847
|
+
return this.data.scene === undefined
|
|
848
|
+
? undefined
|
|
849
|
+
: this.resolveScene(this.data.scene, 'scene').data;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
/** Resolve the optional draft glTF 2.1 thumbnail image. */
|
|
853
|
+
get thumbnail(): GLTFImage | undefined {
|
|
854
|
+
return this.data.asset.thumbnail === undefined
|
|
855
|
+
? undefined
|
|
856
|
+
: this.resolveImage(this.data.asset.thumbnail, 'asset.thumbnail').data;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
/** Iterate raw accessors in source order. */
|
|
860
|
+
get accessors(): IterableIterator<GLTFAccessor> {
|
|
861
|
+
return this.iterateCollectionData('accessor') as IterableIterator<GLTFAccessor>;
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
/** Iterate raw animations in source order. */
|
|
865
|
+
get animations(): IterableIterator<GLTFAnimation> {
|
|
866
|
+
return this.iterateCollectionData('animation') as IterableIterator<GLTFAnimation>;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/** Iterate raw buffers in source order. */
|
|
870
|
+
get buffers(): IterableIterator<GLTFBuffer> {
|
|
871
|
+
return this.iterateCollectionData('buffer') as IterableIterator<GLTFBuffer>;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
/** Iterate raw buffer views in source order. */
|
|
875
|
+
get bufferViews(): IterableIterator<GLTFBufferView> {
|
|
876
|
+
return this.iterateCollectionData('bufferView') as IterableIterator<GLTFBufferView>;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
/** Iterate raw cameras in source order. */
|
|
880
|
+
get cameras(): IterableIterator<GLTFCamera> {
|
|
881
|
+
return this.iterateCollectionData('camera') as IterableIterator<GLTFCamera>;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
/** Iterate raw draft glTF 2.1 external assets in source order. */
|
|
885
|
+
get externalAssets(): IterableIterator<GLTFExternalAsset> {
|
|
886
|
+
return this.iterateCollectionData('externalAsset') as IterableIterator<GLTFExternalAsset>;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
/** Iterate raw draft glTF 2.1 files in source order. */
|
|
890
|
+
get files(): IterableIterator<GLTFFile> {
|
|
891
|
+
return this.iterateCollectionData('file') as IterableIterator<GLTFFile>;
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
/** Iterate raw images in source order. */
|
|
895
|
+
get images(): IterableIterator<GLTFImage> {
|
|
896
|
+
return this.iterateCollectionData('image') as IterableIterator<GLTFImage>;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
/** Iterate raw materials in source order. */
|
|
900
|
+
get materials(): IterableIterator<GLTFMaterial> {
|
|
901
|
+
return this.iterateCollectionData('material') as IterableIterator<GLTFMaterial>;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
/** Iterate raw mesh definitions in source order. */
|
|
905
|
+
get meshes(): IterableIterator<GLTFMesh> {
|
|
906
|
+
return this.iterateCollectionData('mesh') as IterableIterator<GLTFMesh>;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
/** Iterate raw nodes in source order. */
|
|
910
|
+
get nodes(): IterableIterator<GLTFNode> {
|
|
911
|
+
return this.iterateCollectionData('node') as IterableIterator<GLTFNode>;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
/** Iterate raw texture samplers in source order. */
|
|
915
|
+
get samplers(): IterableIterator<GLTFSampler> {
|
|
916
|
+
return this.iterateCollectionData('sampler') as IterableIterator<GLTFSampler>;
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
/** Iterate raw scenes in source order. */
|
|
920
|
+
get scenes(): IterableIterator<GLTFScene> {
|
|
921
|
+
return this.iterateCollectionData('scene') as IterableIterator<GLTFScene>;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
/** Iterate raw skins in source order. */
|
|
925
|
+
get skins(): IterableIterator<GLTFSkin> {
|
|
926
|
+
return this.iterateCollectionData('skin') as IterableIterator<GLTFSkin>;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
/** Iterate raw textures in source order. */
|
|
930
|
+
get textures(): IterableIterator<GLTFTexture> {
|
|
931
|
+
return this.iterateCollectionData('texture') as IterableIterator<GLTFTexture>;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
/** Return whether an extension is declared used or required. */
|
|
935
|
+
hasExtension(extensionName: string): boolean {
|
|
936
|
+
return (
|
|
937
|
+
Boolean(this.data.extensionsUsed?.includes(extensionName)) ||
|
|
938
|
+
Boolean(this.data.extensionsRequired?.includes(extensionName))
|
|
939
|
+
);
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
/** Return whether an extension is declared required. */
|
|
943
|
+
isExtensionRequired(extensionName: string): boolean {
|
|
944
|
+
return Boolean(this.data.extensionsRequired?.includes(extensionName));
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
/** Return an extension payload from the root or a wrapped raw object without modifying it. */
|
|
948
|
+
getExtension<ExtensionT = unknown>(extensionName: string): ExtensionT | undefined;
|
|
949
|
+
getExtension<ExtensionT = unknown>(
|
|
950
|
+
object: GLTFIteratorData,
|
|
951
|
+
extensionName: string
|
|
952
|
+
): ExtensionT | undefined;
|
|
953
|
+
getExtension<ExtensionT = unknown>(
|
|
954
|
+
objectOrExtensionName: GLTFIteratorData | string,
|
|
955
|
+
objectExtensionName?: string
|
|
956
|
+
): ExtensionT | undefined {
|
|
957
|
+
const data = typeof objectOrExtensionName === 'string' ? this.data : objectOrExtensionName;
|
|
958
|
+
const extensionName =
|
|
959
|
+
typeof objectOrExtensionName === 'string' ? objectOrExtensionName : objectExtensionName!;
|
|
960
|
+
return data.extensions?.[extensionName] as ExtensionT | undefined;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
/** Set an extension payload on the root or a wrapped raw object and register it as used. */
|
|
964
|
+
setExtension<ExtensionT>(extensionName: string, extension: ExtensionT, required?: boolean): void;
|
|
965
|
+
setExtension<ExtensionT>(
|
|
966
|
+
object: GLTFIteratorData,
|
|
967
|
+
extensionName: string,
|
|
968
|
+
extension: ExtensionT
|
|
969
|
+
): void;
|
|
970
|
+
setExtension<ExtensionT>(
|
|
971
|
+
objectOrExtensionName: GLTFIteratorData | string,
|
|
972
|
+
extensionNameOrExtension: string | ExtensionT,
|
|
973
|
+
extensionOrRequired?: ExtensionT | boolean
|
|
974
|
+
): void {
|
|
975
|
+
const isRootExtension = typeof objectOrExtensionName === 'string';
|
|
976
|
+
const data = isRootExtension ? this.data : objectOrExtensionName;
|
|
977
|
+
const extensionName = isRootExtension
|
|
978
|
+
? objectOrExtensionName
|
|
979
|
+
: (extensionNameOrExtension as string);
|
|
980
|
+
const extension = isRootExtension
|
|
981
|
+
? (extensionNameOrExtension as ExtensionT)
|
|
982
|
+
: (extensionOrRequired as ExtensionT);
|
|
983
|
+
const required = isRootExtension ? Boolean(extensionOrRequired) : false;
|
|
984
|
+
data.extensions ||= {};
|
|
985
|
+
data.extensions[extensionName] = extension;
|
|
986
|
+
this.registerUsedExtension(extensionName);
|
|
987
|
+
if (required) {
|
|
988
|
+
this.registerRequiredExtension(extensionName);
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
/** Register an extension in `extensionsUsed`. */
|
|
993
|
+
registerUsedExtension(extensionName: string): void {
|
|
994
|
+
this.data.extensionsUsed ||= [];
|
|
995
|
+
if (!this.data.extensionsUsed.includes(extensionName)) {
|
|
996
|
+
this.data.extensionsUsed.push(extensionName);
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
/** Register an extension in both `extensionsUsed` and `extensionsRequired`. */
|
|
1001
|
+
registerRequiredExtension(extensionName: string): void {
|
|
1002
|
+
this.registerUsedExtension(extensionName);
|
|
1003
|
+
this.data.extensionsRequired ||= [];
|
|
1004
|
+
if (!this.data.extensionsRequired.includes(extensionName)) {
|
|
1005
|
+
this.data.extensionsRequired.push(extensionName);
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
/** Remove extension data from the root or a wrapped raw object. */
|
|
1010
|
+
removeExtension(extensionName: string): void;
|
|
1011
|
+
removeExtension(object: GLTFIteratorData, extensionName: string): void;
|
|
1012
|
+
removeExtension(
|
|
1013
|
+
objectOrExtensionName: GLTFIteratorData | string,
|
|
1014
|
+
objectExtensionName?: string
|
|
1015
|
+
): void {
|
|
1016
|
+
const isRootExtension = typeof objectOrExtensionName === 'string';
|
|
1017
|
+
const data = isRootExtension ? this.data : objectOrExtensionName;
|
|
1018
|
+
const extensionName = isRootExtension ? objectOrExtensionName : objectExtensionName!;
|
|
1019
|
+
if (data.extensions?.[extensionName] !== undefined) {
|
|
1020
|
+
this.recordRemovedExtension(extensionName);
|
|
1021
|
+
delete data.extensions[extensionName];
|
|
1022
|
+
}
|
|
1023
|
+
if (isRootExtension) {
|
|
1024
|
+
removeString(this.data.extensionsUsed, extensionName);
|
|
1025
|
+
removeString(this.data.extensionsRequired, extensionName);
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
/** Record that an extension payload was consumed by a transformation. */
|
|
1030
|
+
recordRemovedExtension(extensionName: string): void {
|
|
1031
|
+
const json = this.data as GLTF & {extensionsRemoved?: string[]};
|
|
1032
|
+
json.extensionsRemoved ||= [];
|
|
1033
|
+
if (!json.extensionsRemoved.includes(extensionName)) {
|
|
1034
|
+
json.extensionsRemoved.push(extensionName);
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
/** Resolve an accessor reference. */
|
|
1039
|
+
resolveAccessor(index: number, sourcePath: string): GLTFAccessorIterator {
|
|
1040
|
+
return this.resolveCollectionObject('accessor', index, sourcePath) as GLTFAccessorIterator;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
/** Resolve a buffer reference. */
|
|
1044
|
+
resolveBuffer(index: number, sourcePath: string): GLTFBufferIterator {
|
|
1045
|
+
return this.resolveCollectionObject('buffer', index, sourcePath) as GLTFBufferIterator;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
/** Resolve a buffer-view reference. */
|
|
1049
|
+
resolveBufferView(index: number, sourcePath: string): GLTFBufferViewIterator {
|
|
1050
|
+
return this.resolveCollectionObject('bufferView', index, sourcePath) as GLTFBufferViewIterator;
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
/** Resolve a camera reference. */
|
|
1054
|
+
resolveCamera(index: number, sourcePath: string): GLTFCameraIterator {
|
|
1055
|
+
return this.resolveCollectionObject('camera', index, sourcePath) as GLTFCameraIterator;
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
/** Resolve a draft external-asset reference. */
|
|
1059
|
+
resolveExternalAsset(index: number, sourcePath: string): GLTFExternalAssetIterator {
|
|
1060
|
+
return this.resolveCollectionObject(
|
|
1061
|
+
'externalAsset',
|
|
1062
|
+
index,
|
|
1063
|
+
sourcePath
|
|
1064
|
+
) as GLTFExternalAssetIterator;
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
/** Resolve a draft file reference. */
|
|
1068
|
+
resolveFile(index: number, sourcePath: string): GLTFFileIterator {
|
|
1069
|
+
return this.resolveCollectionObject('file', index, sourcePath) as GLTFFileIterator;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
/** Resolve an image reference. */
|
|
1073
|
+
resolveImage(index: number, sourcePath: string): GLTFImageIterator {
|
|
1074
|
+
return this.resolveCollectionObject('image', index, sourcePath) as GLTFImageIterator;
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
/** Resolve a material reference. */
|
|
1078
|
+
resolveMaterial(index: number, sourcePath: string): GLTFMaterialIterator {
|
|
1079
|
+
return this.resolveCollectionObject('material', index, sourcePath) as GLTFMaterialIterator;
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
/** Resolve a mesh reference. */
|
|
1083
|
+
resolveMesh(index: number, sourcePath: string): GLTFMeshIterator {
|
|
1084
|
+
return this.resolveCollectionObject('mesh', index, sourcePath) as GLTFMeshIterator;
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
/** Resolve a node reference. */
|
|
1088
|
+
resolveNode(index: number, sourcePath: string): GLTFNodeIterator {
|
|
1089
|
+
return this.resolveCollectionObject('node', index, sourcePath) as GLTFNodeIterator;
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
/** Resolve a sampler reference. */
|
|
1093
|
+
resolveSampler(index: number, sourcePath: string): GLTFSamplerIterator {
|
|
1094
|
+
return this.resolveCollectionObject('sampler', index, sourcePath) as GLTFSamplerIterator;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
/** Resolve a scene reference. */
|
|
1098
|
+
resolveScene(index: number, sourcePath: string): GLTFSceneIterator {
|
|
1099
|
+
return this.resolveCollectionObject('scene', index, sourcePath) as GLTFSceneIterator;
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
/** Resolve a skin reference. */
|
|
1103
|
+
resolveSkin(index: number, sourcePath: string): GLTFSkinIterator {
|
|
1104
|
+
return this.resolveCollectionObject('skin', index, sourcePath) as GLTFSkinIterator;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
/** Resolve a texture reference. */
|
|
1108
|
+
resolveTexture(index: number, sourcePath: string): GLTFTextureIterator {
|
|
1109
|
+
return this.resolveCollectionObject('texture', index, sourcePath) as GLTFTextureIterator;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
/** Return a cached nested wrapper or create it once. */
|
|
1113
|
+
getOrCreateNested<IteratorT extends GLTFObjectIterator<any, any>>(
|
|
1114
|
+
data: object,
|
|
1115
|
+
createIterator: () => IteratorT
|
|
1116
|
+
): IteratorT {
|
|
1117
|
+
return this.getOrCreate(data, createIterator);
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
/** Iterate one top-level glTF collection lazily. */
|
|
1121
|
+
private iterateCollection(
|
|
1122
|
+
type: GLTFCollectionType
|
|
1123
|
+
): IterableIterator<GLTFObjectIterator<any, any>> {
|
|
1124
|
+
const values = this.getCollection(type);
|
|
1125
|
+
return iterateValues(values, (_, index) => this.resolveCollectionObject(type, index, type));
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
/** Iterate exact raw objects from one top-level glTF collection. */
|
|
1129
|
+
private iterateCollectionData(type: GLTFCollectionType): IterableIterator<GLTFIteratorData> {
|
|
1130
|
+
return (function* iterateRawObjects(
|
|
1131
|
+
iterator: GLTFIterator
|
|
1132
|
+
): IterableIterator<GLTFIteratorData> {
|
|
1133
|
+
for (const objectIterator of iterator.iterateCollection(type)) {
|
|
1134
|
+
yield objectIterator.data;
|
|
1135
|
+
}
|
|
1136
|
+
})(this);
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
/** Return the registered internal context for a raw glTF object. */
|
|
1140
|
+
private getObjectIterator(object: GLTFIteratorData): GLTFObjectIterator<any, any> {
|
|
1141
|
+
const objectIterator = this.objectCache.get(object);
|
|
1142
|
+
if (!objectIterator) {
|
|
1143
|
+
throw new Error('glTF object is not registered with this iterator');
|
|
1144
|
+
}
|
|
1145
|
+
return objectIterator;
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
/** Resolve and cache one top-level collection object. */
|
|
1149
|
+
private resolveCollectionObject(
|
|
1150
|
+
type: GLTFCollectionType,
|
|
1151
|
+
index: number,
|
|
1152
|
+
sourcePath: string
|
|
1153
|
+
): GLTFObjectIterator<any, any> {
|
|
1154
|
+
const values = this.getCollection(type);
|
|
1155
|
+
const data = values[index] as GLTFIteratorData | undefined;
|
|
1156
|
+
if (!data) {
|
|
1157
|
+
throw new Error(
|
|
1158
|
+
`Invalid glTF reference at ${sourcePath}: ${type} index ${index} is out of range`
|
|
1159
|
+
);
|
|
1160
|
+
}
|
|
1161
|
+
return this.getOrCreate(data, () => this.createCollectionObject(type, index, data));
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
/** Return the raw array corresponding to a top-level wrapper type. */
|
|
1165
|
+
private getCollection(type: GLTFCollectionType): GLTFIteratorData[] {
|
|
1166
|
+
switch (type) {
|
|
1167
|
+
case 'accessor':
|
|
1168
|
+
return this.data.accessors || [];
|
|
1169
|
+
case 'animation':
|
|
1170
|
+
return this.data.animations || [];
|
|
1171
|
+
case 'buffer':
|
|
1172
|
+
return this.data.buffers || [];
|
|
1173
|
+
case 'bufferView':
|
|
1174
|
+
return this.data.bufferViews || [];
|
|
1175
|
+
case 'camera':
|
|
1176
|
+
return this.data.cameras || [];
|
|
1177
|
+
case 'externalAsset':
|
|
1178
|
+
return this.data.externalAssets || [];
|
|
1179
|
+
case 'file':
|
|
1180
|
+
return this.data.files || [];
|
|
1181
|
+
case 'image':
|
|
1182
|
+
return this.data.images || [];
|
|
1183
|
+
case 'material':
|
|
1184
|
+
return this.data.materials || [];
|
|
1185
|
+
case 'mesh':
|
|
1186
|
+
return this.data.meshes || [];
|
|
1187
|
+
case 'node':
|
|
1188
|
+
return this.data.nodes || [];
|
|
1189
|
+
case 'sampler':
|
|
1190
|
+
return this.data.samplers || [];
|
|
1191
|
+
case 'scene':
|
|
1192
|
+
return this.data.scenes || [];
|
|
1193
|
+
case 'skin':
|
|
1194
|
+
return this.data.skins || [];
|
|
1195
|
+
case 'texture':
|
|
1196
|
+
return this.data.textures || [];
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
/** Create one correctly typed top-level wrapper. */
|
|
1201
|
+
private createCollectionObject(
|
|
1202
|
+
type: GLTFCollectionType,
|
|
1203
|
+
index: number,
|
|
1204
|
+
data: GLTFIteratorData
|
|
1205
|
+
): GLTFObjectIterator<any, any> {
|
|
1206
|
+
const path = `${getCollectionName(type)}[${index}]`;
|
|
1207
|
+
switch (type) {
|
|
1208
|
+
case 'accessor':
|
|
1209
|
+
return new GLTFAccessorIterator(this, type, index, data as GLTFAccessor, path);
|
|
1210
|
+
case 'animation':
|
|
1211
|
+
return new GLTFAnimationIterator(this, type, index, data as GLTFAnimation, path);
|
|
1212
|
+
case 'buffer':
|
|
1213
|
+
return new GLTFBufferIterator(this, type, index, data as GLTFBuffer, path);
|
|
1214
|
+
case 'bufferView':
|
|
1215
|
+
return new GLTFBufferViewIterator(this, type, index, data as GLTFBufferView, path);
|
|
1216
|
+
case 'camera':
|
|
1217
|
+
return new GLTFCameraIterator(this, type, index, data as GLTFCamera, path);
|
|
1218
|
+
case 'externalAsset':
|
|
1219
|
+
return new GLTFExternalAssetIterator(this, type, index, data as GLTFExternalAsset, path);
|
|
1220
|
+
case 'file':
|
|
1221
|
+
return new GLTFFileIterator(this, type, index, data as GLTFFile, path);
|
|
1222
|
+
case 'image':
|
|
1223
|
+
return new GLTFImageIterator(this, type, index, data as GLTFImage, path);
|
|
1224
|
+
case 'material':
|
|
1225
|
+
return new GLTFMaterialIterator(this, type, index, data as GLTFMaterial, path);
|
|
1226
|
+
case 'mesh':
|
|
1227
|
+
return new GLTFMeshIterator(this, type, index, data as GLTFMesh, path);
|
|
1228
|
+
case 'node':
|
|
1229
|
+
return new GLTFNodeIterator(this, type, index, data as GLTFNode, path);
|
|
1230
|
+
case 'sampler':
|
|
1231
|
+
return new GLTFSamplerIterator(this, type, index, data as GLTFSampler, path);
|
|
1232
|
+
case 'scene':
|
|
1233
|
+
return new GLTFSceneIterator(this, type, index, data as GLTFScene, path);
|
|
1234
|
+
case 'skin':
|
|
1235
|
+
return new GLTFSkinIterator(this, type, index, data as GLTFSkin, path);
|
|
1236
|
+
case 'texture':
|
|
1237
|
+
return new GLTFTextureIterator(this, type, index, data as GLTFTexture, path);
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
/** Reuse a wrapper for the same raw source object. */
|
|
1242
|
+
private getOrCreate<IteratorT extends GLTFObjectIterator<any, any>>(
|
|
1243
|
+
data: object,
|
|
1244
|
+
createIterator: () => IteratorT
|
|
1245
|
+
): IteratorT {
|
|
1246
|
+
const cachedIterator = this.objectCache.get(data);
|
|
1247
|
+
if (cachedIterator) {
|
|
1248
|
+
return cachedIterator as IteratorT;
|
|
1249
|
+
}
|
|
1250
|
+
const iterator = createIterator();
|
|
1251
|
+
this.objectCache.set(data, iterator);
|
|
1252
|
+
return iterator;
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
/** Build a lazy relationship facade without resolving any links during construction. */
|
|
1257
|
+
function createReferences(object: GLTFObjectIterator<any, any>): GLTFIteratorReferences {
|
|
1258
|
+
switch (object.type) {
|
|
1259
|
+
case 'accessor':
|
|
1260
|
+
return {
|
|
1261
|
+
get bufferView() {
|
|
1262
|
+
return (object as GLTFAccessorIterator).bufferView?.data;
|
|
1263
|
+
}
|
|
1264
|
+
};
|
|
1265
|
+
case 'animation':
|
|
1266
|
+
return {
|
|
1267
|
+
get channels() {
|
|
1268
|
+
return iterateObjectData((object as GLTFAnimationIterator).channels);
|
|
1269
|
+
},
|
|
1270
|
+
get samplers() {
|
|
1271
|
+
return iterateObjectData((object as GLTFAnimationIterator).samplers);
|
|
1272
|
+
}
|
|
1273
|
+
};
|
|
1274
|
+
case 'animationChannel':
|
|
1275
|
+
return {
|
|
1276
|
+
get sampler() {
|
|
1277
|
+
return (object as GLTFAnimationChannelIterator).sampler.data;
|
|
1278
|
+
},
|
|
1279
|
+
get target() {
|
|
1280
|
+
return (object as GLTFAnimationChannelIterator).target.data;
|
|
1281
|
+
}
|
|
1282
|
+
};
|
|
1283
|
+
case 'animationChannelTarget':
|
|
1284
|
+
return {
|
|
1285
|
+
get node() {
|
|
1286
|
+
return (object as GLTFAnimationChannelTargetIterator).node?.data;
|
|
1287
|
+
}
|
|
1288
|
+
};
|
|
1289
|
+
case 'animationSampler':
|
|
1290
|
+
return {
|
|
1291
|
+
get input() {
|
|
1292
|
+
return (object as GLTFAnimationSamplerIterator).input.data;
|
|
1293
|
+
},
|
|
1294
|
+
get output() {
|
|
1295
|
+
return (object as GLTFAnimationSamplerIterator).output.data;
|
|
1296
|
+
}
|
|
1297
|
+
};
|
|
1298
|
+
case 'bufferView':
|
|
1299
|
+
return {
|
|
1300
|
+
get buffer() {
|
|
1301
|
+
return (object as GLTFBufferViewIterator).buffer.data;
|
|
1302
|
+
}
|
|
1303
|
+
};
|
|
1304
|
+
case 'externalAsset':
|
|
1305
|
+
return {
|
|
1306
|
+
get file() {
|
|
1307
|
+
return (object as GLTFExternalAssetIterator).file.data;
|
|
1308
|
+
}
|
|
1309
|
+
};
|
|
1310
|
+
case 'file':
|
|
1311
|
+
case 'image':
|
|
1312
|
+
return {
|
|
1313
|
+
get bufferView() {
|
|
1314
|
+
return (object as GLTFFileIterator | GLTFImageIterator).bufferView?.data;
|
|
1315
|
+
}
|
|
1316
|
+
};
|
|
1317
|
+
case 'material':
|
|
1318
|
+
return {
|
|
1319
|
+
get baseColorTexture() {
|
|
1320
|
+
return (object as GLTFMaterialIterator).baseColorTexture?.data;
|
|
1321
|
+
},
|
|
1322
|
+
get metallicRoughnessTexture() {
|
|
1323
|
+
return (object as GLTFMaterialIterator).metallicRoughnessTexture?.data;
|
|
1324
|
+
},
|
|
1325
|
+
get normalTexture() {
|
|
1326
|
+
return (object as GLTFMaterialIterator).normalTexture?.data;
|
|
1327
|
+
},
|
|
1328
|
+
get occlusionTexture() {
|
|
1329
|
+
return (object as GLTFMaterialIterator).occlusionTexture?.data;
|
|
1330
|
+
},
|
|
1331
|
+
get emissiveTexture() {
|
|
1332
|
+
return (object as GLTFMaterialIterator).emissiveTexture?.data;
|
|
1333
|
+
},
|
|
1334
|
+
get textures() {
|
|
1335
|
+
return iterateObjectData((object as GLTFMaterialIterator).textures);
|
|
1336
|
+
}
|
|
1337
|
+
};
|
|
1338
|
+
case 'textureInfo':
|
|
1339
|
+
return {
|
|
1340
|
+
get texture() {
|
|
1341
|
+
return (object as GLTFTextureInfoIterator).texture.data;
|
|
1342
|
+
}
|
|
1343
|
+
};
|
|
1344
|
+
case 'mesh':
|
|
1345
|
+
return {
|
|
1346
|
+
get primitives() {
|
|
1347
|
+
return iterateObjectData((object as GLTFMeshIterator).primitives);
|
|
1348
|
+
}
|
|
1349
|
+
};
|
|
1350
|
+
case 'primitive':
|
|
1351
|
+
return {
|
|
1352
|
+
get attributes() {
|
|
1353
|
+
return mapObjectData((object as GLTFMeshPrimitiveIterator).attributes);
|
|
1354
|
+
},
|
|
1355
|
+
get indices() {
|
|
1356
|
+
return (object as GLTFMeshPrimitiveIterator).indices?.data;
|
|
1357
|
+
},
|
|
1358
|
+
get material() {
|
|
1359
|
+
return (object as GLTFMeshPrimitiveIterator).material?.data;
|
|
1360
|
+
},
|
|
1361
|
+
get targets() {
|
|
1362
|
+
return (object as GLTFMeshPrimitiveIterator).targets.map(mapObjectData);
|
|
1363
|
+
}
|
|
1364
|
+
};
|
|
1365
|
+
case 'node':
|
|
1366
|
+
return {
|
|
1367
|
+
get camera() {
|
|
1368
|
+
return (object as GLTFNodeIterator).camera?.data;
|
|
1369
|
+
},
|
|
1370
|
+
get children() {
|
|
1371
|
+
return iterateObjectData((object as GLTFNodeIterator).children);
|
|
1372
|
+
},
|
|
1373
|
+
get skin() {
|
|
1374
|
+
return (object as GLTFNodeIterator).skin?.data;
|
|
1375
|
+
},
|
|
1376
|
+
get mesh() {
|
|
1377
|
+
return (object as GLTFNodeIterator).mesh?.data;
|
|
1378
|
+
},
|
|
1379
|
+
get externalAsset() {
|
|
1380
|
+
return (object as GLTFNodeIterator).externalAsset?.data;
|
|
1381
|
+
}
|
|
1382
|
+
};
|
|
1383
|
+
case 'scene':
|
|
1384
|
+
return {
|
|
1385
|
+
get nodes() {
|
|
1386
|
+
return iterateObjectData((object as GLTFSceneIterator).nodes);
|
|
1387
|
+
}
|
|
1388
|
+
};
|
|
1389
|
+
case 'skin':
|
|
1390
|
+
return {
|
|
1391
|
+
get inverseBindMatrices() {
|
|
1392
|
+
return (object as GLTFSkinIterator).inverseBindMatrices?.data;
|
|
1393
|
+
},
|
|
1394
|
+
get skeleton() {
|
|
1395
|
+
return (object as GLTFSkinIterator).skeleton?.data;
|
|
1396
|
+
},
|
|
1397
|
+
get joints() {
|
|
1398
|
+
return iterateObjectData((object as GLTFSkinIterator).joints);
|
|
1399
|
+
}
|
|
1400
|
+
};
|
|
1401
|
+
case 'texture':
|
|
1402
|
+
return {
|
|
1403
|
+
get sampler() {
|
|
1404
|
+
return (object as GLTFTextureIterator).sampler?.data;
|
|
1405
|
+
},
|
|
1406
|
+
get source() {
|
|
1407
|
+
return (object as GLTFTextureIterator).source?.data;
|
|
1408
|
+
}
|
|
1409
|
+
};
|
|
1410
|
+
default:
|
|
1411
|
+
return {};
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
/** Iterate raw array values without creating wrapper arrays. */
|
|
1416
|
+
function iterateValues<ValueT, IteratorT>(
|
|
1417
|
+
values: readonly ValueT[],
|
|
1418
|
+
getIterator: (value: ValueT, index: number) => IteratorT
|
|
1419
|
+
): IterableIterator<IteratorT> {
|
|
1420
|
+
return (function* iterate(): IterableIterator<IteratorT> {
|
|
1421
|
+
for (let index = 0; index < values.length; index++) {
|
|
1422
|
+
yield getIterator(values[index], index);
|
|
1423
|
+
}
|
|
1424
|
+
})();
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
/** Yield the exact raw object carried by each internal iterator context. */
|
|
1428
|
+
function iterateObjectData<DataT extends GLTFIteratorData>(
|
|
1429
|
+
objects: Iterable<GLTFObjectIterator<DataT, any>>
|
|
1430
|
+
): IterableIterator<DataT> {
|
|
1431
|
+
return (function* iterateRawData(): IterableIterator<DataT> {
|
|
1432
|
+
for (const object of objects) {
|
|
1433
|
+
yield object.data;
|
|
1434
|
+
}
|
|
1435
|
+
})();
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
/** Replace internal iterator contexts in a reference map with their exact raw objects. */
|
|
1439
|
+
function mapObjectData<DataT extends GLTFIteratorData>(
|
|
1440
|
+
objects: ReadonlyMap<string, GLTFObjectIterator<DataT, any>>
|
|
1441
|
+
): ReadonlyMap<string, DataT> {
|
|
1442
|
+
return new Map(Array.from(objects, ([name, object]) => [name, object.data]));
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
/** Return the JSON collection name for a wrapper type. */
|
|
1446
|
+
function getCollectionName(type: GLTFCollectionType): string {
|
|
1447
|
+
switch (type) {
|
|
1448
|
+
case 'bufferView':
|
|
1449
|
+
return 'bufferViews';
|
|
1450
|
+
case 'externalAsset':
|
|
1451
|
+
return 'externalAssets';
|
|
1452
|
+
case 'mesh':
|
|
1453
|
+
return 'meshes';
|
|
1454
|
+
default:
|
|
1455
|
+
return `${type}s`;
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1459
|
+
/** Remove every occurrence of a string from an optional array. */
|
|
1460
|
+
function removeString(values: string[] | undefined, value: string): void {
|
|
1461
|
+
if (!values) {
|
|
1462
|
+
return;
|
|
1463
|
+
}
|
|
1464
|
+
for (let index = values.length - 1; index >= 0; index--) {
|
|
1465
|
+
if (values[index] === value) {
|
|
1466
|
+
values.splice(index, 1);
|
|
1467
|
+
}
|
|
1468
|
+
}
|
|
1469
|
+
}
|