@loaders.gl/gltf 4.0.0-alpha.5 → 4.0.0-alpha.7
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.js +2 -2
- package/dist/dist.min.js +3545 -2445
- 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 +595 -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 +103 -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 +283 -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 +452 -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 +77 -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 +155 -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 +5 -4
- package/dist/glb-loader.d.ts.map +1 -1
- package/dist/glb-loader.js +30 -28
- package/dist/glb-writer.d.ts +7 -16
- package/dist/glb-writer.d.ts.map +1 -1
- package/dist/glb-writer.js +32 -26
- package/dist/gltf-loader.d.ts +7 -6
- package/dist/gltf-loader.d.ts.map +1 -1
- package/dist/gltf-loader.js +46 -43
- package/dist/gltf-writer.d.ts +2 -2
- package/dist/gltf-writer.d.ts.map +1 -1
- package/dist/gltf-writer.js +29 -26
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -7
- package/dist/lib/api/gltf-extensions.d.ts +7 -2
- package/dist/lib/api/gltf-extensions.d.ts.map +1 -1
- package/dist/lib/api/gltf-extensions.js +79 -31
- package/dist/lib/api/gltf-scenegraph.d.ts +10 -14
- package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -1
- package/dist/lib/api/gltf-scenegraph.js +577 -513
- package/dist/lib/api/normalize-gltf-v1.d.ts.map +1 -1
- package/dist/lib/api/normalize-gltf-v1.js +278 -229
- package/dist/lib/api/post-process-gltf.d.ts +4 -1
- package/dist/lib/api/post-process-gltf.d.ts.map +1 -1
- package/dist/lib/api/post-process-gltf.js +385 -374
- package/dist/lib/encoders/encode-glb.d.ts +14 -1
- package/dist/lib/encoders/encode-glb.d.ts.map +1 -1
- package/dist/lib/encoders/encode-glb.js +67 -58
- package/dist/lib/encoders/encode-gltf.d.ts +18 -0
- package/dist/lib/encoders/encode-gltf.d.ts.map +1 -1
- package/dist/lib/encoders/encode-gltf.js +30 -12
- package/dist/lib/extensions/EXT_meshopt_compression.d.ts +1 -4
- package/dist/lib/extensions/EXT_meshopt_compression.d.ts.map +1 -1
- package/dist/lib/extensions/EXT_meshopt_compression.js +35 -50
- package/dist/lib/extensions/EXT_texture_webp.d.ts +1 -1
- package/dist/lib/extensions/EXT_texture_webp.d.ts.map +1 -1
- package/dist/lib/extensions/EXT_texture_webp.js +32 -28
- package/dist/lib/extensions/KHR_binary_gltf.d.ts +1 -1
- package/dist/lib/extensions/KHR_binary_gltf.d.ts.map +1 -1
- package/dist/lib/extensions/KHR_binary_gltf.js +36 -23
- package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts +1 -1
- package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
- package/dist/lib/extensions/KHR_draco_mesh_compression.js +123 -111
- package/dist/lib/extensions/KHR_texture_basisu.d.ts +1 -1
- package/dist/lib/extensions/KHR_texture_basisu.d.ts.map +1 -1
- 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 +6 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +115 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts +1 -1
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts.map +1 -1
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +54 -44
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts +1 -1
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts.map +1 -1
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +39 -32
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts +1 -1
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts.map +1 -1
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +73 -62
- package/dist/lib/gltf-utils/get-typed-array.js +39 -14
- package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts +1 -1
- package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts.map +1 -1
- package/dist/lib/gltf-utils/gltf-attribute-utils.js +65 -65
- package/dist/lib/gltf-utils/gltf-constants.d.ts +17 -0
- package/dist/lib/gltf-utils/gltf-constants.d.ts.map +1 -1
- package/dist/lib/gltf-utils/gltf-constants.js +38 -32
- package/dist/lib/gltf-utils/gltf-utils.d.ts +7 -0
- package/dist/lib/gltf-utils/gltf-utils.d.ts.map +1 -1
- package/dist/lib/gltf-utils/gltf-utils.js +79 -45
- package/dist/lib/gltf-utils/resolve-url.js +17 -15
- package/dist/lib/parsers/parse-glb.d.ts +15 -3
- package/dist/lib/parsers/parse-glb.d.ts.map +1 -1
- package/dist/lib/parsers/parse-glb.js +143 -105
- package/dist/lib/parsers/parse-gltf.d.ts +8 -4
- package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/lib/parsers/parse-gltf.js +166 -154
- package/dist/lib/types/glb-types.d.ts +3 -3
- package/dist/lib/types/glb-types.d.ts.map +1 -1
- package/dist/lib/types/glb-types.js +2 -2
- package/dist/lib/types/gltf-json-schema.d.ts +530 -132
- package/dist/lib/types/gltf-json-schema.d.ts.map +1 -1
- package/dist/lib/types/gltf-json-schema.js +4 -2
- package/dist/lib/types/gltf-postprocessed-schema.d.ts +175 -210
- package/dist/lib/types/gltf-postprocessed-schema.d.ts.map +1 -1
- package/dist/lib/types/gltf-postprocessed-schema.js +4 -2
- package/dist/lib/types/gltf-types.d.ts +22 -7
- package/dist/lib/types/gltf-types.d.ts.map +1 -1
- package/dist/lib/types/gltf-types.js +3 -2
- package/dist/lib/utils/assert.js +11 -5
- package/dist/lib/utils/version.js +7 -2
- package/dist/meshopt/meshopt-decoder.js +97 -82
- package/dist/webp/webp.d.ts +1 -1
- package/dist/webp/webp.d.ts.map +1 -1
- package/dist/webp/webp.js +32 -23
- package/package.json +9 -8
- 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 -6
- package/src/lib/api/gltf-extensions.ts +14 -3
- package/src/lib/api/gltf-scenegraph.ts +61 -34
- package/src/lib/api/normalize-gltf-v1.ts +2 -1
- package/src/lib/api/post-process-gltf.ts +275 -150
- package/src/lib/encoders/encode-glb.ts +21 -4
- package/src/lib/encoders/encode-gltf.ts +19 -10
- 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 +4 -3
- package/src/lib/extensions/KHR_texture_transform.ts +308 -0
- package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +163 -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 +32 -17
- package/src/lib/types/glb-types.ts +1 -1
- package/src/lib/types/gltf-json-schema.ts +582 -126
- package/src/lib/types/gltf-postprocessed-schema.ts +289 -212
- package/src/lib/types/gltf-types.ts +41 -44
- 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/dist/{meshopt → es5/meshopt}/meshopt-encoder.ts.disabled +0 -0
|
@@ -1,7 +1,42 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import type {GLTFWithBuffers} from '../types/gltf-types';
|
|
4
|
+
import type {ParseGLTFOptions} from '../parsers/parse-gltf';
|
|
5
|
+
|
|
6
|
+
import type {
|
|
7
|
+
GLTF,
|
|
8
|
+
GLTFAccessor,
|
|
9
|
+
GLTFBufferView,
|
|
10
|
+
GLTFCamera,
|
|
11
|
+
GLTFImage,
|
|
12
|
+
GLTFMaterial,
|
|
13
|
+
GLTFMesh,
|
|
14
|
+
GLTFNode,
|
|
15
|
+
GLTFSampler,
|
|
16
|
+
GLTFScene,
|
|
17
|
+
GLTFSkin,
|
|
18
|
+
GLTFTexture
|
|
19
|
+
} from '../types/gltf-json-schema';
|
|
20
|
+
|
|
21
|
+
import type {
|
|
22
|
+
GLTFPostprocessed,
|
|
23
|
+
GLTFAccessorPostprocessed,
|
|
24
|
+
GLTFBufferPostprocessed,
|
|
25
|
+
GLTFBufferViewPostprocessed,
|
|
26
|
+
GLTFCameraPostprocessed,
|
|
27
|
+
GLTFImagePostprocessed,
|
|
28
|
+
GLTFMaterialPostprocessed,
|
|
29
|
+
GLTFMeshPostprocessed,
|
|
30
|
+
GLTFNodePostprocessed,
|
|
31
|
+
GLTFSamplerPostprocessed,
|
|
32
|
+
GLTFScenePostprocessed,
|
|
33
|
+
GLTFSkinPostprocessed,
|
|
34
|
+
GLTFTexturePostprocessed,
|
|
35
|
+
GLTFMeshPrimitivePostprocessed
|
|
36
|
+
} from '../types/gltf-postprocessed-schema';
|
|
37
|
+
|
|
1
38
|
import {assert} from '../utils/assert';
|
|
2
39
|
import {getAccessorArrayTypeAndLength} from '../gltf-utils/gltf-utils';
|
|
3
|
-
import {BufferView} from '../types/gltf-json-schema';
|
|
4
|
-
import {BufferView as BufferViewPostprocessed} from '../types/gltf-postprocessed-schema';
|
|
5
40
|
|
|
6
41
|
// This is a post processor for loaded glTF files
|
|
7
42
|
// The goal is to make the loaded data easier to use in WebGL applications
|
|
@@ -54,13 +89,20 @@ const SAMPLER_PARAMETER_GLTF_TO_GL = {
|
|
|
54
89
|
|
|
55
90
|
// When undefined, a sampler with repeat wrapping and auto filtering should be used.
|
|
56
91
|
// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture
|
|
57
|
-
const
|
|
92
|
+
const DEFAULT_SAMPLER_PARAMETERS = {
|
|
58
93
|
[GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,
|
|
59
94
|
[GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,
|
|
60
95
|
[GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,
|
|
61
96
|
[GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT
|
|
62
97
|
};
|
|
63
98
|
|
|
99
|
+
function makeDefaultSampler(): GLTFSamplerPostprocessed {
|
|
100
|
+
return {
|
|
101
|
+
id: 'default-sampler',
|
|
102
|
+
parameters: DEFAULT_SAMPLER_PARAMETERS
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
64
106
|
function getBytesFromComponentType(componentType) {
|
|
65
107
|
return BYTES[componentType];
|
|
66
108
|
}
|
|
@@ -71,142 +113,172 @@ function getSizeFromAccessorType(type) {
|
|
|
71
113
|
|
|
72
114
|
class GLTFPostProcessor {
|
|
73
115
|
baseUri: string = '';
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
116
|
+
// @ts-expect-error
|
|
117
|
+
jsonUnprocessed: GLTF;
|
|
118
|
+
// @ts-expect-error
|
|
119
|
+
json: GLTFPostprocessed;
|
|
120
|
+
buffers: {
|
|
121
|
+
arrayBuffer: ArrayBuffer;
|
|
122
|
+
byteOffset: number;
|
|
123
|
+
byteLength: number;
|
|
124
|
+
}[] = [];
|
|
125
|
+
images: any[] = [];
|
|
126
|
+
|
|
127
|
+
postProcess(gltf: GLTFWithBuffers, options = {}) {
|
|
128
|
+
const {json, buffers = [], images = []} = gltf;
|
|
129
|
+
// @ts-expect-error
|
|
130
|
+
const {baseUri = ''} = gltf;
|
|
80
131
|
assert(json);
|
|
81
132
|
|
|
82
133
|
this.baseUri = baseUri;
|
|
83
|
-
this.json = json;
|
|
84
134
|
this.buffers = buffers;
|
|
85
135
|
this.images = images;
|
|
136
|
+
this.jsonUnprocessed = json;
|
|
86
137
|
|
|
87
|
-
this._resolveTree(
|
|
138
|
+
this.json = this._resolveTree(gltf.json, options);
|
|
88
139
|
|
|
89
140
|
return this.json;
|
|
90
141
|
}
|
|
91
142
|
|
|
92
143
|
// Convert indexed glTF structure into tree structure
|
|
93
144
|
// cross-link index resolution, enum lookup, convenience calculations
|
|
94
|
-
// eslint-disable-next-line complexity
|
|
95
|
-
_resolveTree(
|
|
96
|
-
|
|
97
|
-
|
|
145
|
+
// eslint-disable-next-line complexity, max-statements
|
|
146
|
+
_resolveTree(gltf: GLTF, options = {}): GLTFPostprocessed {
|
|
147
|
+
// @ts-expect-error
|
|
148
|
+
const json: GLTFPostprocessed = {...gltf};
|
|
149
|
+
this.json = json;
|
|
150
|
+
|
|
151
|
+
if (gltf.bufferViews) {
|
|
152
|
+
json.bufferViews = gltf.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));
|
|
98
153
|
}
|
|
99
|
-
if (
|
|
100
|
-
json.images =
|
|
154
|
+
if (gltf.images) {
|
|
155
|
+
json.images = gltf.images.map((image, i) => this._resolveImage(image, i));
|
|
101
156
|
}
|
|
102
|
-
if (
|
|
103
|
-
json.samplers =
|
|
157
|
+
if (gltf.samplers) {
|
|
158
|
+
json.samplers = gltf.samplers.map((sampler, i) => this._resolveSampler(sampler, i));
|
|
104
159
|
}
|
|
105
|
-
if (
|
|
106
|
-
json.textures =
|
|
160
|
+
if (gltf.textures) {
|
|
161
|
+
json.textures = gltf.textures.map((texture, i) => this._resolveTexture(texture, i));
|
|
107
162
|
}
|
|
108
|
-
if (
|
|
109
|
-
json.accessors =
|
|
163
|
+
if (gltf.accessors) {
|
|
164
|
+
json.accessors = gltf.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));
|
|
110
165
|
}
|
|
111
|
-
if (
|
|
112
|
-
json.materials =
|
|
166
|
+
if (gltf.materials) {
|
|
167
|
+
json.materials = gltf.materials.map((material, i) => this._resolveMaterial(material, i));
|
|
113
168
|
}
|
|
114
|
-
if (
|
|
115
|
-
json.meshes =
|
|
169
|
+
if (gltf.meshes) {
|
|
170
|
+
json.meshes = gltf.meshes.map((mesh, i) => this._resolveMesh(mesh, i));
|
|
116
171
|
}
|
|
117
|
-
if (
|
|
118
|
-
json.nodes =
|
|
172
|
+
if (gltf.nodes) {
|
|
173
|
+
json.nodes = gltf.nodes.map((node, i) => this._resolveNode(node, i));
|
|
174
|
+
json.nodes = json.nodes.map((node, i) => this._resolveNodeChildren(node));
|
|
119
175
|
}
|
|
120
|
-
if (
|
|
121
|
-
json.skins =
|
|
176
|
+
if (gltf.skins) {
|
|
177
|
+
json.skins = gltf.skins.map((skin, i) => this._resolveSkin(skin, i));
|
|
122
178
|
}
|
|
123
|
-
if (
|
|
124
|
-
json.scenes =
|
|
179
|
+
if (gltf.scenes) {
|
|
180
|
+
json.scenes = gltf.scenes.map((scene, i) => this._resolveScene(scene, i));
|
|
125
181
|
}
|
|
126
|
-
if (json.scene
|
|
182
|
+
if (typeof this.json.scene === 'number' && json.scenes) {
|
|
127
183
|
json.scene = json.scenes[this.json.scene];
|
|
128
184
|
}
|
|
185
|
+
|
|
186
|
+
return json;
|
|
129
187
|
}
|
|
130
188
|
|
|
131
|
-
getScene(index) {
|
|
132
|
-
return this._get(
|
|
189
|
+
getScene(index: number): GLTFScenePostprocessed {
|
|
190
|
+
return this._get(this.json.scenes, index);
|
|
133
191
|
}
|
|
134
192
|
|
|
135
|
-
getNode(index) {
|
|
136
|
-
return this._get(
|
|
193
|
+
getNode(index: number): GLTFNodePostprocessed {
|
|
194
|
+
return this._get(this.json.nodes, index);
|
|
137
195
|
}
|
|
138
196
|
|
|
139
|
-
getSkin(index) {
|
|
140
|
-
return this._get(
|
|
197
|
+
getSkin(index: number): GLTFSkinPostprocessed {
|
|
198
|
+
return this._get(this.json.skins, index);
|
|
141
199
|
}
|
|
142
200
|
|
|
143
|
-
getMesh(index) {
|
|
144
|
-
return this._get(
|
|
201
|
+
getMesh(index: number): GLTFMeshPostprocessed {
|
|
202
|
+
return this._get(this.json.meshes, index);
|
|
145
203
|
}
|
|
146
204
|
|
|
147
|
-
getMaterial(index) {
|
|
148
|
-
return this._get(
|
|
205
|
+
getMaterial(index: number): GLTFMaterialPostprocessed {
|
|
206
|
+
return this._get(this.json.materials, index);
|
|
149
207
|
}
|
|
150
208
|
|
|
151
|
-
getAccessor(index) {
|
|
152
|
-
return this._get(
|
|
209
|
+
getAccessor(index: number): GLTFAccessorPostprocessed {
|
|
210
|
+
return this._get(this.json.accessors, index);
|
|
153
211
|
}
|
|
154
212
|
|
|
155
|
-
getCamera(index) {
|
|
156
|
-
return
|
|
213
|
+
getCamera(index: number): GLTFCameraPostprocessed {
|
|
214
|
+
return this._get(this.json.cameras, index);
|
|
157
215
|
}
|
|
158
216
|
|
|
159
|
-
getTexture(index) {
|
|
160
|
-
return this._get(
|
|
217
|
+
getTexture(index: number): GLTFTexturePostprocessed {
|
|
218
|
+
return this._get(this.json.textures, index);
|
|
161
219
|
}
|
|
162
220
|
|
|
163
|
-
getSampler(index) {
|
|
164
|
-
return this._get(
|
|
221
|
+
getSampler(index: number): GLTFSamplerPostprocessed {
|
|
222
|
+
return this._get(this.json.samplers, index);
|
|
165
223
|
}
|
|
166
224
|
|
|
167
|
-
getImage(index) {
|
|
168
|
-
return this._get(
|
|
225
|
+
getImage(index: number): GLTFImagePostprocessed {
|
|
226
|
+
return this._get(this.json.images, index);
|
|
169
227
|
}
|
|
170
228
|
|
|
171
|
-
getBufferView(index) {
|
|
172
|
-
return this._get(
|
|
229
|
+
getBufferView(index: number): GLTFBufferViewPostprocessed {
|
|
230
|
+
return this._get(this.json.bufferViews, index);
|
|
173
231
|
}
|
|
174
232
|
|
|
175
|
-
getBuffer(index) {
|
|
176
|
-
return this._get(
|
|
233
|
+
getBuffer(index: number): GLTFBufferPostprocessed {
|
|
234
|
+
return this._get(this.json.buffers, index);
|
|
177
235
|
}
|
|
178
236
|
|
|
179
|
-
_get(array, index) {
|
|
237
|
+
_get<T>(array: T[] | undefined, index: number): T {
|
|
180
238
|
// check if already resolved
|
|
181
239
|
if (typeof index === 'object') {
|
|
182
240
|
return index;
|
|
183
241
|
}
|
|
184
|
-
const object =
|
|
242
|
+
const object = array && array[index];
|
|
185
243
|
if (!object) {
|
|
186
244
|
console.warn(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line
|
|
187
245
|
}
|
|
188
|
-
return object;
|
|
246
|
+
return object as T;
|
|
189
247
|
}
|
|
190
248
|
|
|
191
249
|
// PARSING HELPERS
|
|
192
250
|
|
|
193
|
-
_resolveScene(scene, index) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
251
|
+
_resolveScene(scene: GLTFScene, index: number): GLTFScenePostprocessed {
|
|
252
|
+
return {
|
|
253
|
+
...scene,
|
|
254
|
+
// @ts-ignore
|
|
255
|
+
id: scene.id || `scene-${index}`,
|
|
256
|
+
nodes: (scene.nodes || []).map((node) => this.getNode(node))
|
|
257
|
+
};
|
|
198
258
|
}
|
|
199
259
|
|
|
200
|
-
_resolveNode(
|
|
201
|
-
//
|
|
202
|
-
node
|
|
203
|
-
|
|
204
|
-
|
|
260
|
+
_resolveNode(gltfNode: GLTFNode, index: number): GLTFNodePostprocessed {
|
|
261
|
+
// @ts-expect-error
|
|
262
|
+
const node: GLTFNodePostprocessed = {
|
|
263
|
+
...gltfNode,
|
|
264
|
+
// @ts-expect-error id could already be present, glTF standard does not prevent it
|
|
265
|
+
id: gltfNode?.id || `node-${index}`
|
|
266
|
+
};
|
|
267
|
+
if (gltfNode.mesh !== undefined) {
|
|
268
|
+
node.mesh = this.getMesh(gltfNode.mesh);
|
|
269
|
+
}
|
|
270
|
+
if (gltfNode.camera !== undefined) {
|
|
271
|
+
node.camera = this.getCamera(gltfNode.camera);
|
|
205
272
|
}
|
|
206
|
-
if (
|
|
207
|
-
node.
|
|
208
|
-
}
|
|
209
|
-
|
|
273
|
+
if (gltfNode.skin !== undefined) {
|
|
274
|
+
node.skin = this.getSkin(gltfNode.skin);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// TODO deprecated - Delete in v4.0?
|
|
278
|
+
// @ts-expect-error node.meshes does not seem to be part of the GLTF standard
|
|
279
|
+
if (gltfNode.meshes !== undefined && gltfNode.meshes.length) {
|
|
280
|
+
// @ts-expect-error
|
|
281
|
+
node.mesh = gltfNode.meshes.reduce(
|
|
210
282
|
(accum, meshIndex) => {
|
|
211
283
|
const mesh = this.getMesh(meshIndex);
|
|
212
284
|
accum.id = mesh.id;
|
|
@@ -216,38 +288,54 @@ class GLTFPostProcessor {
|
|
|
216
288
|
{primitives: []}
|
|
217
289
|
);
|
|
218
290
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
291
|
+
|
|
292
|
+
return node;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
_resolveNodeChildren(node: GLTFNodePostprocessed): GLTFNodePostprocessed {
|
|
296
|
+
if (node.children) {
|
|
297
|
+
// @ts-expect-error node.children are numbers at this stage
|
|
298
|
+
node.children = node.children.map((child) => this.getNode(child));
|
|
224
299
|
}
|
|
225
300
|
return node;
|
|
226
301
|
}
|
|
227
302
|
|
|
228
|
-
_resolveSkin(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
303
|
+
_resolveSkin(gltfSkin: GLTFSkin, index: number): GLTFSkinPostprocessed {
|
|
304
|
+
const inverseBindMatrices =
|
|
305
|
+
typeof gltfSkin.inverseBindMatrices === 'number'
|
|
306
|
+
? this.getAccessor(gltfSkin.inverseBindMatrices)
|
|
307
|
+
: undefined;
|
|
308
|
+
|
|
309
|
+
return {
|
|
310
|
+
...gltfSkin,
|
|
311
|
+
id: gltfSkin.id || `skin-${index}`,
|
|
312
|
+
inverseBindMatrices
|
|
313
|
+
};
|
|
233
314
|
}
|
|
234
315
|
|
|
235
|
-
_resolveMesh(
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
316
|
+
_resolveMesh(gltfMesh: GLTFMesh, index: number): GLTFMeshPostprocessed {
|
|
317
|
+
const mesh: GLTFMeshPostprocessed = {
|
|
318
|
+
...gltfMesh,
|
|
319
|
+
id: gltfMesh.id || `mesh-${index}`,
|
|
320
|
+
primitives: []
|
|
321
|
+
};
|
|
322
|
+
if (gltfMesh.primitives) {
|
|
323
|
+
mesh.primitives = gltfMesh.primitives.map((gltfPrimitive) => {
|
|
324
|
+
const primitive: GLTFMeshPrimitivePostprocessed = {
|
|
325
|
+
...gltfPrimitive,
|
|
326
|
+
attributes: {},
|
|
327
|
+
indices: undefined,
|
|
328
|
+
material: undefined
|
|
329
|
+
};
|
|
330
|
+
const attributes = gltfPrimitive.attributes;
|
|
243
331
|
for (const attribute in attributes) {
|
|
244
332
|
primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);
|
|
245
333
|
}
|
|
246
|
-
if (
|
|
247
|
-
primitive.indices = this.getAccessor(
|
|
334
|
+
if (gltfPrimitive.indices !== undefined) {
|
|
335
|
+
primitive.indices = this.getAccessor(gltfPrimitive.indices);
|
|
248
336
|
}
|
|
249
|
-
if (
|
|
250
|
-
primitive.material = this.getMaterial(
|
|
337
|
+
if (gltfPrimitive.material !== undefined) {
|
|
338
|
+
primitive.material = this.getMaterial(gltfPrimitive.material);
|
|
251
339
|
}
|
|
252
340
|
return primitive;
|
|
253
341
|
});
|
|
@@ -255,23 +343,27 @@ class GLTFPostProcessor {
|
|
|
255
343
|
return mesh;
|
|
256
344
|
}
|
|
257
345
|
|
|
258
|
-
_resolveMaterial(
|
|
259
|
-
//
|
|
260
|
-
material
|
|
346
|
+
_resolveMaterial(gltfMaterial: GLTFMaterial, index: number): GLTFMaterialPostprocessed {
|
|
347
|
+
// @ts-expect-error
|
|
348
|
+
const material: GLTFMaterialPostprocessed = {
|
|
349
|
+
...gltfMaterial,
|
|
350
|
+
// @ts-expect-error
|
|
351
|
+
id: gltfMaterial.id || `material-${index}`
|
|
352
|
+
};
|
|
261
353
|
if (material.normalTexture) {
|
|
262
354
|
material.normalTexture = {...material.normalTexture};
|
|
263
355
|
material.normalTexture.texture = this.getTexture(material.normalTexture.index);
|
|
264
356
|
}
|
|
265
357
|
if (material.occlusionTexture) {
|
|
266
|
-
material.
|
|
358
|
+
material.occlusionTexture = {...material.occlusionTexture};
|
|
267
359
|
material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);
|
|
268
360
|
}
|
|
269
361
|
if (material.emissiveTexture) {
|
|
270
|
-
material.
|
|
362
|
+
material.emissiveTexture = {...material.emissiveTexture};
|
|
271
363
|
material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);
|
|
272
364
|
}
|
|
273
365
|
if (!material.emissiveFactor) {
|
|
274
|
-
material.emissiveFactor = material.
|
|
366
|
+
material.emissiveFactor = material.emissiveTexture ? [1, 1, 1] : [0, 0, 0];
|
|
275
367
|
}
|
|
276
368
|
|
|
277
369
|
if (material.pbrMetallicRoughness) {
|
|
@@ -289,19 +381,28 @@ class GLTFPostProcessor {
|
|
|
289
381
|
return material;
|
|
290
382
|
}
|
|
291
383
|
|
|
292
|
-
_resolveAccessor(
|
|
293
|
-
//
|
|
294
|
-
|
|
295
|
-
|
|
384
|
+
_resolveAccessor(gltfAccessor: GLTFAccessor, index: number): GLTFAccessorPostprocessed {
|
|
385
|
+
// Look up enums
|
|
386
|
+
const bytesPerComponent = getBytesFromComponentType(gltfAccessor.componentType);
|
|
387
|
+
const components = getSizeFromAccessorType(gltfAccessor.type);
|
|
388
|
+
const bytesPerElement = bytesPerComponent * components;
|
|
389
|
+
|
|
390
|
+
const accessor: GLTFAccessorPostprocessed = {
|
|
391
|
+
...gltfAccessor,
|
|
392
|
+
// @ts-expect-error
|
|
393
|
+
id: gltfAccessor.id || `accessor-${index}`,
|
|
394
|
+
bytesPerComponent,
|
|
395
|
+
components,
|
|
396
|
+
bytesPerElement,
|
|
397
|
+
value: undefined!,
|
|
398
|
+
bufferView: undefined!,
|
|
399
|
+
sparse: undefined!
|
|
400
|
+
};
|
|
401
|
+
if (gltfAccessor.bufferView !== undefined) {
|
|
296
402
|
// Draco encoded meshes don't have bufferView
|
|
297
|
-
accessor.bufferView = this.getBufferView(
|
|
403
|
+
accessor.bufferView = this.getBufferView(gltfAccessor.bufferView);
|
|
298
404
|
}
|
|
299
405
|
|
|
300
|
-
// Look up enums
|
|
301
|
-
accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);
|
|
302
|
-
accessor.components = getSizeFromAccessorType(accessor.type);
|
|
303
|
-
accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;
|
|
304
|
-
|
|
305
406
|
// Create TypedArray for the accessor
|
|
306
407
|
// Note: The canonical way to instantiate is to ignore this array and create
|
|
307
408
|
// WebGLBuffer's using the bufferViews.
|
|
@@ -336,7 +437,13 @@ class GLTFPostProcessor {
|
|
|
336
437
|
* @param count
|
|
337
438
|
* @returns
|
|
338
439
|
*/
|
|
339
|
-
_getValueFromInterleavedBuffer(
|
|
440
|
+
_getValueFromInterleavedBuffer(
|
|
441
|
+
buffer,
|
|
442
|
+
byteOffset: number,
|
|
443
|
+
byteStride: number,
|
|
444
|
+
bytesPerElement: number,
|
|
445
|
+
count: number
|
|
446
|
+
): ArrayBufferLike {
|
|
340
447
|
const result = new Uint8Array(count * bytesPerElement);
|
|
341
448
|
for (let i = 0; i < count; i++) {
|
|
342
449
|
const elementOffset = byteOffset + i * byteStride;
|
|
@@ -348,19 +455,27 @@ class GLTFPostProcessor {
|
|
|
348
455
|
return result.buffer;
|
|
349
456
|
}
|
|
350
457
|
|
|
351
|
-
_resolveTexture(
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
458
|
+
_resolveTexture(gltfTexture: GLTFTexture, index: number): GLTFTexturePostprocessed {
|
|
459
|
+
return {
|
|
460
|
+
...gltfTexture,
|
|
461
|
+
// @ts-expect-error id could already be present, glTF standard does not prevent it
|
|
462
|
+
id: gltfTexture.id || `texture-${index}`,
|
|
463
|
+
sampler:
|
|
464
|
+
typeof gltfTexture.sampler === 'number'
|
|
465
|
+
? this.getSampler(gltfTexture.sampler)
|
|
466
|
+
: makeDefaultSampler(),
|
|
467
|
+
source: typeof gltfTexture.source === 'number' ? this.getImage(gltfTexture.source) : undefined
|
|
468
|
+
};
|
|
357
469
|
}
|
|
358
470
|
|
|
359
|
-
_resolveSampler(
|
|
360
|
-
|
|
361
|
-
|
|
471
|
+
_resolveSampler(gltfSampler: GLTFSampler, index: number): GLTFSamplerPostprocessed {
|
|
472
|
+
const sampler: GLTFSamplerPostprocessed = {
|
|
473
|
+
// @ts-expect-error id could already be present, glTF standard does not prevent it
|
|
474
|
+
id: gltfSampler.id || `sampler-${index}`,
|
|
475
|
+
...gltfSampler,
|
|
476
|
+
parameters: {}
|
|
477
|
+
};
|
|
362
478
|
// Map textual parameters to GL parameter values
|
|
363
|
-
sampler.parameters = {};
|
|
364
479
|
for (const key in sampler) {
|
|
365
480
|
const glEnum = this._enumSamplerParameter(key);
|
|
366
481
|
if (glEnum !== undefined) {
|
|
@@ -370,16 +485,19 @@ class GLTFPostProcessor {
|
|
|
370
485
|
return sampler;
|
|
371
486
|
}
|
|
372
487
|
|
|
373
|
-
_enumSamplerParameter(key) {
|
|
488
|
+
_enumSamplerParameter(key: string): number {
|
|
374
489
|
return SAMPLER_PARAMETER_GLTF_TO_GL[key];
|
|
375
490
|
}
|
|
376
491
|
|
|
377
|
-
_resolveImage(
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
492
|
+
_resolveImage(gltfImage: GLTFImage, index: number): GLTFImagePostprocessed {
|
|
493
|
+
const image: GLTFImagePostprocessed = {
|
|
494
|
+
...gltfImage,
|
|
495
|
+
// @ts-expect-error id could already be present, glTF standard does not prevent it
|
|
496
|
+
id: gltfImage.id || `image-${index}`,
|
|
497
|
+
image: null!,
|
|
498
|
+
bufferView:
|
|
499
|
+
gltfImage.bufferView !== undefined ? this.getBufferView(gltfImage.bufferView) : undefined
|
|
500
|
+
};
|
|
383
501
|
|
|
384
502
|
// Check if image has been preloaded by the GLTFLoader
|
|
385
503
|
// If so, link it into the JSON and drop the URI
|
|
@@ -391,30 +509,34 @@ class GLTFPostProcessor {
|
|
|
391
509
|
return image;
|
|
392
510
|
}
|
|
393
511
|
|
|
394
|
-
_resolveBufferView(
|
|
395
|
-
|
|
396
|
-
const bufferIndex = bufferView.buffer;
|
|
397
|
-
const result: BufferViewPostprocessed = {
|
|
398
|
-
id: `bufferView-${index}`,
|
|
399
|
-
...bufferView,
|
|
400
|
-
buffer: this.buffers[bufferIndex]
|
|
401
|
-
};
|
|
402
|
-
|
|
403
|
-
// @ts-expect-error
|
|
512
|
+
_resolveBufferView(gltfBufferView: GLTFBufferView, index: number): GLTFBufferViewPostprocessed {
|
|
513
|
+
const bufferIndex = gltfBufferView.buffer;
|
|
404
514
|
const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;
|
|
405
|
-
//
|
|
515
|
+
// Add offset of buffer, then offset of buffer view
|
|
406
516
|
let byteOffset = this.buffers[bufferIndex].byteOffset || 0;
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
byteOffset += bufferView.byteOffset;
|
|
517
|
+
if (gltfBufferView.byteOffset) {
|
|
518
|
+
byteOffset += gltfBufferView.byteOffset;
|
|
410
519
|
}
|
|
411
520
|
|
|
412
|
-
|
|
413
|
-
|
|
521
|
+
const bufferView: GLTFBufferViewPostprocessed = {
|
|
522
|
+
// // @ts-expect-error id could already be present, glTF standard does not prevent it
|
|
523
|
+
id: `bufferView-${index}`,
|
|
524
|
+
...gltfBufferView,
|
|
525
|
+
// ...this.buffers[bufferIndex],
|
|
526
|
+
buffer: this.buffers[bufferIndex],
|
|
527
|
+
data: new Uint8Array(arrayBuffer, byteOffset, gltfBufferView.byteLength)
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
return bufferView;
|
|
414
531
|
}
|
|
415
532
|
|
|
416
|
-
_resolveCamera(
|
|
417
|
-
camera
|
|
533
|
+
_resolveCamera(gltfCamera: GLTFCamera, index): GLTFCameraPostprocessed {
|
|
534
|
+
const camera: GLTFCameraPostprocessed = {
|
|
535
|
+
...gltfCamera,
|
|
536
|
+
// @ts-expect-error id could already be present, glTF standard does not prevent it
|
|
537
|
+
id: gltfCamera.id || `camera-${index}`
|
|
538
|
+
};
|
|
539
|
+
|
|
418
540
|
// TODO - create 4x4 matrices
|
|
419
541
|
if (camera.perspective) {
|
|
420
542
|
// camera.matrix = createPerspectiveMatrix(camera.perspective);
|
|
@@ -426,6 +548,9 @@ class GLTFPostProcessor {
|
|
|
426
548
|
}
|
|
427
549
|
}
|
|
428
550
|
|
|
429
|
-
export function postProcessGLTF(
|
|
551
|
+
export function postProcessGLTF(
|
|
552
|
+
gltf: GLTFWithBuffers,
|
|
553
|
+
options?: ParseGLTFOptions
|
|
554
|
+
): GLTFPostprocessed {
|
|
430
555
|
return new GLTFPostProcessor().postProcess(gltf, options);
|
|
431
556
|
}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
copyPaddedStringToDataView,
|
|
4
4
|
copyPaddedArrayBufferToDataView
|
|
5
5
|
} from '@loaders.gl/loader-utils';
|
|
6
|
+
// import type {GLB} from '../types/glb-types';
|
|
6
7
|
|
|
7
8
|
const MAGIC_glTF = 0x46546c67; // glTF in ASCII
|
|
8
9
|
const MAGIC_JSON = 0x4e4f534a; // JSON in ASCII
|
|
@@ -10,10 +11,26 @@ const MAGIC_BIN = 0x004e4942; // BIN\0 in ASCII
|
|
|
10
11
|
|
|
11
12
|
const LE = true; // Binary GLTF is little endian.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
export type GLBEncodeOptions = {};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Encode the full GLB buffer with header etc
|
|
18
|
+
*
|
|
19
|
+
* @param glb
|
|
20
|
+
* @param dataView - if `null`, does not encode but just calculates length
|
|
21
|
+
* @param byteOffset
|
|
22
|
+
* @param options
|
|
23
|
+
* @returns
|
|
24
|
+
*
|
|
25
|
+
* @see https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#glb-file-format-specification
|
|
26
|
+
* @todo type GLB argument
|
|
27
|
+
*/
|
|
28
|
+
export function encodeGLBSync(
|
|
29
|
+
glb,
|
|
30
|
+
dataView: DataView | null,
|
|
31
|
+
byteOffset = 0,
|
|
32
|
+
options: GLBEncodeOptions = {}
|
|
33
|
+
) {
|
|
17
34
|
const {magic = MAGIC_glTF, version = 2, json = {}, binary} = glb;
|
|
18
35
|
|
|
19
36
|
const byteOffsetStart = byteOffset;
|
|
@@ -1,15 +1,24 @@
|
|
|
1
|
-
import encodeGLBSync from './encode-glb';
|
|
1
|
+
import {encodeGLBSync} from './encode-glb';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
// Returns an ArrayBuffer that represents the complete GLB image that can be saved to file
|
|
5
|
-
//
|
|
6
|
-
// TODO - Does not support encoding to non-GLB versions of glTF format
|
|
7
|
-
// - Encode as a textual JSON file with binary data in base64 data URLs.
|
|
8
|
-
// - Encode as a JSON with all images (and buffers?) in separate binary files
|
|
9
|
-
//
|
|
10
|
-
// glb-file-format-specification
|
|
11
|
-
// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#
|
|
3
|
+
export type GLTFEncodeOptions = Record<string, any>;
|
|
12
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Encode the full glTF file as a binary GLB file
|
|
7
|
+
* Returns an ArrayBuffer that represents the complete GLB image that can be saved to file
|
|
8
|
+
*
|
|
9
|
+
* @todo - Does not support encoding to non-GLB versions of glTF format. Other formats
|
|
10
|
+
* - Encode as a textual JSON file with binary data in base64 data URLs.
|
|
11
|
+
* - Encode as a JSON with all images (and buffers?) in separate binary files
|
|
12
|
+
*
|
|
13
|
+
* glb-file-format-specification
|
|
14
|
+
* @see https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#
|
|
15
|
+
*
|
|
16
|
+
* @param gltf
|
|
17
|
+
* @param arrayBuffer
|
|
18
|
+
* @param byteOffset
|
|
19
|
+
* @param options
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
13
22
|
export function encodeGLTFSync(gltf, arrayBuffer, byteOffset, options) {
|
|
14
23
|
convertBuffersToBase64(gltf);
|
|
15
24
|
|