@itwin/core-frontend 3.7.0-dev.5 → 3.7.0-dev.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.
Files changed (177) hide show
  1. package/lib/cjs/ElementLocateManager.js +1 -1
  2. package/lib/cjs/ElementLocateManager.js.map +1 -1
  3. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  4. package/lib/cjs/SpatialViewState.js +2 -0
  5. package/lib/cjs/SpatialViewState.js.map +1 -1
  6. package/lib/cjs/ViewState.d.ts +2 -0
  7. package/lib/cjs/ViewState.d.ts.map +1 -1
  8. package/lib/cjs/ViewState.js.map +1 -1
  9. package/lib/cjs/Viewport.d.ts +2 -0
  10. package/lib/cjs/Viewport.d.ts.map +1 -1
  11. package/lib/cjs/Viewport.js +10 -6
  12. package/lib/cjs/Viewport.js.map +1 -1
  13. package/lib/cjs/core-frontend.d.ts +1 -0
  14. package/lib/cjs/core-frontend.d.ts.map +1 -1
  15. package/lib/cjs/core-frontend.js +1 -0
  16. package/lib/cjs/core-frontend.js.map +1 -1
  17. package/lib/cjs/gltf/GltfModel.d.ts +91 -0
  18. package/lib/cjs/gltf/GltfModel.d.ts.map +1 -0
  19. package/lib/cjs/gltf/GltfModel.js +10 -0
  20. package/lib/cjs/gltf/GltfModel.js.map +1 -0
  21. package/lib/cjs/gltf/GltfParser.d.ts +26 -0
  22. package/lib/cjs/gltf/GltfParser.d.ts.map +1 -0
  23. package/lib/cjs/gltf/GltfParser.js +357 -0
  24. package/lib/cjs/gltf/GltfParser.js.map +1 -0
  25. package/lib/cjs/gltf/GltfSchema.d.ts +557 -0
  26. package/lib/cjs/gltf/GltfSchema.d.ts.map +1 -0
  27. package/lib/cjs/gltf/GltfSchema.js +138 -0
  28. package/lib/cjs/gltf/GltfSchema.js.map +1 -0
  29. package/lib/cjs/render/GraphicBuilder.d.ts +5 -2
  30. package/lib/cjs/render/GraphicBuilder.d.ts.map +1 -1
  31. package/lib/cjs/render/GraphicBuilder.js +12 -3
  32. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  33. package/lib/cjs/render/MockRender.d.ts +4 -4
  34. package/lib/cjs/render/MockRender.js.map +1 -1
  35. package/lib/cjs/render/Pixel.d.ts +13 -4
  36. package/lib/cjs/render/Pixel.d.ts.map +1 -1
  37. package/lib/cjs/render/Pixel.js +20 -13
  38. package/lib/cjs/render/Pixel.js.map +1 -1
  39. package/lib/cjs/render/RenderSystem.d.ts +2 -2
  40. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  41. package/lib/cjs/render/RenderSystem.js.map +1 -1
  42. package/lib/cjs/render/VisibleFeature.js +2 -2
  43. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  44. package/lib/cjs/render/webgl/BatchState.d.ts +3 -2
  45. package/lib/cjs/render/webgl/BatchState.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/BatchState.js +4 -3
  47. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  48. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  49. package/lib/cjs/render/webgl/DrawCommand.js +4 -2
  50. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  51. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +3 -3
  52. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/FeatureOverrides.js +24 -28
  54. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  55. package/lib/cjs/render/webgl/Graphic.d.ts +3 -3
  56. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  57. package/lib/cjs/render/webgl/RenderCommands.js +1 -1
  58. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  59. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  60. package/lib/cjs/render/webgl/SceneCompositor.js +13 -4
  61. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  62. package/lib/cjs/render/webgl/System.d.ts +2 -2
  63. package/lib/cjs/render/webgl/System.js.map +1 -1
  64. package/lib/cjs/render/webgl/VisibleTileFeatures.js +6 -7
  65. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  66. package/lib/cjs/tile/B3dmReader.d.ts +2 -1
  67. package/lib/cjs/tile/B3dmReader.d.ts.map +1 -1
  68. package/lib/cjs/tile/B3dmReader.js +2 -1
  69. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  70. package/lib/cjs/tile/GltfReader.d.ts +13 -420
  71. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  72. package/lib/cjs/tile/GltfReader.js +121 -192
  73. package/lib/cjs/tile/GltfReader.js.map +1 -1
  74. package/lib/cjs/tile/ImdlReader.d.ts +3 -2
  75. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  76. package/lib/cjs/tile/ImdlReader.js +34 -25
  77. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  78. package/lib/cjs/tile/PrimaryTileTree.d.ts +5 -1
  79. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  80. package/lib/cjs/tile/PrimaryTileTree.js +2 -0
  81. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  82. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  83. package/lib/cjs/tile/RealityTileLoader.js +14 -2
  84. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  85. package/lib/cjs/tile/Tile.d.ts +10 -1
  86. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  87. package/lib/cjs/tile/Tile.js +22 -2
  88. package/lib/cjs/tile/Tile.js.map +1 -1
  89. package/lib/esm/ElementLocateManager.js +1 -1
  90. package/lib/esm/ElementLocateManager.js.map +1 -1
  91. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  92. package/lib/esm/SpatialViewState.js +2 -0
  93. package/lib/esm/SpatialViewState.js.map +1 -1
  94. package/lib/esm/ViewState.d.ts +2 -0
  95. package/lib/esm/ViewState.d.ts.map +1 -1
  96. package/lib/esm/ViewState.js.map +1 -1
  97. package/lib/esm/Viewport.d.ts +2 -0
  98. package/lib/esm/Viewport.d.ts.map +1 -1
  99. package/lib/esm/Viewport.js +10 -6
  100. package/lib/esm/Viewport.js.map +1 -1
  101. package/lib/esm/core-frontend.d.ts +1 -0
  102. package/lib/esm/core-frontend.d.ts.map +1 -1
  103. package/lib/esm/core-frontend.js +1 -0
  104. package/lib/esm/core-frontend.js.map +1 -1
  105. package/lib/esm/gltf/GltfModel.d.ts +91 -0
  106. package/lib/esm/gltf/GltfModel.d.ts.map +1 -0
  107. package/lib/esm/gltf/GltfModel.js +9 -0
  108. package/lib/esm/gltf/GltfModel.js.map +1 -0
  109. package/lib/esm/gltf/GltfParser.d.ts +26 -0
  110. package/lib/esm/gltf/GltfParser.d.ts.map +1 -0
  111. package/lib/esm/gltf/GltfParser.js +334 -0
  112. package/lib/esm/gltf/GltfParser.js.map +1 -0
  113. package/lib/esm/gltf/GltfSchema.d.ts +557 -0
  114. package/lib/esm/gltf/GltfSchema.d.ts.map +1 -0
  115. package/lib/esm/gltf/GltfSchema.js +131 -0
  116. package/lib/esm/gltf/GltfSchema.js.map +1 -0
  117. package/lib/esm/render/GraphicBuilder.d.ts +5 -2
  118. package/lib/esm/render/GraphicBuilder.d.ts.map +1 -1
  119. package/lib/esm/render/GraphicBuilder.js +13 -4
  120. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  121. package/lib/esm/render/MockRender.d.ts +4 -4
  122. package/lib/esm/render/MockRender.js.map +1 -1
  123. package/lib/esm/render/Pixel.d.ts +13 -4
  124. package/lib/esm/render/Pixel.d.ts.map +1 -1
  125. package/lib/esm/render/Pixel.js +21 -14
  126. package/lib/esm/render/Pixel.js.map +1 -1
  127. package/lib/esm/render/RenderSystem.d.ts +2 -2
  128. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  129. package/lib/esm/render/RenderSystem.js.map +1 -1
  130. package/lib/esm/render/VisibleFeature.js +2 -2
  131. package/lib/esm/render/VisibleFeature.js.map +1 -1
  132. package/lib/esm/render/webgl/BatchState.d.ts +3 -2
  133. package/lib/esm/render/webgl/BatchState.d.ts.map +1 -1
  134. package/lib/esm/render/webgl/BatchState.js +4 -3
  135. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  136. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  137. package/lib/esm/render/webgl/DrawCommand.js +4 -2
  138. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  139. package/lib/esm/render/webgl/FeatureOverrides.d.ts +3 -3
  140. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  141. package/lib/esm/render/webgl/FeatureOverrides.js +24 -28
  142. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  143. package/lib/esm/render/webgl/Graphic.d.ts +3 -3
  144. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  145. package/lib/esm/render/webgl/RenderCommands.js +1 -1
  146. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  147. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  148. package/lib/esm/render/webgl/SceneCompositor.js +14 -5
  149. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  150. package/lib/esm/render/webgl/System.d.ts +2 -2
  151. package/lib/esm/render/webgl/System.js.map +1 -1
  152. package/lib/esm/render/webgl/VisibleTileFeatures.js +7 -8
  153. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  154. package/lib/esm/tile/B3dmReader.d.ts +2 -1
  155. package/lib/esm/tile/B3dmReader.d.ts.map +1 -1
  156. package/lib/esm/tile/B3dmReader.js +2 -1
  157. package/lib/esm/tile/B3dmReader.js.map +1 -1
  158. package/lib/esm/tile/GltfReader.d.ts +13 -420
  159. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  160. package/lib/esm/tile/GltfReader.js +78 -149
  161. package/lib/esm/tile/GltfReader.js.map +1 -1
  162. package/lib/esm/tile/ImdlReader.d.ts +3 -2
  163. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  164. package/lib/esm/tile/ImdlReader.js +35 -26
  165. package/lib/esm/tile/ImdlReader.js.map +1 -1
  166. package/lib/esm/tile/PrimaryTileTree.d.ts +5 -1
  167. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  168. package/lib/esm/tile/PrimaryTileTree.js +2 -0
  169. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  170. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  171. package/lib/esm/tile/RealityTileLoader.js +14 -2
  172. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  173. package/lib/esm/tile/Tile.d.ts +10 -1
  174. package/lib/esm/tile/Tile.d.ts.map +1 -1
  175. package/lib/esm/tile/Tile.js +22 -2
  176. package/lib/esm/tile/Tile.js.map +1 -1
  177. package/package.json +20 -20
