@loaders.gl/gltf 4.0.0-alpha.1 → 4.0.0-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +2 -2
- package/dist/dist.min.js +5767 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/glb-loader.js +56 -0
- package/dist/es5/glb-loader.js.map +1 -0
- package/dist/es5/glb-writer.js +34 -0
- package/dist/es5/glb-writer.js.map +1 -0
- package/dist/es5/gltf-loader.js +81 -0
- package/dist/es5/gltf-loader.js.map +1 -0
- package/dist/es5/gltf-writer.js +35 -0
- package/dist/es5/gltf-writer.js.map +1 -0
- package/dist/es5/index.js +55 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/lib/api/gltf-extensions.js +109 -0
- package/dist/es5/lib/api/gltf-extensions.js.map +1 -0
- package/dist/es5/lib/api/gltf-scenegraph.js +598 -0
- package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -0
- package/dist/es5/lib/api/normalize-gltf-v1.js +331 -0
- package/dist/es5/lib/api/normalize-gltf-v1.js.map +1 -0
- package/dist/es5/lib/api/post-process-gltf.js +470 -0
- package/dist/es5/lib/api/post-process-gltf.js.map +1 -0
- package/dist/es5/lib/encoders/encode-glb.js +61 -0
- package/dist/es5/lib/encoders/encode-glb.js.map +1 -0
- package/dist/es5/lib/encoders/encode-gltf.js +20 -0
- package/dist/es5/lib/encoders/encode-gltf.js.map +1 -0
- package/dist/es5/lib/extensions/EXT_meshopt_compression.js +94 -0
- package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +1 -0
- package/dist/es5/lib/extensions/EXT_texture_webp.js +43 -0
- package/dist/es5/lib/extensions/EXT_texture_webp.js.map +1 -0
- package/dist/es5/lib/extensions/KHR_binary_gltf.js +39 -0
- package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +1 -0
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +247 -0
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
- package/dist/es5/lib/extensions/KHR_texture_basisu.js +36 -0
- package/dist/es5/lib/extensions/KHR_texture_basisu.js.map +1 -0
- package/dist/es5/lib/extensions/KHR_texture_transform.js +230 -0
- package/dist/es5/lib/extensions/KHR_texture_transform.js.map +1 -0
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +281 -0
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
- package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js +99 -0
- package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
- package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js +76 -0
- package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
- package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js +113 -0
- package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
- package/dist/es5/lib/gltf-utils/get-typed-array.js +23 -0
- package/dist/es5/lib/gltf-utils/get-typed-array.js.map +1 -0
- package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js +68 -0
- package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js.map +1 -0
- package/dist/es5/lib/gltf-utils/gltf-constants.js +48 -0
- package/dist/es5/lib/gltf-utils/gltf-constants.js.map +1 -0
- package/dist/es5/lib/gltf-utils/gltf-utils.js +86 -0
- package/dist/es5/lib/gltf-utils/gltf-utils.js.map +1 -0
- package/dist/es5/lib/gltf-utils/resolve-url.js +18 -0
- package/dist/es5/lib/gltf-utils/resolve-url.js.map +1 -0
- package/dist/es5/lib/parsers/parse-glb.js +120 -0
- package/dist/es5/lib/parsers/parse-glb.js.map +1 -0
- package/dist/es5/lib/parsers/parse-gltf.js +280 -0
- package/dist/es5/lib/parsers/parse-gltf.js.map +1 -0
- package/dist/es5/lib/types/glb-types.js +2 -0
- package/dist/es5/lib/types/glb-types.js.map +1 -0
- package/dist/es5/lib/types/gltf-json-schema.js +2 -0
- package/dist/es5/lib/types/gltf-json-schema.js.map +1 -0
- package/dist/es5/lib/types/gltf-postprocessed-schema.js +2 -0
- package/dist/es5/lib/types/gltf-postprocessed-schema.js.map +1 -0
- package/dist/es5/lib/types/gltf-types.js +2 -0
- package/dist/es5/lib/types/gltf-types.js.map +1 -0
- package/dist/es5/lib/utils/assert.js +12 -0
- package/dist/es5/lib/utils/assert.js.map +1 -0
- package/dist/es5/lib/utils/version.js +9 -0
- package/dist/es5/lib/utils/version.js.map +1 -0
- package/dist/es5/meshopt/meshopt-decoder.js +215 -0
- package/dist/es5/meshopt/meshopt-decoder.js.map +1 -0
- package/dist/es5/webp/webp.js +83 -0
- package/dist/es5/webp/webp.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/glb-loader.js +31 -0
- package/dist/esm/glb-loader.js.map +1 -0
- package/dist/esm/glb-writer.js +27 -0
- package/dist/esm/glb-writer.js.map +1 -0
- package/dist/esm/gltf-loader.js +51 -0
- package/dist/esm/gltf-loader.js.map +1 -0
- package/dist/esm/gltf-writer.js +28 -0
- package/dist/esm/gltf-writer.js.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/api/gltf-extensions.js +35 -0
- package/dist/esm/lib/api/gltf-extensions.js.map +1 -0
- package/dist/esm/lib/api/gltf-scenegraph.js +455 -0
- package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -0
- package/dist/esm/lib/api/normalize-gltf-v1.js +204 -0
- package/dist/esm/lib/api/normalize-gltf-v1.js.map +1 -0
- package/dist/esm/lib/api/post-process-gltf.js +396 -0
- package/dist/esm/lib/api/post-process-gltf.js.map +1 -0
- package/dist/esm/lib/encoders/encode-glb.js +54 -0
- package/dist/esm/lib/encoders/encode-glb.js.map +1 -0
- package/dist/esm/lib/encoders/encode-gltf.js +14 -0
- package/dist/esm/lib/encoders/encode-gltf.js.map +1 -0
- package/dist/esm/lib/extensions/EXT_meshopt_compression.js +41 -0
- package/dist/esm/lib/extensions/EXT_meshopt_compression.js.map +1 -0
- package/dist/esm/lib/extensions/EXT_texture_webp.js +25 -0
- package/dist/esm/lib/extensions/EXT_texture_webp.js.map +1 -0
- package/dist/esm/lib/extensions/KHR_binary_gltf.js +21 -0
- package/dist/esm/lib/extensions/KHR_binary_gltf.js.map +1 -0
- package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js +111 -0
- package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
- package/dist/esm/lib/extensions/KHR_texture_basisu.js +18 -0
- package/dist/esm/lib/extensions/KHR_texture_basisu.js.map +1 -0
- package/dist/esm/lib/extensions/KHR_texture_transform.js +182 -0
- package/dist/esm/lib/extensions/KHR_texture_transform.js.map +1 -0
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +223 -0
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
- package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js +42 -0
- package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
- package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js +33 -0
- package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
- package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js +61 -0
- package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
- package/dist/esm/lib/gltf-utils/get-typed-array.js +16 -0
- package/dist/esm/lib/gltf-utils/get-typed-array.js.map +1 -0
- package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js +62 -0
- package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js.map +1 -0
- package/dist/esm/lib/gltf-utils/gltf-constants.js +37 -0
- package/dist/esm/lib/gltf-utils/gltf-constants.js.map +1 -0
- package/dist/esm/lib/gltf-utils/gltf-utils.js +74 -0
- package/dist/esm/lib/gltf-utils/gltf-utils.js.map +1 -0
- package/dist/esm/lib/gltf-utils/resolve-url.js +12 -0
- package/dist/esm/lib/gltf-utils/resolve-url.js.map +1 -0
- package/dist/esm/lib/parsers/parse-glb.js +114 -0
- package/dist/esm/lib/parsers/parse-glb.js.map +1 -0
- package/dist/esm/lib/parsers/parse-gltf.js +151 -0
- package/dist/esm/lib/parsers/parse-gltf.js.map +1 -0
- package/dist/esm/lib/types/glb-types.js +2 -0
- package/dist/esm/lib/types/glb-types.js.map +1 -0
- package/dist/esm/lib/types/gltf-json-schema.js +2 -0
- package/dist/esm/lib/types/gltf-json-schema.js.map +1 -0
- package/dist/esm/lib/types/gltf-postprocessed-schema.js +2 -0
- package/dist/esm/lib/types/gltf-postprocessed-schema.js.map +1 -0
- package/dist/esm/lib/types/gltf-types.js +2 -0
- package/dist/esm/lib/types/gltf-types.js.map +1 -0
- package/dist/esm/lib/utils/assert.js +6 -0
- package/dist/esm/lib/utils/assert.js.map +1 -0
- package/dist/esm/lib/utils/version.js +2 -0
- package/dist/esm/lib/utils/version.js.map +1 -0
- package/dist/esm/meshopt/meshopt-decoder.js +91 -0
- package/dist/esm/meshopt/meshopt-decoder.js.map +1 -0
- package/dist/esm/meshopt/meshopt-encoder.ts.disabled +409 -0
- package/dist/esm/webp/webp.js +25 -0
- package/dist/esm/webp/webp.js.map +1 -0
- package/dist/glb-loader.d.ts +14 -0
- package/dist/glb-loader.d.ts.map +1 -0
- package/dist/glb-loader.js +30 -28
- package/dist/glb-writer.d.ts +13 -0
- package/dist/glb-writer.d.ts.map +1 -0
- package/dist/glb-writer.js +32 -26
- package/dist/gltf-loader.d.ts +19 -0
- package/dist/gltf-loader.d.ts.map +1 -0
- package/dist/gltf-loader.js +46 -43
- package/dist/gltf-writer.d.ts +25 -0
- package/dist/gltf-writer.d.ts.map +1 -0
- package/dist/gltf-writer.js +29 -26
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -7
- package/dist/lib/api/gltf-extensions.d.ts +31 -0
- package/dist/lib/api/gltf-extensions.d.ts.map +1 -0
- package/dist/lib/api/gltf-extensions.js +79 -31
- package/dist/lib/api/gltf-scenegraph.d.ts +180 -0
- package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -0
- package/dist/lib/api/gltf-scenegraph.js +578 -513
- package/dist/lib/api/normalize-gltf-v1.d.ts +2 -0
- package/dist/lib/api/normalize-gltf-v1.d.ts.map +1 -0
- package/dist/lib/api/normalize-gltf-v1.js +278 -226
- package/dist/lib/api/post-process-gltf.d.ts +5 -0
- package/dist/lib/api/post-process-gltf.d.ts.map +1 -0
- package/dist/lib/api/post-process-gltf.js +386 -345
- package/dist/lib/encoders/encode-glb.d.ts +15 -0
- package/dist/lib/encoders/encode-glb.d.ts.map +1 -0
- package/dist/lib/encoders/encode-glb.js +67 -58
- package/dist/lib/encoders/encode-gltf.d.ts +20 -0
- package/dist/lib/encoders/encode-gltf.d.ts.map +1 -0
- package/dist/lib/encoders/encode-gltf.js +30 -12
- package/dist/lib/extensions/EXT_meshopt_compression.d.ts +7 -0
- package/dist/lib/extensions/EXT_meshopt_compression.d.ts.map +1 -0
- package/dist/lib/extensions/EXT_meshopt_compression.js +35 -50
- package/dist/lib/extensions/EXT_texture_webp.d.ts +12 -0
- package/dist/lib/extensions/EXT_texture_webp.d.ts.map +1 -0
- package/dist/lib/extensions/EXT_texture_webp.js +32 -28
- package/dist/lib/extensions/KHR_binary_gltf.d.ts +7 -0
- package/dist/lib/extensions/KHR_binary_gltf.d.ts.map +1 -0
- package/dist/lib/extensions/KHR_binary_gltf.js +36 -23
- package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts +13 -0
- package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -0
- package/dist/lib/extensions/KHR_draco_mesh_compression.js +123 -111
- package/dist/lib/extensions/KHR_texture_basisu.d.ts +12 -0
- package/dist/lib/extensions/KHR_texture_basisu.d.ts.map +1 -0
- package/dist/lib/extensions/KHR_texture_basisu.js +26 -19
- package/dist/lib/extensions/KHR_texture_transform.d.ts +13 -0
- package/dist/lib/extensions/KHR_texture_transform.d.ts.map +1 -0
- package/dist/lib/extensions/KHR_texture_transform.js +227 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts +7 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +290 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts +7 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +54 -44
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts +7 -0
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +39 -32
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts +7 -0
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +73 -62
- package/dist/lib/gltf-utils/get-typed-array.d.ts +3 -0
- package/dist/lib/gltf-utils/get-typed-array.d.ts.map +1 -0
- package/dist/lib/gltf-utils/get-typed-array.js +39 -14
- package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts +6 -0
- package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts.map +1 -0
- package/dist/lib/gltf-utils/gltf-attribute-utils.js +65 -65
- package/dist/lib/gltf-utils/gltf-constants.d.ts +21 -0
- package/dist/lib/gltf-utils/gltf-constants.d.ts.map +1 -0
- package/dist/lib/gltf-utils/gltf-constants.js +38 -32
- package/dist/lib/gltf-utils/gltf-utils.d.ts +15 -0
- package/dist/lib/gltf-utils/gltf-utils.d.ts.map +1 -0
- package/dist/lib/gltf-utils/gltf-utils.js +79 -45
- package/dist/lib/gltf-utils/resolve-url.d.ts +2 -0
- package/dist/lib/gltf-utils/resolve-url.d.ts.map +1 -0
- package/dist/lib/gltf-utils/resolve-url.js +17 -15
- package/dist/lib/parsers/parse-glb.d.ts +20 -0
- package/dist/lib/parsers/parse-glb.d.ts.map +1 -0
- package/dist/lib/parsers/parse-glb.js +143 -105
- package/dist/lib/parsers/parse-gltf.d.ts +18 -0
- package/dist/lib/parsers/parse-gltf.d.ts.map +1 -0
- package/dist/lib/parsers/parse-gltf.js +164 -155
- package/dist/lib/types/glb-types.d.ts +17 -0
- package/dist/lib/types/glb-types.d.ts.map +1 -0
- package/dist/lib/types/glb-types.js +2 -2
- package/dist/lib/types/gltf-json-schema.d.ts +1119 -0
- package/dist/lib/types/gltf-json-schema.d.ts.map +1 -0
- package/dist/lib/types/gltf-json-schema.js +4 -2
- package/dist/lib/types/gltf-postprocessed-schema.d.ts +651 -0
- package/dist/lib/types/gltf-postprocessed-schema.d.ts.map +1 -0
- package/dist/lib/types/gltf-postprocessed-schema.js +4 -2
- package/dist/lib/types/gltf-types.d.ts +26 -0
- package/dist/lib/types/gltf-types.d.ts.map +1 -0
- package/dist/lib/types/gltf-types.js +3 -2
- package/dist/lib/utils/assert.d.ts +2 -0
- package/dist/lib/utils/assert.d.ts.map +1 -0
- package/dist/lib/utils/assert.js +11 -5
- package/dist/lib/utils/version.d.ts +2 -0
- package/dist/lib/utils/version.d.ts.map +1 -0
- package/dist/lib/utils/version.js +7 -2
- package/dist/meshopt/meshopt-decoder.d.ts +6 -0
- package/dist/meshopt/meshopt-decoder.d.ts.map +1 -0
- package/dist/meshopt/meshopt-decoder.js +97 -82
- package/dist/webp/webp.d.ts +7 -0
- package/dist/webp/webp.d.ts.map +1 -0
- package/dist/webp/webp.js +32 -23
- package/package.json +11 -13
- package/src/glb-loader.ts +4 -4
- package/src/glb-writer.ts +11 -3
- package/src/gltf-loader.ts +12 -8
- package/src/gltf-writer.ts +2 -2
- package/src/index.ts +34 -5
- package/src/lib/api/gltf-extensions.ts +14 -3
- package/src/lib/api/gltf-scenegraph.ts +68 -40
- package/src/lib/api/{normalize-gltf-v1.js → normalize-gltf-v1.ts} +20 -17
- package/src/lib/api/post-process-gltf.ts +556 -0
- package/src/lib/encoders/{encode-glb.js → encode-glb.ts} +21 -4
- package/src/lib/encoders/encode-gltf.ts +34 -0
- package/src/lib/extensions/EXT_meshopt_compression.ts +16 -25
- package/src/lib/extensions/EXT_texture_webp.ts +5 -4
- package/src/lib/extensions/KHR_binary_gltf.ts +3 -3
- package/src/lib/extensions/KHR_draco_mesh_compression.ts +8 -8
- package/src/lib/extensions/KHR_texture_basisu.ts +6 -5
- package/src/lib/extensions/KHR_texture_transform.ts +308 -0
- package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +404 -0
- package/src/lib/extensions/deprecated/KHR_lights_punctual.ts +2 -2
- package/src/lib/extensions/deprecated/KHR_materials_unlit.ts +5 -5
- package/src/lib/extensions/deprecated/KHR_techniques_webgl.ts +3 -2
- package/src/lib/gltf-utils/gltf-attribute-utils.ts +1 -1
- package/src/lib/gltf-utils/gltf-constants.ts +2 -2
- package/src/lib/gltf-utils/gltf-utils.ts +31 -0
- package/src/lib/parsers/parse-glb.ts +50 -24
- package/src/lib/parsers/parse-gltf.ts +38 -28
- package/src/lib/types/glb-types.ts +1 -1
- package/src/lib/types/gltf-json-schema.ts +585 -126
- package/src/lib/types/gltf-postprocessed-schema.ts +290 -212
- package/src/lib/types/gltf-types.ts +43 -43
- package/src/lib/utils/{assert.js → assert.ts} +1 -1
- package/dist/bundle.js.map +0 -1
- package/dist/glb-loader.js.map +0 -1
- package/dist/glb-writer.js.map +0 -1
- package/dist/gltf-loader.js.map +0 -1
- package/dist/gltf-writer.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/api/gltf-extensions.js.map +0 -1
- package/dist/lib/api/gltf-scenegraph.js.map +0 -1
- package/dist/lib/api/normalize-gltf-v1.js.map +0 -1
- package/dist/lib/api/post-process-gltf.js.map +0 -1
- package/dist/lib/encoders/encode-glb.js.map +0 -1
- package/dist/lib/encoders/encode-gltf.js.map +0 -1
- package/dist/lib/extensions/EXT_meshopt_compression.js.map +0 -1
- package/dist/lib/extensions/EXT_texture_webp.js.map +0 -1
- package/dist/lib/extensions/KHR_binary_gltf.js.map +0 -1
- package/dist/lib/extensions/KHR_draco_mesh_compression.js.map +0 -1
- package/dist/lib/extensions/KHR_texture_basisu.js.map +0 -1
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js.map +0 -1
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js.map +0 -1
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js.map +0 -1
- package/dist/lib/gltf-utils/get-typed-array.js.map +0 -1
- package/dist/lib/gltf-utils/gltf-attribute-utils.js.map +0 -1
- package/dist/lib/gltf-utils/gltf-constants.js.map +0 -1
- package/dist/lib/gltf-utils/gltf-utils.js.map +0 -1
- package/dist/lib/gltf-utils/resolve-url.js.map +0 -1
- package/dist/lib/parsers/parse-glb.js.map +0 -1
- package/dist/lib/parsers/parse-gltf.js.map +0 -1
- package/dist/lib/types/glb-types.js.map +0 -1
- package/dist/lib/types/gltf-json-schema.js.map +0 -1
- package/dist/lib/types/gltf-postprocessed-schema.js.map +0 -1
- package/dist/lib/types/gltf-types.js.map +0 -1
- package/dist/lib/utils/assert.js.map +0 -1
- package/dist/lib/utils/version.js.map +0 -1
- package/dist/meshopt/meshopt-decoder.js.map +0 -1
- package/dist/webp/webp.js.map +0 -1
- package/src/lib/api/post-process-gltf.js +0 -388
- package/src/lib/encoders/encode-gltf.js +0 -25
- /package/dist/{meshopt → es5/meshopt}/meshopt-encoder.ts.disabled +0 -0
- /package/src/lib/utils/{version.js → version.ts} +0 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { assert } from '../utils/assert';
|
|
3
|
+
import { getAccessorArrayTypeAndLength } from '../gltf-utils/gltf-utils';
|
|
4
|
+
const COMPONENTS = {
|
|
5
|
+
SCALAR: 1,
|
|
6
|
+
VEC2: 2,
|
|
7
|
+
VEC3: 3,
|
|
8
|
+
VEC4: 4,
|
|
9
|
+
MAT2: 4,
|
|
10
|
+
MAT3: 9,
|
|
11
|
+
MAT4: 16
|
|
12
|
+
};
|
|
13
|
+
const BYTES = {
|
|
14
|
+
5120: 1,
|
|
15
|
+
5121: 1,
|
|
16
|
+
5122: 2,
|
|
17
|
+
5123: 2,
|
|
18
|
+
5125: 4,
|
|
19
|
+
5126: 4
|
|
20
|
+
};
|
|
21
|
+
const GL_SAMPLER = {
|
|
22
|
+
TEXTURE_MAG_FILTER: 0x2800,
|
|
23
|
+
TEXTURE_MIN_FILTER: 0x2801,
|
|
24
|
+
TEXTURE_WRAP_S: 0x2802,
|
|
25
|
+
TEXTURE_WRAP_T: 0x2803,
|
|
26
|
+
REPEAT: 0x2901,
|
|
27
|
+
LINEAR: 0x2601,
|
|
28
|
+
NEAREST_MIPMAP_LINEAR: 0x2702
|
|
29
|
+
};
|
|
30
|
+
const SAMPLER_PARAMETER_GLTF_TO_GL = {
|
|
31
|
+
magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,
|
|
32
|
+
minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,
|
|
33
|
+
wrapS: GL_SAMPLER.TEXTURE_WRAP_S,
|
|
34
|
+
wrapT: GL_SAMPLER.TEXTURE_WRAP_T
|
|
35
|
+
};
|
|
36
|
+
const DEFAULT_SAMPLER_PARAMETERS = {
|
|
37
|
+
[GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,
|
|
38
|
+
[GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,
|
|
39
|
+
[GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,
|
|
40
|
+
[GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT
|
|
41
|
+
};
|
|
42
|
+
function makeDefaultSampler() {
|
|
43
|
+
return {
|
|
44
|
+
id: 'default-sampler',
|
|
45
|
+
parameters: DEFAULT_SAMPLER_PARAMETERS
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function getBytesFromComponentType(componentType) {
|
|
49
|
+
return BYTES[componentType];
|
|
50
|
+
}
|
|
51
|
+
function getSizeFromAccessorType(type) {
|
|
52
|
+
return COMPONENTS[type];
|
|
53
|
+
}
|
|
54
|
+
class GLTFPostProcessor {
|
|
55
|
+
constructor() {
|
|
56
|
+
_defineProperty(this, "baseUri", '');
|
|
57
|
+
_defineProperty(this, "jsonUnprocessed", void 0);
|
|
58
|
+
_defineProperty(this, "json", void 0);
|
|
59
|
+
_defineProperty(this, "buffers", []);
|
|
60
|
+
_defineProperty(this, "images", []);
|
|
61
|
+
}
|
|
62
|
+
postProcess(gltf) {
|
|
63
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
64
|
+
const {
|
|
65
|
+
json,
|
|
66
|
+
buffers = [],
|
|
67
|
+
images = []
|
|
68
|
+
} = gltf;
|
|
69
|
+
const {
|
|
70
|
+
baseUri = ''
|
|
71
|
+
} = gltf;
|
|
72
|
+
assert(json);
|
|
73
|
+
this.baseUri = baseUri;
|
|
74
|
+
this.buffers = buffers;
|
|
75
|
+
this.images = images;
|
|
76
|
+
this.jsonUnprocessed = json;
|
|
77
|
+
this.json = this._resolveTree(gltf.json, options);
|
|
78
|
+
return this.json;
|
|
79
|
+
}
|
|
80
|
+
_resolveTree(gltf) {
|
|
81
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
82
|
+
const json = {
|
|
83
|
+
...gltf
|
|
84
|
+
};
|
|
85
|
+
this.json = json;
|
|
86
|
+
if (gltf.bufferViews) {
|
|
87
|
+
json.bufferViews = gltf.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));
|
|
88
|
+
}
|
|
89
|
+
if (gltf.images) {
|
|
90
|
+
json.images = gltf.images.map((image, i) => this._resolveImage(image, i));
|
|
91
|
+
}
|
|
92
|
+
if (gltf.samplers) {
|
|
93
|
+
json.samplers = gltf.samplers.map((sampler, i) => this._resolveSampler(sampler, i));
|
|
94
|
+
}
|
|
95
|
+
if (gltf.textures) {
|
|
96
|
+
json.textures = gltf.textures.map((texture, i) => this._resolveTexture(texture, i));
|
|
97
|
+
}
|
|
98
|
+
if (gltf.accessors) {
|
|
99
|
+
json.accessors = gltf.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));
|
|
100
|
+
}
|
|
101
|
+
if (gltf.materials) {
|
|
102
|
+
json.materials = gltf.materials.map((material, i) => this._resolveMaterial(material, i));
|
|
103
|
+
}
|
|
104
|
+
if (gltf.meshes) {
|
|
105
|
+
json.meshes = gltf.meshes.map((mesh, i) => this._resolveMesh(mesh, i));
|
|
106
|
+
}
|
|
107
|
+
if (gltf.nodes) {
|
|
108
|
+
json.nodes = gltf.nodes.map((node, i) => this._resolveNode(node, i));
|
|
109
|
+
json.nodes = json.nodes.map((node, i) => this._resolveNodeChildren(node));
|
|
110
|
+
}
|
|
111
|
+
if (gltf.skins) {
|
|
112
|
+
json.skins = gltf.skins.map((skin, i) => this._resolveSkin(skin, i));
|
|
113
|
+
}
|
|
114
|
+
if (gltf.scenes) {
|
|
115
|
+
json.scenes = gltf.scenes.map((scene, i) => this._resolveScene(scene, i));
|
|
116
|
+
}
|
|
117
|
+
if (typeof this.json.scene === 'number' && json.scenes) {
|
|
118
|
+
json.scene = json.scenes[this.json.scene];
|
|
119
|
+
}
|
|
120
|
+
return json;
|
|
121
|
+
}
|
|
122
|
+
getScene(index) {
|
|
123
|
+
return this._get(this.json.scenes, index);
|
|
124
|
+
}
|
|
125
|
+
getNode(index) {
|
|
126
|
+
return this._get(this.json.nodes, index);
|
|
127
|
+
}
|
|
128
|
+
getSkin(index) {
|
|
129
|
+
return this._get(this.json.skins, index);
|
|
130
|
+
}
|
|
131
|
+
getMesh(index) {
|
|
132
|
+
return this._get(this.json.meshes, index);
|
|
133
|
+
}
|
|
134
|
+
getMaterial(index) {
|
|
135
|
+
return this._get(this.json.materials, index);
|
|
136
|
+
}
|
|
137
|
+
getAccessor(index) {
|
|
138
|
+
return this._get(this.json.accessors, index);
|
|
139
|
+
}
|
|
140
|
+
getCamera(index) {
|
|
141
|
+
return this._get(this.json.cameras, index);
|
|
142
|
+
}
|
|
143
|
+
getTexture(index) {
|
|
144
|
+
return this._get(this.json.textures, index);
|
|
145
|
+
}
|
|
146
|
+
getSampler(index) {
|
|
147
|
+
return this._get(this.json.samplers, index);
|
|
148
|
+
}
|
|
149
|
+
getImage(index) {
|
|
150
|
+
return this._get(this.json.images, index);
|
|
151
|
+
}
|
|
152
|
+
getBufferView(index) {
|
|
153
|
+
return this._get(this.json.bufferViews, index);
|
|
154
|
+
}
|
|
155
|
+
getBuffer(index) {
|
|
156
|
+
return this._get(this.json.buffers, index);
|
|
157
|
+
}
|
|
158
|
+
_get(array, index) {
|
|
159
|
+
if (typeof index === 'object') {
|
|
160
|
+
return index;
|
|
161
|
+
}
|
|
162
|
+
const object = array && array[index];
|
|
163
|
+
if (!object) {
|
|
164
|
+
console.warn("glTF file error: Could not find ".concat(array, "[").concat(index, "]"));
|
|
165
|
+
}
|
|
166
|
+
return object;
|
|
167
|
+
}
|
|
168
|
+
_resolveScene(scene, index) {
|
|
169
|
+
return {
|
|
170
|
+
...scene,
|
|
171
|
+
id: scene.id || "scene-".concat(index),
|
|
172
|
+
nodes: (scene.nodes || []).map(node => this.getNode(node))
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
_resolveNode(gltfNode, index) {
|
|
176
|
+
const node = {
|
|
177
|
+
...gltfNode,
|
|
178
|
+
id: (gltfNode === null || gltfNode === void 0 ? void 0 : gltfNode.id) || "node-".concat(index)
|
|
179
|
+
};
|
|
180
|
+
if (gltfNode.mesh !== undefined) {
|
|
181
|
+
node.mesh = this.getMesh(gltfNode.mesh);
|
|
182
|
+
}
|
|
183
|
+
if (gltfNode.camera !== undefined) {
|
|
184
|
+
node.camera = this.getCamera(gltfNode.camera);
|
|
185
|
+
}
|
|
186
|
+
if (gltfNode.skin !== undefined) {
|
|
187
|
+
node.skin = this.getSkin(gltfNode.skin);
|
|
188
|
+
}
|
|
189
|
+
if (gltfNode.meshes !== undefined && gltfNode.meshes.length) {
|
|
190
|
+
node.mesh = gltfNode.meshes.reduce((accum, meshIndex) => {
|
|
191
|
+
const mesh = this.getMesh(meshIndex);
|
|
192
|
+
accum.id = mesh.id;
|
|
193
|
+
accum.primitives = accum.primitives.concat(mesh.primitives);
|
|
194
|
+
return accum;
|
|
195
|
+
}, {
|
|
196
|
+
primitives: []
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return node;
|
|
200
|
+
}
|
|
201
|
+
_resolveNodeChildren(node) {
|
|
202
|
+
if (node.children) {
|
|
203
|
+
node.children = node.children.map(child => this.getNode(child));
|
|
204
|
+
}
|
|
205
|
+
return node;
|
|
206
|
+
}
|
|
207
|
+
_resolveSkin(gltfSkin, index) {
|
|
208
|
+
const inverseBindMatrices = typeof gltfSkin.inverseBindMatrices === 'number' ? this.getAccessor(gltfSkin.inverseBindMatrices) : undefined;
|
|
209
|
+
return {
|
|
210
|
+
...gltfSkin,
|
|
211
|
+
id: gltfSkin.id || "skin-".concat(index),
|
|
212
|
+
inverseBindMatrices
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
_resolveMesh(gltfMesh, index) {
|
|
216
|
+
const mesh = {
|
|
217
|
+
...gltfMesh,
|
|
218
|
+
id: gltfMesh.id || "mesh-".concat(index),
|
|
219
|
+
primitives: []
|
|
220
|
+
};
|
|
221
|
+
if (gltfMesh.primitives) {
|
|
222
|
+
mesh.primitives = gltfMesh.primitives.map(gltfPrimitive => {
|
|
223
|
+
const primitive = {
|
|
224
|
+
...gltfPrimitive,
|
|
225
|
+
attributes: {},
|
|
226
|
+
indices: undefined,
|
|
227
|
+
material: undefined
|
|
228
|
+
};
|
|
229
|
+
const attributes = gltfPrimitive.attributes;
|
|
230
|
+
for (const attribute in attributes) {
|
|
231
|
+
primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);
|
|
232
|
+
}
|
|
233
|
+
if (gltfPrimitive.indices !== undefined) {
|
|
234
|
+
primitive.indices = this.getAccessor(gltfPrimitive.indices);
|
|
235
|
+
}
|
|
236
|
+
if (gltfPrimitive.material !== undefined) {
|
|
237
|
+
primitive.material = this.getMaterial(gltfPrimitive.material);
|
|
238
|
+
}
|
|
239
|
+
return primitive;
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
return mesh;
|
|
243
|
+
}
|
|
244
|
+
_resolveMaterial(gltfMaterial, index) {
|
|
245
|
+
const material = {
|
|
246
|
+
...gltfMaterial,
|
|
247
|
+
id: gltfMaterial.id || "material-".concat(index)
|
|
248
|
+
};
|
|
249
|
+
if (material.normalTexture) {
|
|
250
|
+
material.normalTexture = {
|
|
251
|
+
...material.normalTexture
|
|
252
|
+
};
|
|
253
|
+
material.normalTexture.texture = this.getTexture(material.normalTexture.index);
|
|
254
|
+
}
|
|
255
|
+
if (material.occlusionTexture) {
|
|
256
|
+
material.occlusionTexture = {
|
|
257
|
+
...material.occlusionTexture
|
|
258
|
+
};
|
|
259
|
+
material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);
|
|
260
|
+
}
|
|
261
|
+
if (material.emissiveTexture) {
|
|
262
|
+
material.emissiveTexture = {
|
|
263
|
+
...material.emissiveTexture
|
|
264
|
+
};
|
|
265
|
+
material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);
|
|
266
|
+
}
|
|
267
|
+
if (!material.emissiveFactor) {
|
|
268
|
+
material.emissiveFactor = material.emissiveTexture ? [1, 1, 1] : [0, 0, 0];
|
|
269
|
+
}
|
|
270
|
+
if (material.pbrMetallicRoughness) {
|
|
271
|
+
material.pbrMetallicRoughness = {
|
|
272
|
+
...material.pbrMetallicRoughness
|
|
273
|
+
};
|
|
274
|
+
const mr = material.pbrMetallicRoughness;
|
|
275
|
+
if (mr.baseColorTexture) {
|
|
276
|
+
mr.baseColorTexture = {
|
|
277
|
+
...mr.baseColorTexture
|
|
278
|
+
};
|
|
279
|
+
mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);
|
|
280
|
+
}
|
|
281
|
+
if (mr.metallicRoughnessTexture) {
|
|
282
|
+
mr.metallicRoughnessTexture = {
|
|
283
|
+
...mr.metallicRoughnessTexture
|
|
284
|
+
};
|
|
285
|
+
mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return material;
|
|
289
|
+
}
|
|
290
|
+
_resolveAccessor(gltfAccessor, index) {
|
|
291
|
+
const bytesPerComponent = getBytesFromComponentType(gltfAccessor.componentType);
|
|
292
|
+
const components = getSizeFromAccessorType(gltfAccessor.type);
|
|
293
|
+
const bytesPerElement = bytesPerComponent * components;
|
|
294
|
+
const accessor = {
|
|
295
|
+
...gltfAccessor,
|
|
296
|
+
id: gltfAccessor.id || "accessor-".concat(index),
|
|
297
|
+
bytesPerComponent,
|
|
298
|
+
components,
|
|
299
|
+
bytesPerElement,
|
|
300
|
+
value: undefined,
|
|
301
|
+
bufferView: undefined,
|
|
302
|
+
sparse: undefined
|
|
303
|
+
};
|
|
304
|
+
if (gltfAccessor.bufferView !== undefined) {
|
|
305
|
+
accessor.bufferView = this.getBufferView(gltfAccessor.bufferView);
|
|
306
|
+
}
|
|
307
|
+
if (accessor.bufferView) {
|
|
308
|
+
const buffer = accessor.bufferView.buffer;
|
|
309
|
+
const {
|
|
310
|
+
ArrayType,
|
|
311
|
+
byteLength
|
|
312
|
+
} = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);
|
|
313
|
+
const byteOffset = (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;
|
|
314
|
+
let cutBuffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);
|
|
315
|
+
if (accessor.bufferView.byteStride) {
|
|
316
|
+
cutBuffer = this._getValueFromInterleavedBuffer(buffer, byteOffset, accessor.bufferView.byteStride, accessor.bytesPerElement, accessor.count);
|
|
317
|
+
}
|
|
318
|
+
accessor.value = new ArrayType(cutBuffer);
|
|
319
|
+
}
|
|
320
|
+
return accessor;
|
|
321
|
+
}
|
|
322
|
+
_getValueFromInterleavedBuffer(buffer, byteOffset, byteStride, bytesPerElement, count) {
|
|
323
|
+
const result = new Uint8Array(count * bytesPerElement);
|
|
324
|
+
for (let i = 0; i < count; i++) {
|
|
325
|
+
const elementOffset = byteOffset + i * byteStride;
|
|
326
|
+
result.set(new Uint8Array(buffer.arrayBuffer.slice(elementOffset, elementOffset + bytesPerElement)), i * bytesPerElement);
|
|
327
|
+
}
|
|
328
|
+
return result.buffer;
|
|
329
|
+
}
|
|
330
|
+
_resolveTexture(gltfTexture, index) {
|
|
331
|
+
return {
|
|
332
|
+
...gltfTexture,
|
|
333
|
+
id: gltfTexture.id || "texture-".concat(index),
|
|
334
|
+
sampler: typeof gltfTexture.sampler === 'number' ? this.getSampler(gltfTexture.sampler) : makeDefaultSampler(),
|
|
335
|
+
source: typeof gltfTexture.source === 'number' ? this.getImage(gltfTexture.source) : undefined
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
_resolveSampler(gltfSampler, index) {
|
|
339
|
+
const sampler = {
|
|
340
|
+
id: gltfSampler.id || "sampler-".concat(index),
|
|
341
|
+
...gltfSampler,
|
|
342
|
+
parameters: {}
|
|
343
|
+
};
|
|
344
|
+
for (const key in sampler) {
|
|
345
|
+
const glEnum = this._enumSamplerParameter(key);
|
|
346
|
+
if (glEnum !== undefined) {
|
|
347
|
+
sampler.parameters[glEnum] = sampler[key];
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return sampler;
|
|
351
|
+
}
|
|
352
|
+
_enumSamplerParameter(key) {
|
|
353
|
+
return SAMPLER_PARAMETER_GLTF_TO_GL[key];
|
|
354
|
+
}
|
|
355
|
+
_resolveImage(gltfImage, index) {
|
|
356
|
+
const image = {
|
|
357
|
+
...gltfImage,
|
|
358
|
+
id: gltfImage.id || "image-".concat(index),
|
|
359
|
+
image: null,
|
|
360
|
+
bufferView: gltfImage.bufferView !== undefined ? this.getBufferView(gltfImage.bufferView) : undefined
|
|
361
|
+
};
|
|
362
|
+
const preloadedImage = this.images[index];
|
|
363
|
+
if (preloadedImage) {
|
|
364
|
+
image.image = preloadedImage;
|
|
365
|
+
}
|
|
366
|
+
return image;
|
|
367
|
+
}
|
|
368
|
+
_resolveBufferView(gltfBufferView, index) {
|
|
369
|
+
const bufferIndex = gltfBufferView.buffer;
|
|
370
|
+
const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;
|
|
371
|
+
let byteOffset = this.buffers[bufferIndex].byteOffset || 0;
|
|
372
|
+
if (gltfBufferView.byteOffset) {
|
|
373
|
+
byteOffset += gltfBufferView.byteOffset;
|
|
374
|
+
}
|
|
375
|
+
const bufferView = {
|
|
376
|
+
id: "bufferView-".concat(index),
|
|
377
|
+
...gltfBufferView,
|
|
378
|
+
buffer: this.buffers[bufferIndex],
|
|
379
|
+
data: new Uint8Array(arrayBuffer, byteOffset, gltfBufferView.byteLength)
|
|
380
|
+
};
|
|
381
|
+
return bufferView;
|
|
382
|
+
}
|
|
383
|
+
_resolveCamera(gltfCamera, index) {
|
|
384
|
+
const camera = {
|
|
385
|
+
...gltfCamera,
|
|
386
|
+
id: gltfCamera.id || "camera-".concat(index)
|
|
387
|
+
};
|
|
388
|
+
if (camera.perspective) {}
|
|
389
|
+
if (camera.orthographic) {}
|
|
390
|
+
return camera;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
export function postProcessGLTF(gltf, options) {
|
|
394
|
+
return new GLTFPostProcessor().postProcess(gltf, options);
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=post-process-gltf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-process-gltf.js","names":["assert","getAccessorArrayTypeAndLength","COMPONENTS","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","BYTES","GL_SAMPLER","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","REPEAT","LINEAR","NEAREST_MIPMAP_LINEAR","SAMPLER_PARAMETER_GLTF_TO_GL","magFilter","minFilter","wrapS","wrapT","DEFAULT_SAMPLER_PARAMETERS","makeDefaultSampler","id","parameters","getBytesFromComponentType","componentType","getSizeFromAccessorType","type","GLTFPostProcessor","constructor","_defineProperty","postProcess","gltf","options","arguments","length","undefined","json","buffers","images","baseUri","jsonUnprocessed","_resolveTree","bufferViews","map","bufView","i","_resolveBufferView","image","_resolveImage","samplers","sampler","_resolveSampler","textures","texture","_resolveTexture","accessors","accessor","_resolveAccessor","materials","material","_resolveMaterial","meshes","mesh","_resolveMesh","nodes","node","_resolveNode","_resolveNodeChildren","skins","skin","_resolveSkin","scenes","scene","_resolveScene","getScene","index","_get","getNode","getSkin","getMesh","getMaterial","getAccessor","getCamera","cameras","getTexture","getSampler","getImage","getBufferView","getBuffer","array","object","console","warn","concat","gltfNode","camera","reduce","accum","meshIndex","primitives","children","child","gltfSkin","inverseBindMatrices","gltfMesh","gltfPrimitive","primitive","attributes","indices","attribute","gltfMaterial","normalTexture","occlusionTexture","emissiveTexture","emissiveFactor","pbrMetallicRoughness","mr","baseColorTexture","metallicRoughnessTexture","gltfAccessor","bytesPerComponent","components","bytesPerElement","value","bufferView","sparse","buffer","ArrayType","byteLength","byteOffset","cutBuffer","arrayBuffer","slice","byteStride","_getValueFromInterleavedBuffer","count","result","Uint8Array","elementOffset","set","gltfTexture","source","gltfSampler","key","glEnum","_enumSamplerParameter","gltfImage","preloadedImage","gltfBufferView","bufferIndex","data","_resolveCamera","gltfCamera","perspective","orthographic","postProcessGLTF"],"sources":["../../../../src/lib/api/post-process-gltf.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {ParseGLTFOptions} from '../parsers/parse-gltf';\n\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFBufferView,\n GLTFCamera,\n GLTFImage,\n GLTFMaterial,\n GLTFMesh,\n GLTFNode,\n GLTFSampler,\n GLTFScene,\n GLTFSkin,\n GLTFTexture\n} from '../types/gltf-json-schema';\n\nimport type {\n GLTFPostprocessed,\n GLTFAccessorPostprocessed,\n GLTFBufferPostprocessed,\n GLTFBufferViewPostprocessed,\n GLTFCameraPostprocessed,\n GLTFImagePostprocessed,\n GLTFMaterialPostprocessed,\n GLTFMeshPostprocessed,\n GLTFNodePostprocessed,\n GLTFSamplerPostprocessed,\n GLTFScenePostprocessed,\n GLTFSkinPostprocessed,\n GLTFTexturePostprocessed,\n GLTFMeshPrimitivePostprocessed\n} from '../types/gltf-postprocessed-schema';\n\nimport {assert} from '../utils/assert';\nimport {getAccessorArrayTypeAndLength} from '../gltf-utils/gltf-utils';\n\n// This is a post processor for loaded glTF files\n// The goal is to make the loaded data easier to use in WebGL applications\n//\n// Functions:\n// * Resolve indexed arrays structure of glTF into a linked tree.\n// * Translate stringified enum keys and values into WebGL constants.\n// * Load images (optional)\n\n// ENUM LOOKUP\n\nconst COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst BYTES = {\n 5120: 1, // BYTE\n 5121: 1, // UNSIGNED_BYTE\n 5122: 2, // SHORT\n 5123: 2, // UNSIGNED_SHORT\n 5125: 4, // UNSIGNED_INT\n 5126: 4 // FLOAT\n};\n\nconst GL_SAMPLER = {\n // Sampler parameters\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n\n // Sampler default values\n REPEAT: 0x2901,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_LINEAR: 0x2702\n};\n\nconst SAMPLER_PARAMETER_GLTF_TO_GL = {\n magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,\n minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,\n wrapS: GL_SAMPLER.TEXTURE_WRAP_S,\n wrapT: GL_SAMPLER.TEXTURE_WRAP_T\n};\n\n// When undefined, a sampler with repeat wrapping and auto filtering should be used.\n// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\nconst DEFAULT_SAMPLER_PARAMETERS = {\n [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,\n [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,\n [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,\n [GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT\n};\n\nfunction makeDefaultSampler(): GLTFSamplerPostprocessed {\n return {\n id: 'default-sampler',\n parameters: DEFAULT_SAMPLER_PARAMETERS\n };\n}\n\nfunction getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nfunction getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nclass GLTFPostProcessor {\n baseUri: string = '';\n // @ts-expect-error\n jsonUnprocessed: GLTF;\n // @ts-expect-error\n json: GLTFPostprocessed;\n buffers: {\n arrayBuffer: ArrayBuffer;\n byteOffset: number;\n byteLength: number;\n }[] = [];\n images: any[] = [];\n\n postProcess(gltf: GLTFWithBuffers, options = {}) {\n const {json, buffers = [], images = []} = gltf;\n // @ts-expect-error\n const {baseUri = ''} = gltf;\n assert(json);\n\n this.baseUri = baseUri;\n this.buffers = buffers;\n this.images = images;\n this.jsonUnprocessed = json;\n\n this.json = this._resolveTree(gltf.json, options);\n\n return this.json;\n }\n\n // Convert indexed glTF structure into tree structure\n // cross-link index resolution, enum lookup, convenience calculations\n // eslint-disable-next-line complexity, max-statements\n _resolveTree(gltf: GLTF, options = {}): GLTFPostprocessed {\n // @ts-expect-error\n const json: GLTFPostprocessed = {...gltf};\n this.json = json;\n\n if (gltf.bufferViews) {\n json.bufferViews = gltf.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));\n }\n if (gltf.images) {\n json.images = gltf.images.map((image, i) => this._resolveImage(image, i));\n }\n if (gltf.samplers) {\n json.samplers = gltf.samplers.map((sampler, i) => this._resolveSampler(sampler, i));\n }\n if (gltf.textures) {\n json.textures = gltf.textures.map((texture, i) => this._resolveTexture(texture, i));\n }\n if (gltf.accessors) {\n json.accessors = gltf.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));\n }\n if (gltf.materials) {\n json.materials = gltf.materials.map((material, i) => this._resolveMaterial(material, i));\n }\n if (gltf.meshes) {\n json.meshes = gltf.meshes.map((mesh, i) => this._resolveMesh(mesh, i));\n }\n if (gltf.nodes) {\n json.nodes = gltf.nodes.map((node, i) => this._resolveNode(node, i));\n json.nodes = json.nodes.map((node, i) => this._resolveNodeChildren(node));\n }\n if (gltf.skins) {\n json.skins = gltf.skins.map((skin, i) => this._resolveSkin(skin, i));\n }\n if (gltf.scenes) {\n json.scenes = gltf.scenes.map((scene, i) => this._resolveScene(scene, i));\n }\n if (typeof this.json.scene === 'number' && json.scenes) {\n json.scene = json.scenes[this.json.scene];\n }\n\n return json;\n }\n\n getScene(index: number): GLTFScenePostprocessed {\n return this._get(this.json.scenes, index);\n }\n\n getNode(index: number): GLTFNodePostprocessed {\n return this._get(this.json.nodes, index);\n }\n\n getSkin(index: number): GLTFSkinPostprocessed {\n return this._get(this.json.skins, index);\n }\n\n getMesh(index: number): GLTFMeshPostprocessed {\n return this._get(this.json.meshes, index);\n }\n\n getMaterial(index: number): GLTFMaterialPostprocessed {\n return this._get(this.json.materials, index);\n }\n\n getAccessor(index: number): GLTFAccessorPostprocessed {\n return this._get(this.json.accessors, index);\n }\n\n getCamera(index: number): GLTFCameraPostprocessed {\n return this._get(this.json.cameras, index);\n }\n\n getTexture(index: number): GLTFTexturePostprocessed {\n return this._get(this.json.textures, index);\n }\n\n getSampler(index: number): GLTFSamplerPostprocessed {\n return this._get(this.json.samplers, index);\n }\n\n getImage(index: number): GLTFImagePostprocessed {\n return this._get(this.json.images, index);\n }\n\n getBufferView(index: number): GLTFBufferViewPostprocessed {\n return this._get(this.json.bufferViews, index);\n }\n\n getBuffer(index: number): GLTFBufferPostprocessed {\n return this._get(this.json.buffers, index);\n }\n\n _get<T>(array: T[] | undefined, index: number): T {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = array && array[index];\n if (!object) {\n console.warn(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object as T;\n }\n\n // PARSING HELPERS\n\n _resolveScene(scene: GLTFScene, index: number): GLTFScenePostprocessed {\n return {\n ...scene,\n // @ts-ignore\n id: scene.id || `scene-${index}`,\n nodes: (scene.nodes || []).map((node) => this.getNode(node))\n };\n }\n\n _resolveNode(gltfNode: GLTFNode, index: number): GLTFNodePostprocessed {\n // @ts-expect-error\n const node: GLTFNodePostprocessed = {\n ...gltfNode,\n // @ts-expect-error id could already be present, glTF standard does not prevent it\n id: gltfNode?.id || `node-${index}`\n };\n if (gltfNode.mesh !== undefined) {\n node.mesh = this.getMesh(gltfNode.mesh);\n }\n if (gltfNode.camera !== undefined) {\n node.camera = this.getCamera(gltfNode.camera);\n }\n if (gltfNode.skin !== undefined) {\n node.skin = this.getSkin(gltfNode.skin);\n }\n\n // TODO deprecated - Delete in v4.0?\n // @ts-expect-error node.meshes does not seem to be part of the GLTF standard\n if (gltfNode.meshes !== undefined && gltfNode.meshes.length) {\n // @ts-expect-error\n node.mesh = gltfNode.meshes.reduce(\n (accum, meshIndex) => {\n const mesh = this.getMesh(meshIndex);\n accum.id = mesh.id;\n accum.primitives = accum.primitives.concat(mesh.primitives);\n return accum;\n },\n {primitives: []}\n );\n }\n\n return node;\n }\n\n _resolveNodeChildren(node: GLTFNodePostprocessed): GLTFNodePostprocessed {\n if (node.children) {\n // @ts-expect-error node.children are numbers at this stage\n node.children = node.children.map((child) => this.getNode(child));\n }\n return node;\n }\n\n _resolveSkin(gltfSkin: GLTFSkin, index: number): GLTFSkinPostprocessed {\n const inverseBindMatrices =\n typeof gltfSkin.inverseBindMatrices === 'number'\n ? this.getAccessor(gltfSkin.inverseBindMatrices)\n : undefined;\n\n return {\n ...gltfSkin,\n id: gltfSkin.id || `skin-${index}`,\n inverseBindMatrices\n };\n }\n\n _resolveMesh(gltfMesh: GLTFMesh, index: number): GLTFMeshPostprocessed {\n const mesh: GLTFMeshPostprocessed = {\n ...gltfMesh,\n id: gltfMesh.id || `mesh-${index}`,\n primitives: []\n };\n if (gltfMesh.primitives) {\n mesh.primitives = gltfMesh.primitives.map((gltfPrimitive) => {\n const primitive: GLTFMeshPrimitivePostprocessed = {\n ...gltfPrimitive,\n attributes: {},\n indices: undefined,\n material: undefined\n };\n const attributes = gltfPrimitive.attributes;\n for (const attribute in attributes) {\n primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);\n }\n if (gltfPrimitive.indices !== undefined) {\n primitive.indices = this.getAccessor(gltfPrimitive.indices);\n }\n if (gltfPrimitive.material !== undefined) {\n primitive.material = this.getMaterial(gltfPrimitive.material);\n }\n return primitive;\n });\n }\n return mesh;\n }\n\n _resolveMaterial(gltfMaterial: GLTFMaterial, index: number): GLTFMaterialPostprocessed {\n // @ts-expect-error\n const material: GLTFMaterialPostprocessed = {\n ...gltfMaterial,\n // @ts-expect-error\n id: gltfMaterial.id || `material-${index}`\n };\n if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture};\n material.normalTexture.texture = this.getTexture(material.normalTexture.index);\n }\n if (material.occlusionTexture) {\n material.occlusionTexture = {...material.occlusionTexture};\n material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);\n }\n if (material.emissiveTexture) {\n material.emissiveTexture = {...material.emissiveTexture};\n material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);\n }\n if (!material.emissiveFactor) {\n material.emissiveFactor = material.emissiveTexture ? [1, 1, 1] : [0, 0, 0];\n }\n\n if (material.pbrMetallicRoughness) {\n material.pbrMetallicRoughness = {...material.pbrMetallicRoughness};\n const mr = material.pbrMetallicRoughness;\n if (mr.baseColorTexture) {\n mr.baseColorTexture = {...mr.baseColorTexture};\n mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);\n }\n if (mr.metallicRoughnessTexture) {\n mr.metallicRoughnessTexture = {...mr.metallicRoughnessTexture};\n mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);\n }\n }\n return material;\n }\n\n _resolveAccessor(gltfAccessor: GLTFAccessor, index: number): GLTFAccessorPostprocessed {\n // Look up enums\n const bytesPerComponent = getBytesFromComponentType(gltfAccessor.componentType);\n const components = getSizeFromAccessorType(gltfAccessor.type);\n const bytesPerElement = bytesPerComponent * components;\n\n const accessor: GLTFAccessorPostprocessed = {\n ...gltfAccessor,\n // @ts-expect-error\n id: gltfAccessor.id || `accessor-${index}`,\n bytesPerComponent,\n components,\n bytesPerElement,\n value: undefined!,\n bufferView: undefined!,\n sparse: undefined!\n };\n if (gltfAccessor.bufferView !== undefined) {\n // Draco encoded meshes don't have bufferView\n accessor.bufferView = this.getBufferView(gltfAccessor.bufferView);\n }\n\n // Create TypedArray for the accessor\n // Note: The canonical way to instantiate is to ignore this array and create\n // WebGLBuffer's using the bufferViews.\n if (accessor.bufferView) {\n const buffer = accessor.bufferView.buffer;\n const {ArrayType, byteLength} = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);\n const byteOffset =\n (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;\n let cutBuffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);\n if (accessor.bufferView.byteStride) {\n cutBuffer = this._getValueFromInterleavedBuffer(\n buffer,\n byteOffset,\n accessor.bufferView.byteStride,\n accessor.bytesPerElement,\n accessor.count\n );\n }\n accessor.value = new ArrayType(cutBuffer);\n }\n\n return accessor;\n }\n\n /**\n * Take values of particular accessor from interleaved buffer\n * various parts of the buffer\n * @param buffer\n * @param byteOffset\n * @param byteStride\n * @param bytesPerElement\n * @param count\n * @returns\n */\n _getValueFromInterleavedBuffer(\n buffer,\n byteOffset: number,\n byteStride: number,\n bytesPerElement: number,\n count: number\n ): ArrayBufferLike {\n const result = new Uint8Array(count * bytesPerElement);\n for (let i = 0; i < count; i++) {\n const elementOffset = byteOffset + i * byteStride;\n result.set(\n new Uint8Array(buffer.arrayBuffer.slice(elementOffset, elementOffset + bytesPerElement)),\n i * bytesPerElement\n );\n }\n return result.buffer;\n }\n\n _resolveTexture(gltfTexture: GLTFTexture, index: number): GLTFTexturePostprocessed {\n return {\n ...gltfTexture,\n // @ts-expect-error id could already be present, glTF standard does not prevent it\n id: gltfTexture.id || `texture-${index}`,\n sampler:\n typeof gltfTexture.sampler === 'number'\n ? this.getSampler(gltfTexture.sampler)\n : makeDefaultSampler(),\n source: typeof gltfTexture.source === 'number' ? this.getImage(gltfTexture.source) : undefined\n };\n }\n\n _resolveSampler(gltfSampler: GLTFSampler, index: number): GLTFSamplerPostprocessed {\n const sampler: GLTFSamplerPostprocessed = {\n // @ts-expect-error id could already be present, glTF standard does not prevent it\n id: gltfSampler.id || `sampler-${index}`,\n ...gltfSampler,\n parameters: {}\n };\n // Map textual parameters to GL parameter values\n for (const key in sampler) {\n const glEnum = this._enumSamplerParameter(key);\n if (glEnum !== undefined) {\n sampler.parameters[glEnum] = sampler[key];\n }\n }\n return sampler;\n }\n\n _enumSamplerParameter(key: string): number {\n return SAMPLER_PARAMETER_GLTF_TO_GL[key];\n }\n\n _resolveImage(gltfImage: GLTFImage, index: number): GLTFImagePostprocessed {\n const image: GLTFImagePostprocessed = {\n ...gltfImage,\n // @ts-expect-error id could already be present, glTF standard does not prevent it\n id: gltfImage.id || `image-${index}`,\n image: null!,\n bufferView:\n gltfImage.bufferView !== undefined ? this.getBufferView(gltfImage.bufferView) : undefined\n };\n\n // Check if image has been preloaded by the GLTFLoader\n // If so, link it into the JSON and drop the URI\n const preloadedImage = this.images[index];\n if (preloadedImage) {\n image.image = preloadedImage;\n }\n\n return image;\n }\n\n _resolveBufferView(gltfBufferView: GLTFBufferView, index: number): GLTFBufferViewPostprocessed {\n const bufferIndex = gltfBufferView.buffer;\n const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;\n // Add offset of buffer, then offset of buffer view\n let byteOffset = this.buffers[bufferIndex].byteOffset || 0;\n if (gltfBufferView.byteOffset) {\n byteOffset += gltfBufferView.byteOffset;\n }\n\n const bufferView: GLTFBufferViewPostprocessed = {\n // // @ts-expect-error id could already be present, glTF standard does not prevent it\n id: `bufferView-${index}`,\n ...gltfBufferView,\n // ...this.buffers[bufferIndex],\n buffer: this.buffers[bufferIndex],\n data: new Uint8Array(arrayBuffer, byteOffset, gltfBufferView.byteLength)\n };\n\n return bufferView;\n }\n\n _resolveCamera(gltfCamera: GLTFCamera, index): GLTFCameraPostprocessed {\n const camera: GLTFCameraPostprocessed = {\n ...gltfCamera,\n // @ts-expect-error id could already be present, glTF standard does not prevent it\n id: gltfCamera.id || `camera-${index}`\n };\n\n // TODO - create 4x4 matrices\n if (camera.perspective) {\n // camera.matrix = createPerspectiveMatrix(camera.perspective);\n }\n if (camera.orthographic) {\n // camera.matrix = createOrthographicMatrix(camera.orthographic);\n }\n return camera;\n }\n}\n\nexport function postProcessGLTF(\n gltf: GLTFWithBuffers,\n options?: ParseGLTFOptions\n): GLTFPostprocessed {\n return new GLTFPostProcessor().postProcess(gltf, options);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { copyPaddedStringToDataView, copyPaddedArrayBufferToDataView } from '@loaders.gl/loader-utils';
|
|
2
|
+
const MAGIC_glTF = 0x46546c67;
|
|
3
|
+
const MAGIC_JSON = 0x4e4f534a;
|
|
4
|
+
const MAGIC_BIN = 0x004e4942;
|
|
5
|
+
const LE = true;
|
|
6
|
+
export function encodeGLBSync(glb, dataView) {
|
|
7
|
+
let byteOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
8
|
+
let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
9
|
+
const {
|
|
10
|
+
magic = MAGIC_glTF,
|
|
11
|
+
version = 2,
|
|
12
|
+
json = {},
|
|
13
|
+
binary
|
|
14
|
+
} = glb;
|
|
15
|
+
const byteOffsetStart = byteOffset;
|
|
16
|
+
if (dataView) {
|
|
17
|
+
dataView.setUint32(byteOffset + 0, magic, LE);
|
|
18
|
+
dataView.setUint32(byteOffset + 4, version, LE);
|
|
19
|
+
dataView.setUint32(byteOffset + 8, 0, LE);
|
|
20
|
+
}
|
|
21
|
+
const byteOffsetFileLength = byteOffset + 8;
|
|
22
|
+
byteOffset += 12;
|
|
23
|
+
const byteOffsetJsonHeader = byteOffset;
|
|
24
|
+
if (dataView) {
|
|
25
|
+
dataView.setUint32(byteOffset + 0, 0, LE);
|
|
26
|
+
dataView.setUint32(byteOffset + 4, MAGIC_JSON, LE);
|
|
27
|
+
}
|
|
28
|
+
byteOffset += 8;
|
|
29
|
+
const jsonString = JSON.stringify(json);
|
|
30
|
+
byteOffset = copyPaddedStringToDataView(dataView, byteOffset, jsonString, 4);
|
|
31
|
+
if (dataView) {
|
|
32
|
+
const jsonByteLength = byteOffset - byteOffsetJsonHeader - 8;
|
|
33
|
+
dataView.setUint32(byteOffsetJsonHeader + 0, jsonByteLength, LE);
|
|
34
|
+
}
|
|
35
|
+
if (binary) {
|
|
36
|
+
const byteOffsetBinHeader = byteOffset;
|
|
37
|
+
if (dataView) {
|
|
38
|
+
dataView.setUint32(byteOffset + 0, 0, LE);
|
|
39
|
+
dataView.setUint32(byteOffset + 4, MAGIC_BIN, LE);
|
|
40
|
+
}
|
|
41
|
+
byteOffset += 8;
|
|
42
|
+
byteOffset = copyPaddedArrayBufferToDataView(dataView, byteOffset, binary, 4);
|
|
43
|
+
if (dataView) {
|
|
44
|
+
const binByteLength = byteOffset - byteOffsetBinHeader - 8;
|
|
45
|
+
dataView.setUint32(byteOffsetBinHeader + 0, binByteLength, LE);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (dataView) {
|
|
49
|
+
const fileByteLength = byteOffset - byteOffsetStart;
|
|
50
|
+
dataView.setUint32(byteOffsetFileLength, fileByteLength, LE);
|
|
51
|
+
}
|
|
52
|
+
return byteOffset;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=encode-glb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode-glb.js","names":["copyPaddedStringToDataView","copyPaddedArrayBufferToDataView","MAGIC_glTF","MAGIC_JSON","MAGIC_BIN","LE","encodeGLBSync","glb","dataView","byteOffset","arguments","length","undefined","options","magic","version","json","binary","byteOffsetStart","setUint32","byteOffsetFileLength","byteOffsetJsonHeader","jsonString","JSON","stringify","jsonByteLength","byteOffsetBinHeader","binByteLength","fileByteLength"],"sources":["../../../../src/lib/encoders/encode-glb.ts"],"sourcesContent":["/* eslint-disable camelcase, max-statements */\nimport {\n copyPaddedStringToDataView,\n copyPaddedArrayBufferToDataView\n} from '@loaders.gl/loader-utils';\n// import type {GLB} from '../types/glb-types';\n\nconst MAGIC_glTF = 0x46546c67; // glTF in ASCII\nconst MAGIC_JSON = 0x4e4f534a; // JSON in ASCII\nconst MAGIC_BIN = 0x004e4942; // BIN\\0 in ASCII\n\nconst LE = true; // Binary GLTF is little endian.\n\nexport type GLBEncodeOptions = {};\n\n/**\n * Encode the full GLB buffer with header etc\n *\n * @param glb\n * @param dataView - if `null`, does not encode but just calculates length\n * @param byteOffset\n * @param options\n * @returns\n *\n * @see https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#glb-file-format-specification\n * @todo type GLB argument\n */\nexport function encodeGLBSync(\n glb,\n dataView: DataView | null,\n byteOffset = 0,\n options: GLBEncodeOptions = {}\n) {\n const {magic = MAGIC_glTF, version = 2, json = {}, binary} = glb;\n\n const byteOffsetStart = byteOffset;\n\n // Write GLB Header\n if (dataView) {\n dataView.setUint32(byteOffset + 0, magic, LE); // Magic number (the ASCII string 'glTF').\n dataView.setUint32(byteOffset + 4, version, LE); // Version 2 of binary glTF container format uint32\n dataView.setUint32(byteOffset + 8, 0, LE); // Total byte length of generated file (uint32), will be set last\n }\n const byteOffsetFileLength = byteOffset + 8;\n byteOffset += 12; // GLB_FILE_HEADER_SIZE\n\n // Write the JSON chunk header\n const byteOffsetJsonHeader = byteOffset;\n if (dataView) {\n dataView.setUint32(byteOffset + 0, 0, LE); // Byte length of json chunk (will be written later)\n dataView.setUint32(byteOffset + 4, MAGIC_JSON, LE); // Chunk type\n }\n byteOffset += 8; // GLB_CHUNK_HEADER_SIZE\n\n // Write the JSON chunk\n const jsonString = JSON.stringify(json);\n byteOffset = copyPaddedStringToDataView(dataView, byteOffset, jsonString, 4);\n\n // Now we know the JSON chunk length so we can write it.\n if (dataView) {\n const jsonByteLength = byteOffset - byteOffsetJsonHeader - 8; // GLB_CHUNK_HEADER_SIZE\n dataView.setUint32(byteOffsetJsonHeader + 0, jsonByteLength, LE); // Byte length of json chunk (uint32)\n }\n\n // Write the BIN chunk if present. The BIN chunk is optional.\n if (binary) {\n const byteOffsetBinHeader = byteOffset;\n\n // Write the BIN chunk header\n if (dataView) {\n dataView.setUint32(byteOffset + 0, 0, LE); // Byte length BIN (uint32)\n dataView.setUint32(byteOffset + 4, MAGIC_BIN, LE); // Chunk type\n }\n byteOffset += 8; // GLB_CHUNK_HEADER_SIZE\n\n byteOffset = copyPaddedArrayBufferToDataView(dataView, byteOffset, binary, 4);\n\n // Now we know the BIN chunk length so we can write it.\n if (dataView) {\n const binByteLength = byteOffset - byteOffsetBinHeader - 8; // GLB_CHUNK_HEADER_SIZE\n dataView.setUint32(byteOffsetBinHeader + 0, binByteLength, LE); // Byte length BIN (uint32)\n }\n }\n\n // Now we know the glb file length so we can write it.\n if (dataView) {\n const fileByteLength = byteOffset - byteOffsetStart;\n dataView.setUint32(byteOffsetFileLength, fileByteLength, LE); // Total byte length of generated file (uint32)\n }\n\n return byteOffset;\n}\n"],"mappings":"AACA,SACEA,0BAA0B,EAC1BC,+BAA+B,QAC1B,0BAA0B;AAGjC,MAAMC,UAAU,GAAG,UAAU;AAC7B,MAAMC,UAAU,GAAG,UAAU;AAC7B,MAAMC,SAAS,GAAG,UAAU;AAE5B,MAAMC,EAAE,GAAG,IAAI;AAgBf,OAAO,SAASC,aAAaA,CAC3BC,GAAG,EACHC,QAAyB,EAGzB;EAAA,IAFAC,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;EAAA,IACdG,OAAyB,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAE9B,MAAM;IAACI,KAAK,GAAGZ,UAAU;IAAEa,OAAO,GAAG,CAAC;IAAEC,IAAI,GAAG,CAAC,CAAC;IAAEC;EAAM,CAAC,GAAGV,GAAG;EAEhE,MAAMW,eAAe,GAAGT,UAAU;EAGlC,IAAID,QAAQ,EAAE;IACZA,QAAQ,CAACW,SAAS,CAACV,UAAU,GAAG,CAAC,EAAEK,KAAK,EAAET,EAAE,CAAC;IAC7CG,QAAQ,CAACW,SAAS,CAACV,UAAU,GAAG,CAAC,EAAEM,OAAO,EAAEV,EAAE,CAAC;IAC/CG,QAAQ,CAACW,SAAS,CAACV,UAAU,GAAG,CAAC,EAAE,CAAC,EAAEJ,EAAE,CAAC;EAC3C;EACA,MAAMe,oBAAoB,GAAGX,UAAU,GAAG,CAAC;EAC3CA,UAAU,IAAI,EAAE;EAGhB,MAAMY,oBAAoB,GAAGZ,UAAU;EACvC,IAAID,QAAQ,EAAE;IACZA,QAAQ,CAACW,SAAS,CAACV,UAAU,GAAG,CAAC,EAAE,CAAC,EAAEJ,EAAE,CAAC;IACzCG,QAAQ,CAACW,SAAS,CAACV,UAAU,GAAG,CAAC,EAAEN,UAAU,EAAEE,EAAE,CAAC;EACpD;EACAI,UAAU,IAAI,CAAC;EAGf,MAAMa,UAAU,GAAGC,IAAI,CAACC,SAAS,CAACR,IAAI,CAAC;EACvCP,UAAU,GAAGT,0BAA0B,CAACQ,QAAQ,EAAEC,UAAU,EAAEa,UAAU,EAAE,CAAC,CAAC;EAG5E,IAAId,QAAQ,EAAE;IACZ,MAAMiB,cAAc,GAAGhB,UAAU,GAAGY,oBAAoB,GAAG,CAAC;IAC5Db,QAAQ,CAACW,SAAS,CAACE,oBAAoB,GAAG,CAAC,EAAEI,cAAc,EAAEpB,EAAE,CAAC;EAClE;EAGA,IAAIY,MAAM,EAAE;IACV,MAAMS,mBAAmB,GAAGjB,UAAU;IAGtC,IAAID,QAAQ,EAAE;MACZA,QAAQ,CAACW,SAAS,CAACV,UAAU,GAAG,CAAC,EAAE,CAAC,EAAEJ,EAAE,CAAC;MACzCG,QAAQ,CAACW,SAAS,CAACV,UAAU,GAAG,CAAC,EAAEL,SAAS,EAAEC,EAAE,CAAC;IACnD;IACAI,UAAU,IAAI,CAAC;IAEfA,UAAU,GAAGR,+BAA+B,CAACO,QAAQ,EAAEC,UAAU,EAAEQ,MAAM,EAAE,CAAC,CAAC;IAG7E,IAAIT,QAAQ,EAAE;MACZ,MAAMmB,aAAa,GAAGlB,UAAU,GAAGiB,mBAAmB,GAAG,CAAC;MAC1DlB,QAAQ,CAACW,SAAS,CAACO,mBAAmB,GAAG,CAAC,EAAEC,aAAa,EAAEtB,EAAE,CAAC;IAChE;EACF;EAGA,IAAIG,QAAQ,EAAE;IACZ,MAAMoB,cAAc,GAAGnB,UAAU,GAAGS,eAAe;IACnDV,QAAQ,CAACW,SAAS,CAACC,oBAAoB,EAAEQ,cAAc,EAAEvB,EAAE,CAAC;EAC9D;EAEA,OAAOI,UAAU;AACnB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { encodeGLBSync } from './encode-glb';
|
|
2
|
+
export function encodeGLTFSync(gltf, arrayBuffer, byteOffset, options) {
|
|
3
|
+
convertBuffersToBase64(gltf);
|
|
4
|
+
return encodeGLBSync(gltf, arrayBuffer, byteOffset, options);
|
|
5
|
+
}
|
|
6
|
+
function convertBuffersToBase64(gltf) {
|
|
7
|
+
let {
|
|
8
|
+
firstBuffer = 0
|
|
9
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
10
|
+
if (gltf.buffers && gltf.buffers.length > firstBuffer) {
|
|
11
|
+
throw new Error('encodeGLTF: multiple buffers not yet implemented');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=encode-gltf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode-gltf.js","names":["encodeGLBSync","encodeGLTFSync","gltf","arrayBuffer","byteOffset","options","convertBuffersToBase64","firstBuffer","arguments","length","undefined","buffers","Error"],"sources":["../../../../src/lib/encoders/encode-gltf.ts"],"sourcesContent":["import {encodeGLBSync} from './encode-glb';\n\nexport type GLTFEncodeOptions = Record<string, any>;\n\n/**\n * Encode the full glTF file as a binary GLB file\n * Returns an ArrayBuffer that represents the complete GLB image that can be saved to file\n *\n * @todo - Does not support encoding to non-GLB versions of glTF format. Other formats\n * - Encode as a textual JSON file with binary data in base64 data URLs.\n * - Encode as a JSON with all images (and buffers?) in separate binary files\n *\n * glb-file-format-specification\n * @see https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#\n *\n * @param gltf\n * @param arrayBuffer\n * @param byteOffset\n * @param options\n * @returns\n */\nexport function encodeGLTFSync(gltf, arrayBuffer, byteOffset, options) {\n convertBuffersToBase64(gltf);\n\n // TODO: Copy buffers to binary\n\n return encodeGLBSync(gltf, arrayBuffer, byteOffset, options);\n}\n\nfunction convertBuffersToBase64(gltf, {firstBuffer = 0} = {}) {\n if (gltf.buffers && gltf.buffers.length > firstBuffer) {\n throw new Error('encodeGLTF: multiple buffers not yet implemented');\n }\n}\n"],"mappings":"AAAA,SAAQA,aAAa,QAAO,cAAc;AAqB1C,OAAO,SAASC,cAAcA,CAACC,IAAI,EAAEC,WAAW,EAAEC,UAAU,EAAEC,OAAO,EAAE;EACrEC,sBAAsB,CAACJ,IAAI,CAAC;EAI5B,OAAOF,aAAa,CAACE,IAAI,EAAEC,WAAW,EAAEC,UAAU,EAAEC,OAAO,CAAC;AAC9D;AAEA,SAASC,sBAAsBA,CAACJ,IAAI,EAA0B;EAAA,IAAxB;IAACK,WAAW,GAAG;EAAC,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAC1D,IAAIN,IAAI,CAACS,OAAO,IAAIT,IAAI,CAACS,OAAO,CAACF,MAAM,GAAGF,WAAW,EAAE;IACrD,MAAM,IAAIK,KAAK,CAAC,kDAAkD,CAAC;EACrE;AACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { GLTFScenegraph } from '../api/gltf-scenegraph';
|
|
2
|
+
import { meshoptDecodeGltfBuffer } from '../../meshopt/meshopt-decoder';
|
|
3
|
+
const DEFAULT_MESHOPT_OPTIONS = {
|
|
4
|
+
byteOffset: 0,
|
|
5
|
+
filter: 'NONE'
|
|
6
|
+
};
|
|
7
|
+
const EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';
|
|
8
|
+
export const name = EXT_MESHOPT_COMPRESSION;
|
|
9
|
+
export async function decode(gltfData, options) {
|
|
10
|
+
var _options$gltf;
|
|
11
|
+
const scenegraph = new GLTFScenegraph(gltfData);
|
|
12
|
+
if (!(options !== null && options !== void 0 && (_options$gltf = options.gltf) !== null && _options$gltf !== void 0 && _options$gltf.decompressMeshes)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const promises = [];
|
|
16
|
+
for (const bufferViewIndex of gltfData.json.bufferViews || []) {
|
|
17
|
+
promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));
|
|
18
|
+
}
|
|
19
|
+
await Promise.all(promises);
|
|
20
|
+
scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);
|
|
21
|
+
}
|
|
22
|
+
async function decodeMeshoptBufferView(scenegraph, bufferView) {
|
|
23
|
+
const meshoptExtension = scenegraph.getObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);
|
|
24
|
+
if (meshoptExtension) {
|
|
25
|
+
const {
|
|
26
|
+
byteOffset = 0,
|
|
27
|
+
byteLength = 0,
|
|
28
|
+
byteStride,
|
|
29
|
+
count,
|
|
30
|
+
mode,
|
|
31
|
+
filter = 'NONE',
|
|
32
|
+
buffer: bufferIndex
|
|
33
|
+
} = meshoptExtension;
|
|
34
|
+
const buffer = scenegraph.gltf.buffers[bufferIndex];
|
|
35
|
+
const source = new Uint8Array(buffer.arrayBuffer, buffer.byteOffset + byteOffset, byteLength);
|
|
36
|
+
const result = new Uint8Array(scenegraph.gltf.buffers[bufferView.buffer].arrayBuffer, bufferView.byteOffset, bufferView.byteLength);
|
|
37
|
+
await meshoptDecodeGltfBuffer(result, count, byteStride, source, mode, filter);
|
|
38
|
+
scenegraph.removeObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=EXT_meshopt_compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EXT_meshopt_compression.js","names":["GLTFScenegraph","meshoptDecodeGltfBuffer","DEFAULT_MESHOPT_OPTIONS","byteOffset","filter","EXT_MESHOPT_COMPRESSION","name","decode","gltfData","options","_options$gltf","scenegraph","gltf","decompressMeshes","promises","bufferViewIndex","json","bufferViews","push","decodeMeshoptBufferView","Promise","all","removeExtension","bufferView","meshoptExtension","getObjectExtension","byteLength","byteStride","count","mode","buffer","bufferIndex","buffers","source","Uint8Array","arrayBuffer","result","removeObjectExtension"],"sources":["../../../../src/lib/extensions/EXT_meshopt_compression.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport type {GLTF, GLTFBufferView, GLTF_EXT_meshopt_compression} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {meshoptDecodeGltfBuffer} from '../../meshopt/meshopt-decoder';\n\n// @ts-ignore\n// eslint-disable-next-line\nconst DEFAULT_MESHOPT_OPTIONS = {\n byteOffset: 0,\n filter: 'NONE'\n};\n\n/** Extension name */\nconst EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';\n\nexport const name = EXT_MESHOPT_COMPRESSION;\n\nexport async function decode(gltfData: {json: GLTF}, options: GLTFLoaderOptions) {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const promises: Promise<any>[] = [];\n for (const bufferViewIndex of gltfData.json.bufferViews || []) {\n promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);\n}\n\n/** Decode one meshopt buffer view */\nasync function decodeMeshoptBufferView(\n scenegraph: GLTFScenegraph,\n bufferView: GLTFBufferView\n): Promise<void> {\n const meshoptExtension = scenegraph.getObjectExtension<GLTF_EXT_meshopt_compression>(\n bufferView,\n EXT_MESHOPT_COMPRESSION\n );\n if (meshoptExtension) {\n const {\n byteOffset = 0,\n byteLength = 0,\n byteStride,\n count,\n mode,\n filter = 'NONE',\n buffer: bufferIndex\n } = meshoptExtension;\n const buffer = scenegraph.gltf.buffers[bufferIndex];\n\n const source = new Uint8Array(buffer.arrayBuffer, buffer.byteOffset + byteOffset, byteLength);\n const result = new Uint8Array(\n scenegraph.gltf.buffers[bufferView.buffer].arrayBuffer,\n bufferView.byteOffset,\n bufferView.byteLength\n );\n await meshoptDecodeGltfBuffer(result, count, byteStride, source, mode, filter);\n scenegraph.removeObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);\n }\n}\n"],"mappings":"AAGA,SAAQA,cAAc,QAAO,wBAAwB;AACrD,SAAQC,uBAAuB,QAAO,+BAA+B;AAIrE,MAAMC,uBAAuB,GAAG;EAC9BC,UAAU,EAAE,CAAC;EACbC,MAAM,EAAE;AACV,CAAC;AAGD,MAAMC,uBAAuB,GAAG,yBAAyB;AAEzD,OAAO,MAAMC,IAAI,GAAGD,uBAAuB;AAE3C,OAAO,eAAeE,MAAMA,CAACC,QAAsB,EAAEC,OAA0B,EAAE;EAAA,IAAAC,aAAA;EAC/E,MAAMC,UAAU,GAAG,IAAIX,cAAc,CAACQ,QAAQ,CAAC;EAE/C,IAAI,EAACC,OAAO,aAAPA,OAAO,gBAAAC,aAAA,GAAPD,OAAO,CAAEG,IAAI,cAAAF,aAAA,eAAbA,aAAA,CAAeG,gBAAgB,GAAE;IACpC;EACF;EAEA,MAAMC,QAAwB,GAAG,EAAE;EACnC,KAAK,MAAMC,eAAe,IAAIP,QAAQ,CAACQ,IAAI,CAACC,WAAW,IAAI,EAAE,EAAE;IAC7DH,QAAQ,CAACI,IAAI,CAACC,uBAAuB,CAACR,UAAU,EAAEI,eAAe,CAAC,CAAC;EACrE;EAGA,MAAMK,OAAO,CAACC,GAAG,CAACP,QAAQ,CAAC;EAG3BH,UAAU,CAACW,eAAe,CAACjB,uBAAuB,CAAC;AACrD;AAGA,eAAec,uBAAuBA,CACpCR,UAA0B,EAC1BY,UAA0B,EACX;EACf,MAAMC,gBAAgB,GAAGb,UAAU,CAACc,kBAAkB,CACpDF,UAAU,EACVlB,uBACF,CAAC;EACD,IAAImB,gBAAgB,EAAE;IACpB,MAAM;MACJrB,UAAU,GAAG,CAAC;MACduB,UAAU,GAAG,CAAC;MACdC,UAAU;MACVC,KAAK;MACLC,IAAI;MACJzB,MAAM,GAAG,MAAM;MACf0B,MAAM,EAAEC;IACV,CAAC,GAAGP,gBAAgB;IACpB,MAAMM,MAAM,GAAGnB,UAAU,CAACC,IAAI,CAACoB,OAAO,CAACD,WAAW,CAAC;IAEnD,MAAME,MAAM,GAAG,IAAIC,UAAU,CAACJ,MAAM,CAACK,WAAW,EAAEL,MAAM,CAAC3B,UAAU,GAAGA,UAAU,EAAEuB,UAAU,CAAC;IAC7F,MAAMU,MAAM,GAAG,IAAIF,UAAU,CAC3BvB,UAAU,CAACC,IAAI,CAACoB,OAAO,CAACT,UAAU,CAACO,MAAM,CAAC,CAACK,WAAW,EACtDZ,UAAU,CAACpB,UAAU,EACrBoB,UAAU,CAACG,UACb,CAAC;IACD,MAAMzB,uBAAuB,CAACmC,MAAM,EAAER,KAAK,EAAED,UAAU,EAAEM,MAAM,EAAEJ,IAAI,EAAEzB,MAAM,CAAC;IAC9EO,UAAU,CAAC0B,qBAAqB,CAACd,UAAU,EAAElB,uBAAuB,CAAC;EACvE;AACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { isImageFormatSupported } from '@loaders.gl/images';
|
|
2
|
+
import { GLTFScenegraph } from '../api/gltf-scenegraph';
|
|
3
|
+
const EXT_TEXTURE_WEBP = 'EXT_texture_webp';
|
|
4
|
+
export const name = EXT_TEXTURE_WEBP;
|
|
5
|
+
export function preprocess(gltfData, options) {
|
|
6
|
+
const scenegraph = new GLTFScenegraph(gltfData);
|
|
7
|
+
if (!isImageFormatSupported('image/webp')) {
|
|
8
|
+
if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {
|
|
9
|
+
throw new Error("gltf: Required extension ".concat(EXT_TEXTURE_WEBP, " not supported by browser"));
|
|
10
|
+
}
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const {
|
|
14
|
+
json
|
|
15
|
+
} = scenegraph;
|
|
16
|
+
for (const texture of json.textures || []) {
|
|
17
|
+
const extension = scenegraph.getObjectExtension(texture, EXT_TEXTURE_WEBP);
|
|
18
|
+
if (extension) {
|
|
19
|
+
texture.source = extension.source;
|
|
20
|
+
}
|
|
21
|
+
scenegraph.removeObjectExtension(texture, EXT_TEXTURE_WEBP);
|
|
22
|
+
}
|
|
23
|
+
scenegraph.removeExtension(EXT_TEXTURE_WEBP);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=EXT_texture_webp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EXT_texture_webp.js","names":["isImageFormatSupported","GLTFScenegraph","EXT_TEXTURE_WEBP","name","preprocess","gltfData","options","scenegraph","getRequiredExtensions","includes","Error","concat","json","texture","textures","extension","getObjectExtension","source","removeObjectExtension","removeExtension"],"sources":["../../../../src/lib/extensions/EXT_texture_webp.ts"],"sourcesContent":["// GLTF EXTENSION: EXT_TEXTURE_WEBP\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_TEXTURE_WEBP\n/* eslint-disable camelcase */\n\nimport type {GLTF, GLTF_EXT_texture_webp} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport {isImageFormatSupported} from '@loaders.gl/images';\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\n\nconst EXT_TEXTURE_WEBP = 'EXT_texture_webp';\n\n/** Extension name */\nexport const name = EXT_TEXTURE_WEBP;\n\n/**\n * Replaces a texture source reference with the extension texture\n * Done in preprocess() to prevent load of default image\n */\nexport function preprocess(gltfData: {json: GLTF}, options: GLTFLoaderOptions): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!isImageFormatSupported('image/webp')) {\n if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {\n throw new Error(`gltf: Required extension ${EXT_TEXTURE_WEBP} not supported by browser`);\n }\n return;\n }\n\n const {json} = scenegraph;\n\n for (const texture of json.textures || []) {\n const extension = scenegraph.getObjectExtension<GLTF_EXT_texture_webp>(\n texture,\n EXT_TEXTURE_WEBP\n );\n if (extension) {\n // TODO - if multiple texture extensions are present which one wins?\n texture.source = extension.source;\n }\n scenegraph.removeObjectExtension(texture, EXT_TEXTURE_WEBP);\n }\n\n // Remove the top-level extension\n scenegraph.removeExtension(EXT_TEXTURE_WEBP);\n}\n"],"mappings":"AAOA,SAAQA,sBAAsB,QAAO,oBAAoB;AACzD,SAAQC,cAAc,QAAO,wBAAwB;AAErD,MAAMC,gBAAgB,GAAG,kBAAkB;AAG3C,OAAO,MAAMC,IAAI,GAAGD,gBAAgB;AAMpC,OAAO,SAASE,UAAUA,CAACC,QAAsB,EAAEC,OAA0B,EAAQ;EACnF,MAAMC,UAAU,GAAG,IAAIN,cAAc,CAACI,QAAQ,CAAC;EAE/C,IAAI,CAACL,sBAAsB,CAAC,YAAY,CAAC,EAAE;IACzC,IAAIO,UAAU,CAACC,qBAAqB,CAAC,CAAC,CAACC,QAAQ,CAACP,gBAAgB,CAAC,EAAE;MACjE,MAAM,IAAIQ,KAAK,6BAAAC,MAAA,CAA6BT,gBAAgB,8BAA2B,CAAC;IAC1F;IACA;EACF;EAEA,MAAM;IAACU;EAAI,CAAC,GAAGL,UAAU;EAEzB,KAAK,MAAMM,OAAO,IAAID,IAAI,CAACE,QAAQ,IAAI,EAAE,EAAE;IACzC,MAAMC,SAAS,GAAGR,UAAU,CAACS,kBAAkB,CAC7CH,OAAO,EACPX,gBACF,CAAC;IACD,IAAIa,SAAS,EAAE;MAEbF,OAAO,CAACI,MAAM,GAAGF,SAAS,CAACE,MAAM;IACnC;IACAV,UAAU,CAACW,qBAAqB,CAACL,OAAO,EAAEX,gBAAgB,CAAC;EAC7D;EAGAK,UAAU,CAACY,eAAe,CAACjB,gBAAgB,CAAC;AAC9C"}
|