@loaders.gl/gltf 4.0.0-alpha.5 → 4.0.0-alpha.6
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 +2037 -1013
- 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 +35 -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 +49 -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 +578 -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 +422 -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 +21 -0
- package/dist/es5/lib/encoders/encode-gltf.js.map +1 -0
- package/dist/es5/lib/extensions/EXT_meshopt_compression.js +96 -0
- package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +1 -0
- package/dist/es5/lib/extensions/EXT_texture_webp.js +44 -0
- package/dist/es5/lib/extensions/EXT_texture_webp.js.map +1 -0
- package/dist/es5/lib/extensions/KHR_binary_gltf.js +40 -0
- package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +1 -0
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +246 -0
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
- package/dist/es5/lib/extensions/KHR_texture_basisu.js +37 -0
- package/dist/es5/lib/extensions/KHR_texture_basisu.js.map +1 -0
- package/dist/es5/lib/extensions/KHR_texture_transform.js +229 -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 +62 -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 +287 -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 +7 -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 +441 -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 +341 -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 +42 -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 +110 -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 +181 -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 +54 -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 +156 -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 +3 -2
- package/dist/glb-loader.d.ts.map +1 -1
- package/dist/glb-loader.js +33 -28
- package/dist/glb-writer.d.ts +7 -16
- package/dist/glb-writer.d.ts.map +1 -1
- package/dist/glb-writer.js +34 -26
- package/dist/gltf-loader.d.ts +3 -2
- 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 +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -7
- package/dist/lib/api/gltf-extensions.d.ts +6 -1
- 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 +5 -11
- package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -1
- package/dist/lib/api/gltf-scenegraph.js +563 -512
- 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.js +324 -376
- package/dist/lib/encoders/encode-glb.d.ts +2 -1
- package/dist/lib/encoders/encode-glb.d.ts.map +1 -1
- package/dist/lib/encoders/encode-glb.js +56 -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 +33 -12
- package/dist/lib/extensions/EXT_meshopt_compression.d.ts +0 -3
- package/dist/lib/extensions/EXT_meshopt_compression.d.ts.map +1 -1
- package/dist/lib/extensions/EXT_meshopt_compression.js +39 -50
- package/dist/lib/extensions/EXT_texture_webp.d.ts.map +1 -1
- package/dist/lib/extensions/EXT_texture_webp.js +35 -28
- package/dist/lib/extensions/KHR_binary_gltf.js +39 -23
- package/dist/lib/extensions/KHR_draco_mesh_compression.js +126 -111
- package/dist/lib/extensions/KHR_texture_basisu.d.ts.map +1 -1
- package/dist/lib/extensions/KHR_texture_basisu.js +29 -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 +230 -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 +118 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +57 -44
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +42 -32
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts.map +1 -1
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +76 -62
- package/dist/lib/gltf-utils/get-typed-array.js +39 -14
- 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.js +52 -45
- package/dist/lib/gltf-utils/resolve-url.js +17 -15
- package/dist/lib/parsers/parse-glb.d.ts +1 -1
- package/dist/lib/parsers/parse-glb.d.ts.map +1 -1
- package/dist/lib/parsers/parse-glb.js +120 -107
- package/dist/lib/parsers/parse-gltf.d.ts +2 -2
- package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/lib/parsers/parse-gltf.js +187 -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 +396 -11
- 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 +10 -10
- 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 +8 -5
- 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 +1 -1
- package/src/glb-writer.ts +9 -3
- package/src/gltf-writer.ts +2 -2
- package/src/index.ts +10 -1
- package/src/lib/api/gltf-extensions.ts +13 -2
- package/src/lib/api/gltf-scenegraph.ts +21 -12
- package/src/lib/api/normalize-gltf-v1.ts +2 -1
- package/src/lib/encoders/encode-glb.ts +8 -1
- package/src/lib/encoders/encode-gltf.ts +18 -9
- package/src/lib/extensions/EXT_meshopt_compression.ts +12 -19
- package/src/lib/extensions/EXT_texture_webp.ts +3 -2
- package/src/lib/extensions/KHR_binary_gltf.ts +1 -1
- package/src/lib/extensions/KHR_draco_mesh_compression.ts +1 -1
- package/src/lib/extensions/KHR_texture_basisu.ts +1 -0
- package/src/lib/extensions/KHR_texture_transform.ts +305 -0
- package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +163 -0
- package/src/lib/extensions/deprecated/KHR_materials_unlit.ts +3 -3
- package/src/lib/extensions/deprecated/KHR_techniques_webgl.ts +1 -0
- package/src/lib/gltf-utils/gltf-constants.ts +2 -2
- package/src/lib/parsers/parse-gltf.ts +10 -1
- package/src/lib/types/glb-types.ts +1 -1
- package/src/lib/types/gltf-json-schema.ts +434 -5
- package/src/lib/types/gltf-postprocessed-schema.ts +9 -9
- package/src/lib/types/gltf-types.ts +24 -3
- 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
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import type {GLTF} from '../../types/gltf-types';
|
|
3
|
+
|
|
4
|
+
import GLTFScenegraph from '../../api/gltf-scenegraph';
|
|
5
|
+
import {
|
|
6
|
+
ClassProperty,
|
|
7
|
+
EXT_feature_metadata_class_object,
|
|
8
|
+
EXT_feature_metadata_feature_table,
|
|
9
|
+
FeatureTableProperty,
|
|
10
|
+
GLTF_EXT_feature_metadata
|
|
11
|
+
} from '../../types/gltf-json-schema';
|
|
12
|
+
|
|
13
|
+
/** Extension name */
|
|
14
|
+
const EXT_FEATURE_METADATA = 'EXT_feature_metadata';
|
|
15
|
+
|
|
16
|
+
export const name = EXT_FEATURE_METADATA;
|
|
17
|
+
|
|
18
|
+
export async function decode(gltfData: {json: GLTF}): Promise<void> {
|
|
19
|
+
const scenegraph = new GLTFScenegraph(gltfData);
|
|
20
|
+
decodeExtFeatureMetadata(scenegraph);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Decodes feature metadata from extension
|
|
25
|
+
* @param scenegraph
|
|
26
|
+
*/
|
|
27
|
+
function decodeExtFeatureMetadata(scenegraph: GLTFScenegraph): void {
|
|
28
|
+
const extension: GLTF_EXT_feature_metadata | null = scenegraph.getExtension(EXT_FEATURE_METADATA);
|
|
29
|
+
const schemaClasses = extension?.schema?.classes;
|
|
30
|
+
const featureTables = extension?.featureTables;
|
|
31
|
+
const featureTextures = extension?.featureTextures;
|
|
32
|
+
|
|
33
|
+
if (featureTextures) {
|
|
34
|
+
/*
|
|
35
|
+
* TODO add support for featureTextures
|
|
36
|
+
* Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata#feature-textures
|
|
37
|
+
*/
|
|
38
|
+
// eslint-disable-next-line no-console
|
|
39
|
+
console.warn('featureTextures is not yet supported in the "EXT_feature_metadata" extension.');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (schemaClasses && featureTables) {
|
|
43
|
+
for (const schemaName in schemaClasses) {
|
|
44
|
+
const schemaClass = schemaClasses[schemaName];
|
|
45
|
+
const featureTable = findFeatureTableByName(featureTables, schemaName);
|
|
46
|
+
|
|
47
|
+
if (featureTable) {
|
|
48
|
+
handleFeatureTableProperties(scenegraph, featureTable, schemaClass);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Navigate throw all properies in feature table and gets properties data.
|
|
56
|
+
* @param scenegraph
|
|
57
|
+
* @param featureTable
|
|
58
|
+
* @param schemaClass
|
|
59
|
+
*/
|
|
60
|
+
function handleFeatureTableProperties(
|
|
61
|
+
scenegraph: GLTFScenegraph,
|
|
62
|
+
featureTable: EXT_feature_metadata_feature_table,
|
|
63
|
+
schemaClass: EXT_feature_metadata_class_object
|
|
64
|
+
): void {
|
|
65
|
+
for (const propertyName in schemaClass.properties) {
|
|
66
|
+
const schemaProperty = schemaClass.properties[propertyName];
|
|
67
|
+
const featureTableProperty = featureTable?.properties?.[propertyName];
|
|
68
|
+
const numberOfFeatures = featureTable.count;
|
|
69
|
+
|
|
70
|
+
if (featureTableProperty) {
|
|
71
|
+
const data = getPropertyDataFromBinarySource(
|
|
72
|
+
scenegraph,
|
|
73
|
+
schemaProperty,
|
|
74
|
+
numberOfFeatures,
|
|
75
|
+
featureTableProperty
|
|
76
|
+
);
|
|
77
|
+
featureTableProperty.data = data;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Decode properties from binary sourse based on property type.
|
|
84
|
+
* @param scenegraph
|
|
85
|
+
* @param schemaProperty
|
|
86
|
+
* @param numberOfFeatures
|
|
87
|
+
* @param featureTableProperty
|
|
88
|
+
*/
|
|
89
|
+
function getPropertyDataFromBinarySource(
|
|
90
|
+
scenegraph: GLTFScenegraph,
|
|
91
|
+
schemaProperty: ClassProperty,
|
|
92
|
+
numberOfFeatures: number,
|
|
93
|
+
featureTableProperty: FeatureTableProperty
|
|
94
|
+
): Uint8Array | string[] {
|
|
95
|
+
const bufferView = featureTableProperty.bufferView;
|
|
96
|
+
// TODO think maybe we shouldn't get data only in Uint8Array format.
|
|
97
|
+
let data: Uint8Array | string[] = scenegraph.getTypedArrayForBufferView(bufferView);
|
|
98
|
+
|
|
99
|
+
switch (schemaProperty.type) {
|
|
100
|
+
case 'STRING': {
|
|
101
|
+
// stringOffsetBufferView should be available for string type.
|
|
102
|
+
const stringOffsetBufferView = featureTableProperty.stringOffsetBufferView!;
|
|
103
|
+
const offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);
|
|
104
|
+
data = getStringAttributes(data, offsetsData, numberOfFeatures);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
default:
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return data;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Find the feature table by class name.
|
|
115
|
+
* @param featureTables
|
|
116
|
+
* @param schemaClassName
|
|
117
|
+
*/
|
|
118
|
+
function findFeatureTableByName(
|
|
119
|
+
featureTables: {[key: string]: EXT_feature_metadata_feature_table},
|
|
120
|
+
schemaClassName: string
|
|
121
|
+
): EXT_feature_metadata_feature_table | null {
|
|
122
|
+
for (const featureTableName in featureTables) {
|
|
123
|
+
const featureTable = featureTables[featureTableName];
|
|
124
|
+
|
|
125
|
+
if (featureTable.class === schemaClassName) {
|
|
126
|
+
return featureTable;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Getting string attributes from binary data.
|
|
135
|
+
* Spec - https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata#strings
|
|
136
|
+
* @param data
|
|
137
|
+
* @param offsetsData
|
|
138
|
+
* @param stringsCount
|
|
139
|
+
*/
|
|
140
|
+
function getStringAttributes(
|
|
141
|
+
data: Uint8Array,
|
|
142
|
+
offsetsData: Uint8Array,
|
|
143
|
+
stringsCount: number
|
|
144
|
+
): string[] {
|
|
145
|
+
const stringsArray: string[] = [];
|
|
146
|
+
const textDecoder = new TextDecoder('utf8');
|
|
147
|
+
|
|
148
|
+
let stringOffset = 0;
|
|
149
|
+
const bytesPerStringSize = 4;
|
|
150
|
+
|
|
151
|
+
for (let index = 0; index < stringsCount; index++) {
|
|
152
|
+
// TODO check if it is multiplication on bytesPerStringSize is valid operation?
|
|
153
|
+
const stringByteSize =
|
|
154
|
+
offsetsData[(index + 1) * bytesPerStringSize] - offsetsData[index * bytesPerStringSize];
|
|
155
|
+
const stringData = data.subarray(stringOffset, stringByteSize + stringOffset);
|
|
156
|
+
const stringAttribute = textDecoder.decode(stringData);
|
|
157
|
+
|
|
158
|
+
stringsArray.push(stringAttribute);
|
|
159
|
+
stringOffset += stringByteSize;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return stringsArray;
|
|
163
|
+
}
|
|
@@ -13,9 +13,6 @@ export async function decode(gltfData: {json: GLTF}): Promise<void> {
|
|
|
13
13
|
const gltfScenegraph = new GLTFScenegraph(gltfData);
|
|
14
14
|
const {json} = gltfScenegraph;
|
|
15
15
|
|
|
16
|
-
// Remove the top-level extension
|
|
17
|
-
gltfScenegraph.removeExtension(KHR_MATERIALS_UNLIT);
|
|
18
|
-
|
|
19
16
|
// Any nodes that have the extension, add lights field pointing to light object
|
|
20
17
|
// and remove the extension
|
|
21
18
|
for (const material of json.materials || []) {
|
|
@@ -26,6 +23,9 @@ export async function decode(gltfData: {json: GLTF}): Promise<void> {
|
|
|
26
23
|
}
|
|
27
24
|
gltfScenegraph.removeObjectExtension(material, KHR_MATERIALS_UNLIT);
|
|
28
25
|
}
|
|
26
|
+
|
|
27
|
+
// Remove the top-level extension
|
|
28
|
+
gltfScenegraph.removeExtension(KHR_MATERIALS_UNLIT);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export function encode(gltfData) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const COMPONENTS = {
|
|
1
|
+
export const COMPONENTS = {
|
|
2
2
|
SCALAR: 1,
|
|
3
3
|
VEC2: 2,
|
|
4
4
|
VEC3: 3,
|
|
@@ -8,7 +8,7 @@ const COMPONENTS = {
|
|
|
8
8
|
MAT4: 16
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
const BYTES = {
|
|
11
|
+
export const BYTES = {
|
|
12
12
|
5120: 1, // BYTE
|
|
13
13
|
5121: 1, // UNSIGNED_BYTE
|
|
14
14
|
5122: 2, // SHORT
|
|
@@ -144,6 +144,12 @@ async function loadBuffers(gltf: GLTFWithBuffers, options, context: LoaderContex
|
|
|
144
144
|
};
|
|
145
145
|
|
|
146
146
|
delete buffer.uri;
|
|
147
|
+
} else if (gltf.buffers[i] === null) {
|
|
148
|
+
gltf.buffers[i] = {
|
|
149
|
+
arrayBuffer: new ArrayBuffer(buffer.byteLength),
|
|
150
|
+
byteOffset: 0,
|
|
151
|
+
byteLength: buffer.byteLength
|
|
152
|
+
};
|
|
147
153
|
}
|
|
148
154
|
}
|
|
149
155
|
}
|
|
@@ -195,10 +201,13 @@ async function loadImage(
|
|
|
195
201
|
|
|
196
202
|
let arrayBuffer;
|
|
197
203
|
|
|
198
|
-
if (image.uri) {
|
|
204
|
+
if (image.uri && !image.hasOwnProperty('bufferView')) {
|
|
199
205
|
const uri = resolveUrl(image.uri, options);
|
|
200
206
|
const response = await fetch(uri);
|
|
201
207
|
arrayBuffer = await response.arrayBuffer();
|
|
208
|
+
image.bufferView = {
|
|
209
|
+
data: arrayBuffer
|
|
210
|
+
};
|
|
202
211
|
}
|
|
203
212
|
|
|
204
213
|
if (Number.isFinite(image.bufferView)) {
|