@@ -16,102 +16,7 @@ import { RealityMeshParams } from "../render/RealityMeshParams";
16
16
  import { DisplayParams } from "../render/primitives/DisplayParams";
17
17
  import { Mesh } from "../render/primitives/mesh/MeshPrimitives";
18
18
  import { Triangle } from "../render/primitives/Primitives";
19
- /* eslint-disable no-restricted-syntax */
20
- /** Enumerates the types of [[GltfMeshPrimitive]] topologies. */
21
- var GltfMeshMode;
22
- (function (GltfMeshMode) {
23
- GltfMeshMode[GltfMeshMode["Points"] = 0] = "Points";
24
- GltfMeshMode[GltfMeshMode["Lines"] = 1] = "Lines";
25
- GltfMeshMode[GltfMeshMode["LineStrip"] = 3] = "LineStrip";
26
- GltfMeshMode[GltfMeshMode["Triangles"] = 4] = "Triangles";
27
- /** Not currently supported. */
28
- GltfMeshMode[GltfMeshMode["TriangleStrip"] = 5] = "TriangleStrip";
29
- /** Not currently supported. */
30
- GltfMeshMode[GltfMeshMode["TriangleFan"] = 6] = "TriangleFan";
31
- })(GltfMeshMode || (GltfMeshMode = {}));
32
- /** Enumerates the basic data types supported by accessors, material values, technique uniforms, etc.
33
- * @internal
34
- */
35
- export var GltfDataType;
36
- (function (GltfDataType) {
37
- GltfDataType[GltfDataType["SignedByte"] = 5120] = "SignedByte";
38
- GltfDataType[GltfDataType["UnsignedByte"] = 5121] = "UnsignedByte";
39
- GltfDataType[GltfDataType["SignedShort"] = 5122] = "SignedShort";
40
- GltfDataType[GltfDataType["UnsignedShort"] = 5123] = "UnsignedShort";
41
- GltfDataType[GltfDataType["UInt32"] = 5125] = "UInt32";
42
- GltfDataType[GltfDataType["Float"] = 5126] = "Float";
43
- GltfDataType[GltfDataType["Rgb"] = 6407] = "Rgb";
44
- GltfDataType[GltfDataType["Rgba"] = 6408] = "Rgba";
45
- GltfDataType[GltfDataType["IntVec2"] = 35667] = "IntVec2";
46
- GltfDataType[GltfDataType["IntVec3"] = 35668] = "IntVec3";
47
- GltfDataType[GltfDataType["FloatVec2"] = 35664] = "FloatVec2";
48
- GltfDataType[GltfDataType["FloatVec3"] = 35665] = "FloatVec3";
49
- GltfDataType[GltfDataType["FloatVec4"] = 35666] = "FloatVec4";
50
- GltfDataType[GltfDataType["FloatMat3"] = 35675] = "FloatMat3";
51
- GltfDataType[GltfDataType["FloatMat4"] = 35676] = "FloatMat4";
52
- GltfDataType[GltfDataType["Sampler2d"] = 35678] = "Sampler2d";
53
- })(GltfDataType || (GltfDataType = {}));
54
- /** @internal */
55
- var GltfMagFilter;
56
- (function (GltfMagFilter) {
57
- GltfMagFilter[GltfMagFilter["Nearest"] = 9728] = "Nearest";
58
- GltfMagFilter[GltfMagFilter["Linear"] = 9729] = "Linear";
59
- })(GltfMagFilter || (GltfMagFilter = {}));
60
- /** @internal */
61
- var GltfMinFilter;
62
- (function (GltfMinFilter) {
63
- GltfMinFilter[GltfMinFilter["Nearest"] = 9728] = "Nearest";
64
- GltfMinFilter[GltfMinFilter["Linear"] = 9729] = "Linear";
65
- GltfMinFilter[GltfMinFilter["NearestMipMapNearest"] = 9984] = "NearestMipMapNearest";
66
- GltfMinFilter[GltfMinFilter["LinearMipMapNearest"] = 9985] = "LinearMipMapNearest";
67
- GltfMinFilter[GltfMinFilter["NearestMipMapLinear"] = 9986] = "NearestMipMapLinear";
68
- GltfMinFilter[GltfMinFilter["LinearMipMapLinear"] = 9987] = "LinearMipMapLinear";
69
- })(GltfMinFilter || (GltfMinFilter = {}));
70
- /** Describes how texture coordinates outside of the range [0..1] are handled.
71
- * @internal
72
- */
73
- export var GltfWrapMode;
74
- (function (GltfWrapMode) {
75
- GltfWrapMode[GltfWrapMode["ClampToEdge"] = 33071] = "ClampToEdge";
76
- GltfWrapMode[GltfWrapMode["MirroredRepeat"] = 33648] = "MirroredRepeat";
77
- GltfWrapMode[GltfWrapMode["Repeat"] = 10497] = "Repeat";
78
- })(GltfWrapMode || (GltfWrapMode = {}));
79
- /** Describes the intended target of a [[GltfBufferViewProps]]. */
80
- var GltfBufferTarget;
81
- (function (GltfBufferTarget) {
82
- GltfBufferTarget[GltfBufferTarget["ArrayBuffer"] = 34962] = "ArrayBuffer";
83
- GltfBufferTarget[GltfBufferTarget["ElementArrayBuffer"] = 24963] = "ElementArrayBuffer";
84
- })(GltfBufferTarget || (GltfBufferTarget = {}));
85
- function* dictionaryIterator(dict) {
86
- if (Array.isArray(dict)) {
87
- for (const elem of dict)
88
- yield elem;
89
- }
90
- else {
91
- for (const key of Object.keys(dict)) {
92
- const value = dict[key];
93
- if (undefined !== value)
94
- yield value;
95
- }
96
- }
97
- }
98
- function getNodeMeshIds(node) {
99
- if (undefined !== node.meshes)
100
- return typeof node.meshes === "string" ? [node.meshes] : node.meshes;
101
- else if (undefined !== node.mesh)
102
- return [node.mesh];
103
- return [];
104
- }
105
- /** GL states that can be enabled by a [[GltfTechnique]]. Only those queried by this implementation are enumerated. */
106
- var GltfTechniqueState;
107
- (function (GltfTechniqueState) {
108
- /** Enables alpha blending. */
109
- GltfTechniqueState[GltfTechniqueState["Blend"] = 3042] = "Blend";
110
- })(GltfTechniqueState || (GltfTechniqueState = {}));
111
- function isGltf1Material(material) {
112
- const mat1 = material;
113
- return undefined !== mat1.technique || undefined !== mat1.values;
114
- }
19
+ import { getGltfNodeMeshIds, GltfDataType, gltfDictionaryIterator, GltfMeshMode, GltfTechniqueState, GltfWrapMode, isGltf1Material, traverseGltfNodes, } from "../gltf/GltfSchema";
115
20
  /**
116
21
  * A chunk of binary data exposed as a typed array.
117
22
  * The count member indicates how many elements exist. This may be less than this.buffer.length due to padding added to the
@@ -350,20 +255,6 @@ class TransformStack {
350
255
  this._stack.pop();
351
256
  }
352
257
  }
353
- function* traverseNodes(ids, nodes, traversed) {
354
- for (const id of ids) {
355
- if (traversed.has(id))
356
- throw new Error("Cycle detected while traversing glTF nodes");
357
- const node = nodes[id];
358
- if (!node)
359
- continue;
360
- traversed.add(id);
361
- yield node;
362
- if (node.children)
363
- for (const child of traverseNodes(node.children, nodes, traversed))
364
- yield child;
365
- }
366
- }
367
258
  function compareTextureKeys(lhs, rhs) {
368
259
  const cmp = compareBooleans(lhs.isTransparent, rhs.isTransparent);
369
260
  if (0 !== cmp)
@@ -438,7 +329,7 @@ export class GltfReader {
438
329
  * @throws Error if a node appears more than once during traversal
439
330
  */
