@loaders.gl/gltf 4.0.0-alpha.7 → 4.0.0-alpha.9
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/dist.min.js +149 -23
- package/dist/es5/lib/api/gltf-scenegraph.js +6 -3
- package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +193 -15
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
- package/dist/es5/lib/parsers/parse-gltf.js +13 -16
- package/dist/es5/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/es5/lib/types/gltf-json-schema.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/esm/lib/api/gltf-scenegraph.js +6 -3
- package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -1
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +160 -14
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
- package/dist/esm/lib/parsers/parse-gltf.js +2 -6
- package/dist/esm/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/esm/lib/types/gltf-json-schema.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/index.js +4 -4
- package/dist/lib/api/gltf-extensions.js +1 -1
- package/dist/lib/api/gltf-scenegraph.d.ts +2 -1
- package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -1
- package/dist/lib/api/gltf-scenegraph.js +5 -4
- package/dist/lib/encoders/encode-glb.js +1 -1
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts +2 -1
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -1
- package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +193 -18
- package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/lib/parsers/parse-gltf.js +4 -7
- package/dist/lib/types/gltf-json-schema.d.ts +2 -1
- package/dist/lib/types/gltf-json-schema.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/lib/api/gltf-scenegraph.ts +6 -5
- package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +262 -21
- package/src/lib/parsers/parse-gltf.ts +4 -9
- package/src/lib/types/gltf-json-schema.ts +3 -0
package/dist/dist.min.js
CHANGED
|
@@ -827,6 +827,7 @@
|
|
|
827
827
|
"../images/src/index.ts"() {
|
|
828
828
|
init_image_loader();
|
|
829
829
|
init_binary_image_api();
|
|
830
|
+
init_parsed_image_api();
|
|
830
831
|
init_image_format();
|
|
831
832
|
}
|
|
832
833
|
});
|
|
@@ -1560,7 +1561,8 @@
|
|
|
1560
1561
|
constructor(gltf) {
|
|
1561
1562
|
this.gltf = {
|
|
1562
1563
|
json: gltf?.json || makeDefaultGLTFJson(),
|
|
1563
|
-
buffers: gltf?.buffers || []
|
|
1564
|
+
buffers: gltf?.buffers || [],
|
|
1565
|
+
images: gltf?.images || []
|
|
1564
1566
|
};
|
|
1565
1567
|
this.sourceBuffers = [];
|
|
1566
1568
|
this.byteLength = 0;
|
|
@@ -1816,14 +1818,14 @@
|
|
|
1816
1818
|
this.json.images.push(glTFImage);
|
|
1817
1819
|
return this.json.images.length - 1;
|
|
1818
1820
|
}
|
|
1819
|
-
addBufferView(buffer) {
|
|
1821
|
+
addBufferView(buffer, bufferIndex = 0, byteOffset = this.byteLength) {
|
|
1820
1822
|
const byteLength = buffer.byteLength;
|
|
1821
1823
|
assert3(Number.isFinite(byteLength));
|
|
1822
1824
|
this.sourceBuffers = this.sourceBuffers || [];
|
|
1823
1825
|
this.sourceBuffers.push(buffer);
|
|
1824
1826
|
const glTFBufferView = {
|
|
1825
|
-
buffer:
|
|
1826
|
-
byteOffset
|
|
1827
|
+
buffer: bufferIndex,
|
|
1828
|
+
byteOffset,
|
|
1827
1829
|
byteLength
|
|
1828
1830
|
};
|
|
1829
1831
|
this.byteLength += padToNBytes(byteLength, 4);
|
|
@@ -4538,18 +4540,16 @@
|
|
|
4538
4540
|
decode: () => decode8,
|
|
4539
4541
|
name: () => name9
|
|
4540
4542
|
});
|
|
4541
|
-
async function decode8(gltfData) {
|
|
4543
|
+
async function decode8(gltfData, options) {
|
|
4542
4544
|
const scenegraph = new GLTFScenegraph(gltfData);
|
|
4543
|
-
decodeExtFeatureMetadata(scenegraph);
|
|
4545
|
+
decodeExtFeatureMetadata(scenegraph, options);
|
|
4544
4546
|
}
|
|
4545
|
-
function decodeExtFeatureMetadata(scenegraph) {
|
|
4547
|
+
function decodeExtFeatureMetadata(scenegraph, options) {
|
|
4546
4548
|
const extension = scenegraph.getExtension(EXT_FEATURE_METADATA);
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
const
|
|
4550
|
-
|
|
4551
|
-
console.warn('featureTextures is not yet supported in the "EXT_feature_metadata" extension.');
|
|
4552
|
-
}
|
|
4549
|
+
if (!extension)
|
|
4550
|
+
return;
|
|
4551
|
+
const schemaClasses = extension.schema?.classes;
|
|
4552
|
+
const { featureTables } = extension;
|
|
4553
4553
|
if (schemaClasses && featureTables) {
|
|
4554
4554
|
for (const schemaName in schemaClasses) {
|
|
4555
4555
|
const schemaClass = schemaClasses[schemaName];
|
|
@@ -4559,6 +4559,16 @@
|
|
|
4559
4559
|
}
|
|
4560
4560
|
}
|
|
4561
4561
|
}
|
|
4562
|
+
const { featureTextures } = extension;
|
|
4563
|
+
if (schemaClasses && featureTextures && options.gltf?.loadImages) {
|
|
4564
|
+
for (const schemaName in schemaClasses) {
|
|
4565
|
+
const schemaClass = schemaClasses[schemaName];
|
|
4566
|
+
const featureTexture = findFeatureTextureByName(featureTextures, schemaName);
|
|
4567
|
+
if (featureTexture) {
|
|
4568
|
+
handleFeatureTextureProperties(scenegraph, featureTexture, schemaClass);
|
|
4569
|
+
}
|
|
4570
|
+
}
|
|
4571
|
+
}
|
|
4562
4572
|
}
|
|
4563
4573
|
function handleFeatureTableProperties(scenegraph, featureTable, schemaClass) {
|
|
4564
4574
|
for (const propertyName in schemaClass.properties) {
|
|
@@ -4571,19 +4581,128 @@
|
|
|
4571
4581
|
}
|
|
4572
4582
|
}
|
|
4573
4583
|
}
|
|
4584
|
+
function handleFeatureTextureProperties(scenegraph, featureTexture, schemaClass) {
|
|
4585
|
+
const attributeName = featureTexture.class;
|
|
4586
|
+
for (const propertyName in schemaClass.properties) {
|
|
4587
|
+
const featureTextureProperty = featureTexture?.properties?.[propertyName];
|
|
4588
|
+
if (featureTextureProperty) {
|
|
4589
|
+
const data = getPropertyDataFromTexture(scenegraph, featureTextureProperty, attributeName);
|
|
4590
|
+
featureTextureProperty.data = data;
|
|
4591
|
+
}
|
|
4592
|
+
}
|
|
4593
|
+
}
|
|
4574
4594
|
function getPropertyDataFromBinarySource(scenegraph, schemaProperty, numberOfFeatures, featureTableProperty) {
|
|
4575
4595
|
const bufferView = featureTableProperty.bufferView;
|
|
4576
|
-
|
|
4596
|
+
const dataArray = scenegraph.getTypedArrayForBufferView(bufferView);
|
|
4577
4597
|
switch (schemaProperty.type) {
|
|
4578
4598
|
case "STRING": {
|
|
4579
4599
|
const stringOffsetBufferView = featureTableProperty.stringOffsetBufferView;
|
|
4580
4600
|
const offsetsData = scenegraph.getTypedArrayForBufferView(stringOffsetBufferView);
|
|
4581
|
-
|
|
4582
|
-
break;
|
|
4601
|
+
return getStringAttributes(dataArray, offsetsData, numberOfFeatures);
|
|
4583
4602
|
}
|
|
4584
4603
|
default:
|
|
4585
4604
|
}
|
|
4586
|
-
return
|
|
4605
|
+
return dataArray;
|
|
4606
|
+
}
|
|
4607
|
+
function getPropertyDataFromTexture(scenegraph, featureTextureProperty, attributeName) {
|
|
4608
|
+
const json = scenegraph.gltf.json;
|
|
4609
|
+
if (!json.meshes) {
|
|
4610
|
+
return [];
|
|
4611
|
+
}
|
|
4612
|
+
const featureTextureTable = [];
|
|
4613
|
+
for (const mesh of json.meshes) {
|
|
4614
|
+
for (const primitive of mesh.primitives) {
|
|
4615
|
+
processPrimitiveTextures(scenegraph, attributeName, featureTextureProperty, featureTextureTable, primitive);
|
|
4616
|
+
}
|
|
4617
|
+
}
|
|
4618
|
+
return featureTextureTable;
|
|
4619
|
+
}
|
|
4620
|
+
function processPrimitiveTextures(scenegraph, attributeName, featureTextureProperty, featureTextureTable, primitive) {
|
|
4621
|
+
const json = scenegraph.gltf.json;
|
|
4622
|
+
const textureData = [];
|
|
4623
|
+
const texCoordAccessorKey = `TEXCOORD_${featureTextureProperty.texture.texCoord}`;
|
|
4624
|
+
const texCoordAccessorIndex = primitive.attributes[texCoordAccessorKey];
|
|
4625
|
+
const texCoordBufferView = scenegraph.getBufferView(texCoordAccessorIndex);
|
|
4626
|
+
const texCoordArray = scenegraph.getTypedArrayForBufferView(texCoordBufferView);
|
|
4627
|
+
const textureCoordinates = new Float32Array(texCoordArray.buffer, texCoordArray.byteOffset, texCoordArray.length / 4);
|
|
4628
|
+
const textureIndex = featureTextureProperty.texture.index;
|
|
4629
|
+
const texture = json.textures?.[textureIndex];
|
|
4630
|
+
const imageIndex = texture?.source;
|
|
4631
|
+
if (typeof imageIndex !== "undefined") {
|
|
4632
|
+
const image = json.images?.[imageIndex];
|
|
4633
|
+
const mimeType = image?.mimeType;
|
|
4634
|
+
const parsedImage = scenegraph.gltf.images?.[imageIndex];
|
|
4635
|
+
if (parsedImage) {
|
|
4636
|
+
for (let index = 0; index < textureCoordinates.length; index += 2) {
|
|
4637
|
+
const value = getImageValueByCoordinates(parsedImage, mimeType, textureCoordinates, index, featureTextureProperty.channels);
|
|
4638
|
+
textureData.push(value);
|
|
4639
|
+
}
|
|
4640
|
+
}
|
|
4641
|
+
}
|
|
4642
|
+
const featureIndices = [];
|
|
4643
|
+
for (const texelData of textureData) {
|
|
4644
|
+
let index = featureTextureTable.findIndex((item) => item === texelData);
|
|
4645
|
+
if (index === -1) {
|
|
4646
|
+
index = featureTextureTable.push(texelData) - 1;
|
|
4647
|
+
}
|
|
4648
|
+
featureIndices.push(index);
|
|
4649
|
+
}
|
|
4650
|
+
const typedArray = new Uint32Array(featureIndices);
|
|
4651
|
+
const bufferIndex = scenegraph.gltf.buffers.push({
|
|
4652
|
+
arrayBuffer: typedArray.buffer,
|
|
4653
|
+
byteOffset: 0,
|
|
4654
|
+
byteLength: typedArray.byteLength
|
|
4655
|
+
}) - 1;
|
|
4656
|
+
const bufferViewIndex = scenegraph.addBufferView(typedArray, bufferIndex, 0);
|
|
4657
|
+
const accessorIndex = scenegraph.addAccessor(bufferViewIndex, {
|
|
4658
|
+
size: 1,
|
|
4659
|
+
componentType: getComponentTypeFromArray(typedArray),
|
|
4660
|
+
count: typedArray.length
|
|
4661
|
+
});
|
|
4662
|
+
primitive.attributes[attributeName] = accessorIndex;
|
|
4663
|
+
}
|
|
4664
|
+
function getImageValueByCoordinates(parsedImage, mimeType, textureCoordinates, index, channels) {
|
|
4665
|
+
const CHANNELS_MAP = {
|
|
4666
|
+
r: { offset: 0, shift: 0 },
|
|
4667
|
+
g: { offset: 1, shift: 8 },
|
|
4668
|
+
b: { offset: 2, shift: 16 },
|
|
4669
|
+
a: { offset: 3, shift: 24 }
|
|
4670
|
+
};
|
|
4671
|
+
const u = textureCoordinates[index];
|
|
4672
|
+
const v = textureCoordinates[index + 1];
|
|
4673
|
+
let components = 1;
|
|
4674
|
+
if (mimeType && (mimeType.indexOf("image/jpeg") !== -1 || mimeType.indexOf("image/png") !== -1))
|
|
4675
|
+
components = 4;
|
|
4676
|
+
const offset = coordinatesToOffset(u, v, parsedImage, components);
|
|
4677
|
+
let value = 0;
|
|
4678
|
+
for (const c of channels) {
|
|
4679
|
+
const map = CHANNELS_MAP[c];
|
|
4680
|
+
const val = getVal(parsedImage, offset + map.offset);
|
|
4681
|
+
value |= val << map.shift;
|
|
4682
|
+
}
|
|
4683
|
+
return value;
|
|
4684
|
+
}
|
|
4685
|
+
function getVal(parsedImage, offset) {
|
|
4686
|
+
const imageData = getImageData(parsedImage);
|
|
4687
|
+
if (imageData.data.length <= offset) {
|
|
4688
|
+
throw new Error(`${imageData.data.length} <= ${offset}`);
|
|
4689
|
+
}
|
|
4690
|
+
return imageData.data[offset];
|
|
4691
|
+
}
|
|
4692
|
+
function coordinatesToOffset(u, v, parsedImage, componentsCount = 1) {
|
|
4693
|
+
const w = parsedImage.width;
|
|
4694
|
+
const iX = emod(u) * (w - 1);
|
|
4695
|
+
const indX = Math.round(iX);
|
|
4696
|
+
const h = parsedImage.height;
|
|
4697
|
+
const iY = emod(v) * (h - 1);
|
|
4698
|
+
const indY = Math.round(iY);
|
|
4699
|
+
const components = parsedImage.components ? parsedImage.components : componentsCount;
|
|
4700
|
+
const offset = (indY * w + indX) * components;
|
|
4701
|
+
return offset;
|
|
4702
|
+
}
|
|
4703
|
+
function emod(n2) {
|
|
4704
|
+
const a2 = (n2 % 1 + 1) % 1;
|
|
4705
|
+
return a2;
|
|
4587
4706
|
}
|
|
4588
4707
|
function findFeatureTableByName(featureTables, schemaClassName) {
|
|
4589
4708
|
for (const featureTableName in featureTables) {
|
|
@@ -4594,6 +4713,15 @@
|
|
|
4594
4713
|
}
|
|
4595
4714
|
return null;
|
|
4596
4715
|
}
|
|
4716
|
+
function findFeatureTextureByName(featureTextures, schemaClassName) {
|
|
4717
|
+
for (const featureTexturesName in featureTextures) {
|
|
4718
|
+
const featureTable = featureTextures[featureTexturesName];
|
|
4719
|
+
if (featureTable.class === schemaClassName) {
|
|
4720
|
+
return featureTable;
|
|
4721
|
+
}
|
|
4722
|
+
}
|
|
4723
|
+
return null;
|
|
4724
|
+
}
|
|
4597
4725
|
function getStringAttributes(data, offsetsData, stringsCount) {
|
|
4598
4726
|
const stringsArray = [];
|
|
4599
4727
|
const textDecoder = new TextDecoder("utf8");
|
|
@@ -4612,6 +4740,8 @@
|
|
|
4612
4740
|
var init_EXT_feature_metadata = __esm({
|
|
4613
4741
|
"src/lib/extensions/deprecated/EXT_feature_metadata.ts"() {
|
|
4614
4742
|
init_gltf_scenegraph();
|
|
4743
|
+
init_src3();
|
|
4744
|
+
init_gltf_utils();
|
|
4615
4745
|
EXT_FEATURE_METADATA = "EXT_feature_metadata";
|
|
4616
4746
|
name9 = EXT_FEATURE_METADATA;
|
|
4617
4747
|
}
|
|
@@ -4890,17 +5020,13 @@
|
|
|
4890
5020
|
parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);
|
|
4891
5021
|
normalizeGLTFV1(gltf, { normalize: options?.gltf?.normalize });
|
|
4892
5022
|
preprocessExtensions(gltf, options, context);
|
|
4893
|
-
const promises = [];
|
|
4894
5023
|
if (options?.gltf?.loadBuffers && gltf.json.buffers) {
|
|
4895
5024
|
await loadBuffers(gltf, options, context);
|
|
4896
5025
|
}
|
|
4897
5026
|
if (options?.gltf?.loadImages) {
|
|
4898
|
-
|
|
4899
|
-
promises.push(promise2);
|
|
5027
|
+
await loadImages(gltf, options, context);
|
|
4900
5028
|
}
|
|
4901
|
-
|
|
4902
|
-
promises.push(promise);
|
|
4903
|
-
await Promise.all(promises);
|
|
5029
|
+
await decodeExtensions(gltf, options, context);
|
|
4904
5030
|
return gltf;
|
|
4905
5031
|
}
|
|
4906
5032
|
function parseGLTFContainerSync(gltf, data, byteOffset, options) {
|
|
@@ -36,7 +36,8 @@ var GLTFScenegraph = function () {
|
|
|
36
36
|
(0, _defineProperty2.default)(this, "byteLength", void 0);
|
|
37
37
|
this.gltf = {
|
|
38
38
|
json: (gltf === null || gltf === void 0 ? void 0 : gltf.json) || makeDefaultGLTFJson(),
|
|
39
|
-
buffers: (gltf === null || gltf === void 0 ? void 0 : gltf.buffers) || []
|
|
39
|
+
buffers: (gltf === null || gltf === void 0 ? void 0 : gltf.buffers) || [],
|
|
40
|
+
images: (gltf === null || gltf === void 0 ? void 0 : gltf.images) || []
|
|
40
41
|
};
|
|
41
42
|
this.sourceBuffers = [];
|
|
42
43
|
this.byteLength = 0;
|
|
@@ -399,13 +400,15 @@ var GLTFScenegraph = function () {
|
|
|
399
400
|
}, {
|
|
400
401
|
key: "addBufferView",
|
|
401
402
|
value: function addBufferView(buffer) {
|
|
403
|
+
var bufferIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
404
|
+
var byteOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.byteLength;
|
|
402
405
|
var byteLength = buffer.byteLength;
|
|
403
406
|
(0, _assert.assert)(Number.isFinite(byteLength));
|
|
404
407
|
this.sourceBuffers = this.sourceBuffers || [];
|
|
405
408
|
this.sourceBuffers.push(buffer);
|
|
406
409
|
var glTFBufferView = {
|
|
407
|
-
buffer:
|
|
408
|
-
byteOffset:
|
|
410
|
+
buffer: bufferIndex,
|
|
411
|
+
byteOffset: byteOffset,
|
|
409
412
|
byteLength: byteLength
|
|
410
413
|
};
|
|
411
414
|
this.byteLength += (0, _loaderUtils.padToNBytes)(byteLength, 4);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gltf-scenegraph.js","names":["_images","require","_loaderUtils","_assert","_gltfUtils","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","makeDefaultGLTFJson","asset","version","generator","buffers","extensions","extensionsRequired","extensionsUsed","GLTFScenegraph","gltf","_classCallCheck2","default","_defineProperty2","json","sourceBuffers","byteLength","_createClass2","key","get","getApplicationData","data","getExtraData","extras","hasExtension","extensionName","isUsedExtension","getUsedExtensions","find","isRequiredExtension","getRequiredExtensions","getExtension","isExtension","getRequiredExtension","isRequired","getRemovedExtensions","extensionsRemoved","getObjectExtension","object","getScene","index","getObject","getNode","getSkin","getMesh","getMaterial","getAccessor","getTexture","getSampler","getImage","getBufferView","getBuffer","array","_typeof2","Error","concat","getTypedArrayForBufferView","bufferView","bufferIndex","buffer","binChunk","assert","byteOffset","Uint8Array","arrayBuffer","getTypedArrayForAccessor","accessor","_getAccessorArrayType","getAccessorArrayTypeAndLength","ArrayType","getTypedArrayForImageData","image","addApplicationData","addExtraData","addObjectExtension","registerUsedExtension","setObjectExtension","removeObjectExtension","includes","push","addExtension","extensionData","arguments","undefined","addRequiredExtension","registerRequiredExtension","ext","removeExtension","_this$json$extensions","_removeStringFromArray","setDefaultScene","sceneIndex","scene","addScene","nodeIndices","scenes","nodes","addNode","node","meshIndex","matrix","nodeData","mesh","addMesh","attributes","indices","material","_mesh$mode","mode","accessors","_addAttributes","glTFMesh","primitives","indicesAccessor","_addIndices","Number","isFinite","meshes","addPointCloud","accessorIndices","addImage","imageData","mimeTypeOpt","metadata","getBinaryImageMetadata","mimeType","bufferViewIndex","addBufferView","glTFImage","images","glTFBufferView","padToNBytes","bufferViews","addAccessor","glTFAccessor","type","getAccessorTypeFromSize","size","componentType","count","max","min","addBinaryBuffer","sourceBuffer","minMax","_getAccessorMinMax","accessorDefaults","getComponentTypeFromArray","Math","round","assign","addTexture","texture","imageIndex","glTFTexture","source","textures","addMaterial","pbrMaterialInfo","materials","createBinaryChunk","_this$json","_this$json$buffers","totalByteLength","ArrayBuffer","targetArray","dstByteOffset","_iterator","_step","copyToArray","binary","string","found","indexOf","splice","result","attributeKey","attributeData","attrName","_getGltfAttributeName","attributeName","toLowerCase","initValues","subarray","_iterator2","_step2","componentIndex","exports"],"sources":["../../../../src/lib/api/gltf-scenegraph.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView\n} from '../types/gltf-json-schema';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\ntype Extension = {[key: string]: any};\n\nfunction makeDefaultGLTFJson(): GLTF {\n return {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: [],\n extensions: {},\n extensionsRequired: [],\n extensionsUsed: []\n };\n}\n\n/**\n * Class for structured access to GLTF data\n */\nexport class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n // TODO - why is this not GLTFWithBuffers - what happens to images?\n constructor(gltf?: {json: GLTF; buffers?: any[]}) {\n // Declare locally so\n\n this.gltf = {\n json: gltf?.json || makeDefaultGLTFJson(),\n buffers: gltf?.buffers || []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): unknown {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: unknown} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n hasExtension(extensionName: string): boolean {\n const isUsedExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const isRequiredExtension = this.getRequiredExtensions().find((name) => name === extensionName);\n return typeof isUsedExtension === 'string' || typeof isRequiredExtension === 'string';\n }\n\n getExtension<T = Extension>(extensionName: string): T | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? (extensions[extensionName] as T) : null;\n }\n\n getRequiredExtension<T = Extension>(extensionName: string): T | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getRemovedExtensions(): string[] {\n return (this.json.extensionsRemoved || []) as string[];\n }\n\n getObjectExtension<T = Extension>(object: {[key: string]: any}, extensionName: string): T | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && (this.json[array] as {}[])[index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n (this.json.extras as Record<string, unknown>)[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: any, extensionName: string, data: object): void {\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: any, extensionName: string): void {\n const extensions = object?.extensions || {};\n\n if (extensions[extensionName]) {\n this.json.extensionsRemoved = this.json.extensionsRemoved || [];\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n\n delete extensions[extensionName];\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (this.json.extensions?.[extensionName]) {\n this.json.extensionsRemoved = this.json.extensionsRemoved || [];\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix?: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices?: object; material?: number; mode?: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: 0,\n // Write offset from the start of the binary body\n byteOffset: this.byteLength,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gltf-scenegraph.js","names":["_images","require","_loaderUtils","_assert","_gltfUtils","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","makeDefaultGLTFJson","asset","version","generator","buffers","extensions","extensionsRequired","extensionsUsed","GLTFScenegraph","gltf","_classCallCheck2","default","_defineProperty2","json","images","sourceBuffers","byteLength","_createClass2","key","get","getApplicationData","data","getExtraData","extras","hasExtension","extensionName","isUsedExtension","getUsedExtensions","find","isRequiredExtension","getRequiredExtensions","getExtension","isExtension","getRequiredExtension","isRequired","getRemovedExtensions","extensionsRemoved","getObjectExtension","object","getScene","index","getObject","getNode","getSkin","getMesh","getMaterial","getAccessor","getTexture","getSampler","getImage","getBufferView","getBuffer","array","_typeof2","Error","concat","getTypedArrayForBufferView","bufferView","bufferIndex","buffer","binChunk","assert","byteOffset","Uint8Array","arrayBuffer","getTypedArrayForAccessor","accessor","_getAccessorArrayType","getAccessorArrayTypeAndLength","ArrayType","getTypedArrayForImageData","image","addApplicationData","addExtraData","addObjectExtension","registerUsedExtension","setObjectExtension","removeObjectExtension","includes","push","addExtension","extensionData","arguments","undefined","addRequiredExtension","registerRequiredExtension","ext","removeExtension","_this$json$extensions","_removeStringFromArray","setDefaultScene","sceneIndex","scene","addScene","nodeIndices","scenes","nodes","addNode","node","meshIndex","matrix","nodeData","mesh","addMesh","attributes","indices","material","_mesh$mode","mode","accessors","_addAttributes","glTFMesh","primitives","indicesAccessor","_addIndices","Number","isFinite","meshes","addPointCloud","accessorIndices","addImage","imageData","mimeTypeOpt","metadata","getBinaryImageMetadata","mimeType","bufferViewIndex","addBufferView","glTFImage","glTFBufferView","padToNBytes","bufferViews","addAccessor","glTFAccessor","type","getAccessorTypeFromSize","size","componentType","count","max","min","addBinaryBuffer","sourceBuffer","minMax","_getAccessorMinMax","accessorDefaults","getComponentTypeFromArray","Math","round","assign","addTexture","texture","imageIndex","glTFTexture","source","textures","addMaterial","pbrMaterialInfo","materials","createBinaryChunk","_this$json","_this$json$buffers","totalByteLength","ArrayBuffer","targetArray","dstByteOffset","_iterator","_step","copyToArray","binary","string","found","indexOf","splice","result","attributeKey","attributeData","attrName","_getGltfAttributeName","attributeName","toLowerCase","initValues","subarray","_iterator2","_step2","componentIndex","exports"],"sources":["../../../../src/lib/api/gltf-scenegraph.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView\n} from '../types/gltf-json-schema';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\ntype Extension = {[key: string]: any};\n\nfunction makeDefaultGLTFJson(): GLTF {\n return {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: [],\n extensions: {},\n extensionsRequired: [],\n extensionsUsed: []\n };\n}\n\n/**\n * Class for structured access to GLTF data\n */\nexport class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n // TODO - why is this not GLTFWithBuffers - what happens to images?\n constructor(gltf?: {json: GLTF; buffers?: any[]; images?: any[]}) {\n // Declare locally so\n\n this.gltf = {\n json: gltf?.json || makeDefaultGLTFJson(),\n buffers: gltf?.buffers || [],\n images: gltf?.images || []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): unknown {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: unknown} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n hasExtension(extensionName: string): boolean {\n const isUsedExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const isRequiredExtension = this.getRequiredExtensions().find((name) => name === extensionName);\n return typeof isUsedExtension === 'string' || typeof isRequiredExtension === 'string';\n }\n\n getExtension<T = Extension>(extensionName: string): T | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? (extensions[extensionName] as T) : null;\n }\n\n getRequiredExtension<T = Extension>(extensionName: string): T | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getRemovedExtensions(): string[] {\n return (this.json.extensionsRemoved || []) as string[];\n }\n\n getObjectExtension<T = Extension>(object: {[key: string]: any}, extensionName: string): T | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && (this.json[array] as {}[])[index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n (this.json.extras as Record<string, unknown>)[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: any, extensionName: string, data: object): void {\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: any, extensionName: string): void {\n const extensions = object?.extensions || {};\n\n if (extensions[extensionName]) {\n this.json.extensionsRemoved = this.json.extensionsRemoved || [];\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n\n delete extensions[extensionName];\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (this.json.extensions?.[extensionName]) {\n this.json.extensionsRemoved = this.json.extensionsRemoved || [];\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix?: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices?: object; material?: number; mode?: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any, bufferIndex = 0, byteOffset = this.byteLength): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: bufferIndex,\n // Write offset from the start of the binary body\n byteOffset,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n"],"mappings":"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"}
|