440
331
  traverseNodes(nodeIds) {
441
- return traverseNodes(nodeIds, this._nodes, new Set());
332
+ return traverseGltfNodes(nodeIds, this._nodes, new Set());
442
333
  }
443
334
  /** Traverse the nodes specified by their scene, recursing into their child nodes.
444
335
  * @throws Error if a node appears more than once during traversal
@@ -561,7 +452,7 @@ export class GltfReader {
561
452
  let thisBias;
562
453
  if (undefined !== pseudoRtcBias)
563
454
  thisBias = (undefined === thisTransform) ? pseudoRtcBias : thisTransform.matrix.multiplyInverse(pseudoRtcBias);
564
- for (const meshKey of getNodeMeshIds(node)) {
455
+ for (const meshKey of getGltfNodeMeshIds(node)) {
565
456
  const nodeMesh = this._meshes[meshKey];
566
457
  if (nodeMesh === null || nodeMesh === void 0 ? void 0 : nodeMesh.primitives) {
567
458
  const meshes = this.readMeshPrimitives(node, featureTable, thisTransform, thisBias);
@@ -782,7 +673,7 @@ export class GltfReader {
782
673
  }
783
674
  readMeshPrimitives(node, featureTable, thisTransform, thisBias) {
784
675
  const meshes = [];
785
- for (const meshKey of getNodeMeshIds(node)) {
676
+ for (const meshKey of getGltfNodeMeshIds(node)) {
786
677
  const nodeMesh = this._meshes[meshKey];
787
678
  if (nodeMesh === null || nodeMesh === void 0 ? void 0 : nodeMesh.primitives) {
788
679
  for (const primitive of nodeMesh.primitives) {
@@ -839,30 +730,43 @@ export class GltfReader {
839
730
  quantizePositions: true,
840
731
  });
841
732
  const mesh = new GltfMeshData(meshPrimitive);
842
- // We don't have real colormap - just load material color. This will be used if non-Bentley
843
- // tile or fit the color table is uniform. For a non-Bentley, non-Uniform, we'll set the
844
- // uv parameters to pick the colors out of the color map texture.
845
- meshPrimitive.colorMap.insert(displayParams.fillColor.tbgr); // White...
846
- const colorIndices = this.readBufferData16(primitive.attributes, "_COLORINDEX");
847
- if (undefined !== colorIndices && material) {
848
- let texStep;
849
- if (isGltf1Material(material))
850
- texStep = (_b = material.values) === null || _b === void 0 ? void 0 : _b.texStep;
851
- else
852
- texStep = (_e = (_d = (_c = material.extensions) === null || _c === void 0 ? void 0 : _c.KHR_techniques_webgl) === null || _d === void 0 ? void 0 : _d.values) === null || _e === void 0 ? void 0 : _e.u_texStep;
853
- if (texStep) {
854
- const uvParams = [];
855
- for (let i = 0; i < colorIndices.count; i++)
856
- uvParams.push(new Point2d(texStep[1] + texStep[0] * colorIndices.buffer[i], .5));
857
- const paramList = QPoint2dList.fromPoints(uvParams);
858
- mesh.uvs = paramList.toTypedArray();
859
- mesh.uvQParams = paramList.params;
733
+ // ###TODO_GLTF: There can be more than one color attribute; COLOR_0 might not be the one we want.
734
+ if (!this.readColors(mesh, primitive.attributes, "COLOR_0")) {
735
+ // We don't have real colormap - just load material color. This will be used if non-Bentley
736
+ // tile or fit the color table is uniform. For a non-Bentley, non-Uniform, we'll set the
737
+ // uv parameters to pick the colors out of the color map texture.
738
+ meshPrimitive.colorMap.insert(displayParams.fillColor.tbgr); // White...
739
+ // _COLORINDEX is an ancient holdover from glTF 1.0 and Bimium...unlikely to actually encounter it in the wild.
740
+ const colorIndices = this.readBufferData16(primitive.attributes, "_COLORINDEX");
741
+ if (undefined !== colorIndices && material) {
742
+ let texStep;
743
+ if (isGltf1Material(material))
744
+ texStep = (_b = material.values) === null || _b === void 0 ? void 0 : _b.texStep;
745
+ else
746
+ texStep = (_e = (_d = (_c = material.extensions) === null || _c === void 0 ? void 0 : _c.KHR_techniques_webgl) === null || _d === void 0 ? void 0 : _d.values) === null || _e === void 0 ? void 0 : _e.u_texStep;
747
+ if (texStep) {
748
+ const uvParams = [];
749
+ for (let i = 0; i < colorIndices.count; i++)
750
+ uvParams.push(new Point2d(texStep[1] + texStep[0] * colorIndices.buffer[i], .5));
751
+ const paramList = QPoint2dList.fromPoints(uvParams);
752
+ mesh.uvs = paramList.toTypedArray();
753
+ mesh.uvQParams = paramList.params;
754
+ }
860
755
  }
861
756
  }
862
757
  const draco = (_f = primitive.extensions) === null || _f === void 0 ? void 0 : _f.KHR_draco_mesh_compression;
863
758
  if (draco)
864
759
  return this.readDracoMeshPrimitive(mesh.primitive, draco) ? mesh : undefined;
865
760
  this.readBatchTable(mesh.primitive, primitive);
761
+ if (mesh.primitive.features) {
762
+ const features = this.readPrimitiveFeatures(primitive);
763
+ if (features) {
764
+ if (features instanceof Feature)
765
+ mesh.primitive.features.add(features, 1);
766
+ else
767
+ mesh.primitive.features.setIndices(features);
768
+ }
769
+ }
866
770
  if (!this.readVertices(mesh, primitive, pseudoRtcBias))
867
771
  return undefined;
868
772
  switch (primitiveType) {
@@ -1000,6 +904,7 @@ export class GltfReader {
1000
904
  * capacity of 32 bit integers. This is essentially an ad hoc RTC applied at read time.
1001
905
  */
1002
906
  readVertices(mesh, primitive, pseudoRtcBias) {
907
+ var _a;
1003
908
  const view = this.getBufferView(primitive.attributes, "POSITION");
1004
909
  if (undefined === view)
1005
910
  return false;
@@ -1025,14 +930,12 @@ export class GltfReader {
1025
930
  else {
1026
931
  if (GltfDataType.UnsignedShort !== view.type)
1027
932
  return false;
1028
- const extensions = JsonUtils.asObject(view.accessor.extensions);
1029
- const quantized = undefined !== extensions ? JsonUtils.asObject(extensions.WEB3D_quantized_attributes) : undefined;
1030
- if (undefined === quantized)
1031
- return false;
1032
- const rangeMin = JsonUtils.asArray(quantized.decodedMin);
1033
- const rangeMax = JsonUtils.asArray(quantized.decodedMax);
1034
- if (undefined === rangeMin || undefined === rangeMax)
933
+ const quantized = (_a = view.accessor.extensions) === null || _a === void 0 ? void 0 : _a.WEB3D_quantized_attributes;
934
+ const rangeMin = quantized === null || quantized === void 0 ? void 0 : quantized.decodedMin;
935
+ const rangeMax = quantized === null || quantized === void 0 ? void 0 : quantized.decodedMax;
936
+ if (!rangeMin || !rangeMax) // required by spec...
1035
937
  return false;
938
+ // ###TODO apply WEB3D_quantized_attributes.decodeMatrix? Have not encountered in the wild; glTF 1.0 only.
1036
939
  const buffer = view.toBufferData(GltfDataType.UnsignedShort);
1037
940
  if (undefined === buffer || !(buffer.buffer instanceof Uint16Array))
1038
941
  return false;
@@ -1069,6 +972,9 @@ export class GltfReader {
1069
972
  }
1070
973
  readBatchTable(_mesh, _json) {
1071
974
  }
975
+ readPrimitiveFeatures(_primitive) {
976
+ return undefined;
977
+ }
1072
978
  readMeshIndices(mesh, json) {
1073
979
  var _a;
1074
980
  if (undefined !== json.indices) {
@@ -1124,7 +1030,29 @@ export class GltfReader {
1124
1030
  return false;
1125
1031
  }
1126
1032
  }
1033
+ readColors(mesh, attribute, accessorName) {
1034
+ const view = this.getBufferView(attribute, accessorName);
1035
+ if (!view || (GltfDataType.Float !== view.type && GltfDataType.UnsignedByte !== view.type && GltfDataType.SignedByte !== view.type))
1036
+ return false;
1037
+ const data = view.toBufferData(view.type);
1038
+ if (!data)
1039
+ return false;
1040
+ const hasAlpha = "VEC4" === view.accessor.type;
1041
+ const factor = view.type === GltfDataType.Float ? 255 : 1;
1042
+ const rgbt = new Uint8Array(4);
1043
+ const color = new Uint32Array(rgbt.buffer);
1044
+ for (let i = 0; i < data.count; i++) {
1045
+ const index = view.stride * i;
1046
+ rgbt[0] = data.buffer[index] * factor;
1047
+ rgbt[1] = data.buffer[index + 1] * factor;
1048
+ rgbt[2] = data.buffer[index + 2] * factor;
1049
+ rgbt[3] = hasAlpha ? (255 - data.buffer[index + 3] * factor) : 0;
1050
+ mesh.primitive.colors.push(mesh.primitive.colorMap.insert(color[0]));
1051
+ }
1052
+ return true;
1053
+ }
1127
1054
  readUVParams(mesh, json, accessorName) {
1055
+ var _a;
1128
1056
  const view = this.getBufferView(json, accessorName);
1129
1057
  if (view === undefined)
1130
1058
  return false;
@@ -1148,12 +1076,9 @@ export class GltfReader {
1148
1076
  return true;
1149
1077
  }
1150
1078
  case GltfDataType.UnsignedShort: {
1151
- const extensions = JsonUtils.asObject(view.accessor.extensions);
1152
- const quantized = undefined !== extensions ? JsonUtils.asObject(extensions.WEB3D_quantized_attributes) : undefined;
1153
- if (undefined === quantized)
1154
- return false;
1155
- const rangeMin = JsonUtils.asArray(quantized.decodedMin);
1156
- const rangeMax = JsonUtils.asArray(quantized.decodedMax);
1079
+ const quantized = (_a = view.accessor.extensions) === null || _a === void 0 ? void 0 : _a.WEB3D_quantized_attributes;
1080
+ const rangeMin = quantized === null || quantized === void 0 ? void 0 : quantized.decodedMin;
1081
+ const rangeMax = quantized === null || quantized === void 0 ? void 0 : quantized.decodedMax;
1157
1082
  if (undefined === rangeMin || undefined === rangeMax)
1158
1083
  return false;
1159
1084
  const qData = view.toBufferData(GltfDataType.UnsignedShort);
@@ -1214,7 +1139,7 @@ export class GltfReader {
1214
1139
  // If any meshes are draco-compressed, dynamically load the decoder module and then decode the meshes.
1215
1140
  const dracoMeshes = [];
1216
1141
  for (const node of this.traverseScene()) {
1217
- for (const meshId of getNodeMeshIds(node)) {
1142
+ for (const meshId of getGltfNodeMeshIds(node)) {
1218
1143
  const mesh = this._meshes[meshId];
1219
1144
  if (mesh === null || mesh === void 0 ? void 0 : mesh.primitives)
1220
1145
  for (const primitive of mesh.primitives)
@@ -1238,14 +1163,14 @@ export class GltfReader {
1238
1163
  // be required for the scene.
1239
1164
  const promises = [];
1240
1165
  try {
1241
- for (const buffer of dictionaryIterator(this._buffers))
1166
+ for (const buffer of gltfDictionaryIterator(this._buffers))
1242
1167
  if (!buffer.resolvedBuffer)
1243
1168
  promises.push(this.resolveBuffer(buffer));
1244
1169
  await Promise.all(promises);
1245
1170
  if (this._isCanceled)
1246
1171
  return;
1247
1172
  promises.length = 0;
1248
- for (const image of dictionaryIterator(this._images))
1173
+ for (const image of gltfDictionaryIterator(this._images))
1249
1174
  if (!image.resolvedImage)
1250
1175
  promises.push(this.resolveImage(image));
1251
1176
  await Promise.all(promises);
@@ -1268,8 +1193,11 @@ export class GltfReader {
1268
1193
  this._dracoMeshes.set(ext, mesh);
1269
1194
  }
1270
1195
  resolveUrl(uri) {
1196
+ var _a, _b;
1271
1197
  try {
1272
- return new URL(uri, this._baseUrl).toString();
1198
+ const resolved = new URL(uri, this._baseUrl);
1199
+ resolved.search = (_b = (_a = this._baseUrl) === null || _a === void 0 ? void 0 : _a.search) !== null && _b !== void 0 ? _b : "";
1200
+ return resolved.toString();
1273
1201
  }
1274
1202
  catch (_) {
1275
1203
  return undefined;
@@ -1400,7 +1328,8 @@ export class GltfReader {
1400
1328
  * @public
1401
1329
  */
1402
1330
  export async function readGltfGraphics(args) {
1403
- const props = GltfReaderProps.create(args.gltf, true, args.baseUrl); // glTF supports exactly one coordinate system with y axis up.
1331
+ const baseUrl = typeof args.baseUrl === "string" ? new URL(args.baseUrl) : args.baseUrl;
1332
+ const props = GltfReaderProps.create(args.gltf, true, baseUrl); // glTF supports exactly one coordinate system with y axis up.
1404
1333
  const reader = props ? new GltfGraphicsReader(props, args) : undefined;
1405
1334
  if (!reader)
1406
1335
  return undefined;