@cesium/engine 9.0.0 → 9.2.0

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 (189) hide show
  1. package/Build/ThirdParty/Workers/pako_deflate.min.js +108 -210
  2. package/Build/ThirdParty/Workers/pako_inflate.min.js +466 -568
  3. package/Build/ThirdParty/Workers/z-worker-pako.js +56 -105
  4. package/Build/Workers/{chunk-VR5RBW52.js → chunk-26NE4LRW.js} +7 -7
  5. package/Build/Workers/{chunk-P2YAAMT2.js → chunk-26XJDV3D.js} +15 -15
  6. package/Build/Workers/{chunk-L4BW3RUA.js → chunk-2TRB253J.js} +7 -7
  7. package/Build/Workers/{chunk-NP2GYYE5.js → chunk-3PV5HQ2R.js} +6 -6
  8. package/Build/Workers/{chunk-BCU2LH5T.js → chunk-3VDHTBY5.js} +10 -10
  9. package/Build/Workers/{chunk-WHUSTDIB.js → chunk-4RG6WOXH.js} +10 -10
  10. package/Build/Workers/{chunk-P4XKB3QZ.js → chunk-5OK5JFDP.js} +5 -5
  11. package/Build/Workers/{chunk-2ZBL3MVO.js → chunk-7HLZRYGD.js} +10 -12
  12. package/Build/Workers/chunk-7PFZ4Z7C.js +961 -0
  13. package/Build/Workers/{chunk-24YTYWNB.js → chunk-A5CSB5ZE.js} +11 -13
  14. package/Build/Workers/{chunk-RMOEYCZW.js → chunk-AROLUUGS.js} +2 -2
  15. package/Build/Workers/{chunk-3NCVAGDA.js → chunk-BBBTT36L.js} +14 -14
  16. package/Build/Workers/{chunk-QKBGRKKG.js → chunk-BNT2SNWU.js} +4 -4
  17. package/Build/Workers/{chunk-LQJ5FFFR.js → chunk-CFBGPZU6.js} +11 -13
  18. package/Build/Workers/{chunk-C6OI26DR.js → chunk-CVCVMOQA.js} +1 -1
  19. package/Build/Workers/{chunk-SS4ESNE3.js → chunk-DIVFF6DK.js} +2 -2
  20. package/Build/Workers/{chunk-PXB7T27O.js → chunk-EJZVBTX4.js} +6 -6
  21. package/Build/Workers/{chunk-TZORKRNK.js → chunk-EODIOQ35.js} +1 -1
  22. package/Build/Workers/{chunk-QCQUZGXI.js → chunk-ETC45PHH.js} +5 -6
  23. package/Build/Workers/{chunk-E6WXPSJS.js → chunk-G7IAO7CW.js} +7 -7
  24. package/Build/Workers/{chunk-X2F6BEPY.js → chunk-GOQEANLM.js} +16 -16
  25. package/Build/Workers/{chunk-7COR472O.js → chunk-GUFV24F4.js} +7197 -5096
  26. package/Build/Workers/{chunk-5TIV3L26.js → chunk-GX2BWBN2.js} +13 -13
  27. package/Build/Workers/{chunk-ADOVHYWO.js → chunk-GX5LMUGZ.js} +469 -6
  28. package/Build/Workers/{chunk-2632RVPI.js → chunk-I6CW7ZE5.js} +7 -7
  29. package/Build/Workers/{chunk-YDVSBWEO.js → chunk-IF2OX6R4.js} +3 -5
  30. package/Build/Workers/{chunk-RSJXEO2A.js → chunk-IXYFH7DV.js} +95 -155
  31. package/Build/Workers/{chunk-ZNVSKMQ2.js → chunk-K5F23SZO.js} +6 -6
  32. package/Build/Workers/{chunk-MWV7IZK4.js → chunk-KTZK2UDR.js} +7 -7
  33. package/Build/Workers/{chunk-HBQPB6IH.js → chunk-LZFFO4KB.js} +12 -12
  34. package/Build/Workers/{chunk-GFA4SMXV.js → chunk-OYP23VAL.js} +11 -11
  35. package/Build/Workers/{chunk-ZYPTP7GS.js → chunk-PHT53MCH.js} +11 -11
  36. package/Build/Workers/{chunk-TJBU6GML.js → chunk-PUQR43HZ.js} +6 -6
  37. package/Build/Workers/{chunk-CO35JNNE.js → chunk-QZIWFSRM.js} +4 -4
  38. package/Build/Workers/{chunk-C3XBUYBO.js → chunk-RDR4KVPA.js} +17 -17
  39. package/Build/Workers/{chunk-YV4H2Y7M.js → chunk-RRUO4QEK.js} +4 -4
  40. package/Build/Workers/{chunk-LAQP3SCC.js → chunk-RTIT7UDN.js} +2 -2
  41. package/Build/Workers/{chunk-Z7FQLK6N.js → chunk-SC3TBKST.js} +4 -4
  42. package/Build/Workers/{chunk-GXUXEOE2.js → chunk-TDIGL45B.js} +1 -1
  43. package/Build/Workers/{chunk-EOXYZ34O.js → chunk-TP4FFUAH.js} +2 -2
  44. package/Build/Workers/{chunk-N4KXMWQU.js → chunk-U2LSTOMA.js} +2 -2
  45. package/Build/Workers/{chunk-6WF3KIF5.js → chunk-U6MTSO6A.js} +47 -84
  46. package/Build/Workers/{chunk-I37B3MZ2.js → chunk-UICVDDCQ.js} +1 -1
  47. package/Build/Workers/{chunk-DPUSFA7S.js → chunk-UKJCFXVV.js} +6 -6
  48. package/Build/Workers/{chunk-EPKE7GE3.js → chunk-UYKG3UFK.js} +5 -5
  49. package/Build/Workers/{chunk-RV7ZOSS6.js → chunk-W4OS542B.js} +13 -13
  50. package/Build/Workers/{chunk-DGDUKCJJ.js → chunk-WHDEZSAL.js} +6 -6
  51. package/Build/Workers/{chunk-NZWNZA6S.js → chunk-WOYQB5HM.js} +5 -5
  52. package/Build/Workers/{chunk-M2AYBTNH.js → chunk-WP3LCUOE.js} +13 -13
  53. package/Build/Workers/{chunk-73FKKY52.js → chunk-YGNQJ4YI.js} +5 -5
  54. package/Build/Workers/{chunk-SE4PXOEA.js → chunk-YGTWKLFY.js} +19 -19
  55. package/Build/Workers/{chunk-5R6VWLMH.js → chunk-ZHJDE6JN.js} +6 -6
  56. package/Build/Workers/combineGeometry.js +22 -24
  57. package/Build/Workers/createBoxGeometry.js +16 -18
  58. package/Build/Workers/createBoxOutlineGeometry.js +14 -16
  59. package/Build/Workers/createCircleGeometry.js +24 -26
  60. package/Build/Workers/createCircleOutlineGeometry.js +17 -19
  61. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -34
  62. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +29 -31
  63. package/Build/Workers/createCorridorGeometry.js +27 -29
  64. package/Build/Workers/createCorridorOutlineGeometry.js +26 -28
  65. package/Build/Workers/createCylinderGeometry.js +18 -20
  66. package/Build/Workers/createCylinderOutlineGeometry.js +16 -18
  67. package/Build/Workers/createEllipseGeometry.js +24 -26
  68. package/Build/Workers/createEllipseOutlineGeometry.js +17 -19
  69. package/Build/Workers/createEllipsoidGeometry.js +17 -19
  70. package/Build/Workers/createEllipsoidOutlineGeometry.js +16 -18
  71. package/Build/Workers/createFrustumGeometry.js +16 -18
  72. package/Build/Workers/createFrustumOutlineGeometry.js +18 -19
  73. package/Build/Workers/createGeometry.js +22 -24
  74. package/Build/Workers/createGroundPolylineGeometry.js +23 -25
  75. package/Build/Workers/createPlaneGeometry.js +14 -16
  76. package/Build/Workers/createPlaneOutlineGeometry.js +13 -15
  77. package/Build/Workers/createPolygonGeometry.js +32 -34
  78. package/Build/Workers/createPolygonOutlineGeometry.js +28 -30
  79. package/Build/Workers/createPolylineGeometry.js +23 -25
  80. package/Build/Workers/createPolylineVolumeGeometry.js +29 -31
  81. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +25 -27
  82. package/Build/Workers/createRectangleGeometry.js +27 -29
  83. package/Build/Workers/createRectangleOutlineGeometry.js +18 -20
  84. package/Build/Workers/createSimplePolylineGeometry.js +21 -23
  85. package/Build/Workers/createSphereGeometry.js +17 -19
  86. package/Build/Workers/createSphereOutlineGeometry.js +16 -18
  87. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  88. package/Build/Workers/createVectorTileClampedPolylines.js +14 -16
  89. package/Build/Workers/createVectorTileGeometries.js +22 -24
  90. package/Build/Workers/createVectorTilePoints.js +12 -12
  91. package/Build/Workers/createVectorTilePolygons.js +20 -22
  92. package/Build/Workers/createVectorTilePolylines.js +14 -16
  93. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -25
  94. package/Build/Workers/createVerticesFromHeightmap.js +23 -25
  95. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -22
  96. package/Build/Workers/createWallGeometry.js +22 -24
  97. package/Build/Workers/createWallOutlineGeometry.js +21 -23
  98. package/Build/Workers/decodeDraco.js +11 -11
  99. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +12 -19
  100. package/Build/Workers/decodeI3S.js +10 -11
  101. package/Build/Workers/transcodeKTX2.js +44 -80
  102. package/Build/Workers/transferTypedArrayTest.js +1 -1
  103. package/Build/Workers/upsampleQuantizedTerrainMesh.js +20 -22
  104. package/Source/Core/Ion.js +1 -1
  105. package/Source/Core/Math.js +0 -5
  106. package/Source/Core/PixelFormat.js +1 -0
  107. package/Source/Core/Rectangle.js +89 -0
  108. package/Source/Core/TaskProcessor.js +19 -3
  109. package/Source/Core/sampleTerrain.js +3 -3
  110. package/Source/DataSources/DataSourceDisplay.js +5 -0
  111. package/Source/Renderer/ShaderBuilder.js +6 -3
  112. package/Source/Scene/ArcGisMapService.js +1 -1
  113. package/Source/Scene/Billboard.js +7 -5
  114. package/Source/Scene/Cesium3DTile.js +65 -0
  115. package/Source/Scene/Cesium3DTileset.js +48 -1
  116. package/Source/Scene/ClippingPolygon.js +212 -0
  117. package/Source/Scene/ClippingPolygonCollection.js +968 -0
  118. package/Source/Scene/Globe.js +14 -0
  119. package/Source/Scene/GlobeSurfaceShaderSet.js +81 -15
  120. package/Source/Scene/GlobeSurfaceTileProvider.js +81 -1
  121. package/Source/Scene/GltfLoader.js +458 -435
  122. package/Source/Scene/GltfLoaderUtil.js +3 -12
  123. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +23 -7
  124. package/Source/Scene/GltfStructuralMetadataLoader.js +11 -9
  125. package/Source/Scene/Label.js +1 -1
  126. package/Source/Scene/Model/AlphaPipelineStage.js +1 -1
  127. package/Source/Scene/Model/GeometryPipelineStage.js +15 -43
  128. package/Source/Scene/Model/ImageBasedLightingPipelineStage.js +7 -0
  129. package/Source/Scene/Model/LightingPipelineStage.js +2 -4
  130. package/Source/Scene/Model/MaterialPipelineStage.js +346 -29
  131. package/Source/Scene/Model/Model.js +91 -3
  132. package/Source/Scene/Model/Model3DTileContent.js +21 -0
  133. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +92 -0
  134. package/Source/Scene/Model/ModelSceneGraph.js +5 -0
  135. package/Source/Scene/Model/ModelUtility.js +3 -0
  136. package/Source/Scene/Model/VerticalExaggerationPipelineStage.js +4 -6
  137. package/Source/Scene/ModelComponents.js +169 -1
  138. package/Source/Scene/PickDepth.js +23 -15
  139. package/Source/Scene/ResourceCache.js +41 -50
  140. package/Source/Scene/ResourceCacheKey.js +41 -53
  141. package/Source/Scene/Terrain.js +2 -2
  142. package/Source/Shaders/Builtin/CzmBuiltins.js +6 -8
  143. package/Source/Shaders/Builtin/Functions/clipPolygons.glsl +37 -0
  144. package/Source/Shaders/Builtin/Functions/clipPolygons.js +39 -0
  145. package/Source/Shaders/Builtin/Functions/maximumComponent.glsl +21 -0
  146. package/Source/Shaders/Builtin/Functions/maximumComponent.js +23 -0
  147. package/Source/Shaders/Builtin/Functions/pbrLighting.glsl +108 -44
  148. package/Source/Shaders/Builtin/Functions/pbrLighting.js +108 -44
  149. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.glsl +14 -0
  150. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.js +15 -0
  151. package/Source/Shaders/Builtin/Structs/modelMaterial.glsl +14 -0
  152. package/Source/Shaders/Builtin/Structs/modelMaterial.js +14 -0
  153. package/Source/Shaders/GlobeFS.glsl +13 -1
  154. package/Source/Shaders/GlobeFS.js +13 -1
  155. package/Source/Shaders/GlobeVS.glsl +32 -0
  156. package/Source/Shaders/GlobeVS.js +32 -0
  157. package/Source/Shaders/Model/GeometryStageVS.glsl +1 -1
  158. package/Source/Shaders/Model/GeometryStageVS.js +1 -1
  159. package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +211 -133
  160. package/Source/Shaders/Model/ImageBasedLightingStageFS.js +212 -133
  161. package/Source/Shaders/Model/LightingStageFS.glsl +113 -48
  162. package/Source/Shaders/Model/LightingStageFS.js +113 -48
  163. package/Source/Shaders/Model/MaterialStageFS.glsl +399 -137
  164. package/Source/Shaders/Model/MaterialStageFS.js +399 -137
  165. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.glsl +6 -0
  166. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.js +8 -0
  167. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.glsl +27 -0
  168. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.js +29 -0
  169. package/Source/Shaders/Model/ModelFS.glsl +6 -0
  170. package/Source/Shaders/Model/ModelFS.js +7 -1
  171. package/Source/Shaders/Model/ModelVS.glsl +4 -0
  172. package/Source/Shaders/Model/ModelVS.js +4 -0
  173. package/Source/Shaders/PolygonSignedDistanceFS.glsl +100 -0
  174. package/Source/Shaders/PolygonSignedDistanceFS.js +101 -0
  175. package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
  176. package/index.d.ts +230 -4
  177. package/index.js +234 -229
  178. package/package.json +1 -1
  179. package/Build/Workers/chunk-2KACWKS4.js +0 -501
  180. package/Build/Workers/chunk-2XPLH3JY.js +0 -2977
  181. package/Build/Workers/chunk-X6XOMPWL.js +0 -73
  182. package/Source/Shaders/Builtin/Functions/defaultPbrMaterial.glsl +0 -16
  183. package/Source/Shaders/Builtin/Functions/defaultPbrMaterial.js +0 -18
  184. package/Source/Shaders/Builtin/Functions/pbrMetallicRoughnessMaterial.glsl +0 -37
  185. package/Source/Shaders/Builtin/Functions/pbrMetallicRoughnessMaterial.js +0 -39
  186. package/Source/Shaders/Builtin/Functions/pbrSpecularGlossinessMaterial.glsl +0 -30
  187. package/Source/Shaders/Builtin/Functions/pbrSpecularGlossinessMaterial.js +0 -32
  188. package/Source/Shaders/Builtin/Structs/pbrParameters.glsl +0 -16
  189. package/Source/Shaders/Builtin/Structs/pbrParameters.js +0 -18
@@ -35,9 +35,7 @@ const GltfLoaderUtil = {};
35
35
  */
36
36
  GltfLoaderUtil.getImageIdFromTexture = function (options) {
37
37
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
38
- const gltf = options.gltf;
39
- const textureId = options.textureId;
40
- const supportedImageFormats = options.supportedImageFormats;
38
+ const { gltf, textureId, supportedImageFormats } = options;
41
39
 
42
40
  //>>includeStart('debug', pragmas.debug);
43
41
  Check.typeOf.object("options.gltf", gltf);
@@ -73,12 +71,7 @@ GltfLoaderUtil.getImageIdFromTexture = function (options) {
73
71
  */
74
72
  GltfLoaderUtil.createSampler = function (options) {
75
73
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
76
- const gltf = options.gltf;
77
- const textureInfo = options.textureInfo;
78
- const compressedTextureNoMipmap = defaultValue(
79
- options.compressedTextureNoMipmap,
80
- false
81
- );
74
+ const { gltf, textureInfo, compressedTextureNoMipmap = false } = options;
82
75
 
83
76
  //>>includeStart('debug', pragmas.debug);
84
77
  Check.typeOf.object("options.gltf", gltf);
@@ -140,9 +133,7 @@ const defaultScale = new Cartesian2(1.0, 1.0);
140
133
  */
141
134
  GltfLoaderUtil.createModelTextureReader = function (options) {
142
135
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
143
- const textureInfo = options.textureInfo;
144
- const channels = options.channels;
145
- const texture = options.texture;
136
+ const { textureInfo, channels, texture } = options;
146
137
 
147
138
  //>>includeStart('debug', pragmas.debug);
148
139
  Check.typeOf.object("options.textureInfo", textureInfo);
@@ -33,10 +33,11 @@ function forEachTextureInMaterial(material, handler) {
33
33
  }
34
34
  }
35
35
 
36
- if (defined(material.extensions)) {
36
+ const { extensions } = material;
37
+ if (defined(extensions)) {
37
38
  // Spec gloss extension
38
39
  const pbrSpecularGlossiness =
39
- material.extensions.KHR_materials_pbrSpecularGlossiness;
40
+ extensions.KHR_materials_pbrSpecularGlossiness;
40
41
  if (defined(pbrSpecularGlossiness)) {
41
42
  if (defined(pbrSpecularGlossiness.diffuseTexture)) {
42
43
  const textureInfo = pbrSpecularGlossiness.diffuseTexture;
@@ -54,13 +55,28 @@ function forEachTextureInMaterial(material, handler) {
54
55
  }
55
56
  }
56
57
 
58
+ // Specular extension
59
+ const specular = extensions.KHR_materials_specular;
60
+ if (defined(specular)) {
61
+ const { specularTexture, specularColorTexture } = specular;
62
+ if (defined(specularTexture)) {
63
+ const value = handler(specularTexture.index, specularTexture);
64
+ if (defined(value)) {
65
+ return value;
66
+ }
67
+ }
68
+ if (defined(specularColorTexture)) {
69
+ const value = handler(specularColorTexture.index, specularColorTexture);
70
+ if (defined(value)) {
71
+ return value;
72
+ }
73
+ }
74
+ }
75
+
57
76
  // Materials common extension (may be present in models converted from glTF 1.0)
58
- const materialsCommon = material.extensions.KHR_materials_common;
77
+ const materialsCommon = extensions.KHR_materials_common;
59
78
  if (defined(materialsCommon) && defined(materialsCommon.values)) {
60
- const diffuse = materialsCommon.values.diffuse;
61
- const ambient = materialsCommon.values.ambient;
62
- const emission = materialsCommon.values.emission;
63
- const specular = materialsCommon.values.specular;
79
+ const { diffuse, ambient, emission, specular } = materialsCommon.values;
64
80
  if (defined(diffuse) && defined(diffuse.index)) {
65
81
  const value = handler(diffuse.index, diffuse);
66
82
  if (defined(value)) {
@@ -34,15 +34,17 @@ import ResourceLoaderState from "./ResourceLoaderState.js";
34
34
  */
35
35
  function GltfStructuralMetadataLoader(options) {
36
36
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
37
- const gltf = options.gltf;
38
- const extension = options.extension;
39
- const extensionLegacy = options.extensionLegacy;
40
- const gltfResource = options.gltfResource;
41
- const baseResource = options.baseResource;
42
- const supportedImageFormats = options.supportedImageFormats;
43
- const frameState = options.frameState;
44
- const cacheKey = options.cacheKey;
45
- const asynchronous = defaultValue(options.asynchronous, true);
37
+ const {
38
+ gltf,
39
+ extension,
40
+ extensionLegacy,
41
+ gltfResource,
42
+ baseResource,
43
+ supportedImageFormats,
44
+ frameState,
45
+ cacheKey,
46
+ asynchronous = true,
47
+ } = options;
46
48
 
47
49
  //>>includeStart('debug', pragmas.debug);
48
50
  Check.typeOf.object("options.gltf", gltf);
@@ -91,7 +91,7 @@ function parseFont(label) {
91
91
  * Initialization options for the Label constructor
92
92
  *
93
93
  * @property {Cartesian3} position The cartesian position of the label.
94
- * @property {string} [id] A user-defined object to return when the label is picked with {@link Scene#pick}.
94
+ * @property {*} [id] A user-defined object to return when the label is picked with {@link Scene#pick}.
95
95
  * @property {boolean} [show=true] Determines if this label will be shown.
96
96
  * @property {string} [text] A string specifying the text of the label.
97
97
  * @property {string} [font='30px sans-serif'] A string specifying the font used to draw this label. Fonts are specified using the same syntax as the CSS 'font' property.
@@ -7,7 +7,7 @@ import Pass from "../../Renderer/Pass.js";
7
7
  /**
8
8
  * A pipeline stage for configuring the alpha options for handling translucency.
9
9
  *
10
- * @namespace MaterialPipelineStage
10
+ * @namespace AlphaPipelineStage
11
11
  *
12
12
  * @private
13
13
  */
@@ -63,8 +63,7 @@ GeometryPipelineStage.process = function (
63
63
  primitive,
64
64
  frameState
65
65
  ) {
66
- const shaderBuilder = renderResources.shaderBuilder;
67
- const model = renderResources.model;
66
+ const { shaderBuilder, model } = renderResources;
68
67
 
69
68
  // These structs are similar, though the fragment shader version has a couple
70
69
  // additional fields.
@@ -125,8 +124,7 @@ GeometryPipelineStage.process = function (
125
124
  );
126
125
 
127
126
  // .pnts point clouds store sRGB color rather than linear color
128
- const modelType = model.type;
129
- if (modelType === ModelType.TILE_PNTS) {
127
+ if (model.type === ModelType.TILE_PNTS) {
130
128
  shaderBuilder.addDefine(
131
129
  "HAS_SRGB_COLOR",
132
130
  undefined,
@@ -246,8 +244,7 @@ function processAttribute(
246
244
  }
247
245
 
248
246
  function addSemanticDefine(shaderBuilder, attribute) {
249
- const semantic = attribute.semantic;
250
- const setIndex = attribute.setIndex;
247
+ const { semantic, setIndex } = attribute;
251
248
  switch (semantic) {
252
249
  case VertexAttributeSemantic.NORMAL:
253
250
  shaderBuilder.addDefine("HAS_NORMALS");
@@ -272,19 +269,11 @@ function addAttributeToRenderResources(
272
269
  attributeIndex,
273
270
  modifyFor2D
274
271
  ) {
275
- const quantization = attribute.quantization;
276
- let type;
277
- let componentDatatype;
278
- if (defined(quantization)) {
279
- type = quantization.type;
280
- componentDatatype = quantization.componentDatatype;
281
- } else {
282
- type = attribute.type;
283
- componentDatatype = attribute.componentDatatype;
284
- }
272
+ const { quantization, semantic, setIndex } = attribute;
273
+ const { type, componentDatatype } = defined(quantization)
274
+ ? quantization
275
+ : attribute;
285
276
 
286
- const semantic = attribute.semantic;
287
- const setIndex = attribute.setIndex;
288
277
  if (
289
278
  semantic === VertexAttributeSemantic.FEATURE_ID &&
290
279
  setIndex >= renderResources.featureIdVertexAttributeSetIndex
@@ -337,18 +326,10 @@ function addMatrixAttributeToRenderResources(
337
326
  attributeIndex,
338
327
  columnCount
339
328
  ) {
340
- const quantization = attribute.quantization;
341
- let type;
342
- let componentDatatype;
343
- if (defined(quantization)) {
344
- type = quantization.type;
345
- componentDatatype = quantization.componentDatatype;
346
- } else {
347
- type = attribute.type;
348
- componentDatatype = attribute.componentDatatype;
349
- }
350
-
351
- const normalized = attribute.normalized;
329
+ const { quantization, normalized } = attribute;
330
+ const { type, componentDatatype } = defined(quantization)
331
+ ? quantization
332
+ : attribute;
352
333
 
353
334
  // componentCount is either 4, 9 or 16
354
335
  const componentCount = AttributeType.getNumberOfComponents(type);
@@ -435,7 +416,7 @@ function addAttributeDeclaration(shaderBuilder, attributeInfo, modifyFor2D) {
435
416
  function updateAttributesStruct(shaderBuilder, attributeInfo, use2D) {
436
417
  const vsStructId = GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_VS;
437
418
  const fsStructId = GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_FS;
438
- const variableName = attributeInfo.variableName;
419
+ const { variableName, glslType } = attributeInfo;
439
420
 
440
421
  if (variableName === "tangentMC") {
441
422
  // The w component of the tangent is only used for computing the bitangent,
@@ -451,16 +432,8 @@ function updateAttributesStruct(shaderBuilder, attributeInfo, use2D) {
451
432
  shaderBuilder.addStructField(vsStructId, "vec3", "normalMC");
452
433
  shaderBuilder.addStructField(fsStructId, "vec3", "normalEC");
453
434
  } else {
454
- shaderBuilder.addStructField(
455
- vsStructId,
456
- attributeInfo.glslType,
457
- variableName
458
- );
459
- shaderBuilder.addStructField(
460
- fsStructId,
461
- attributeInfo.glslType,
462
- variableName
463
- );
435
+ shaderBuilder.addStructField(vsStructId, glslType, variableName);
436
+ shaderBuilder.addStructField(fsStructId, glslType, variableName);
464
437
  }
465
438
 
466
439
  if (variableName === "positionMC" && use2D) {
@@ -501,8 +474,7 @@ function updateInitializeAttributesFunction(
501
474
  }
502
475
 
503
476
  function updateSetDynamicVaryingsFunction(shaderBuilder, attributeInfo) {
504
- const semantic = attributeInfo.attribute.semantic;
505
- const setIndex = attributeInfo.attribute.setIndex;
477
+ const { semantic, setIndex } = attributeInfo.attribute;
506
478
  if (defined(semantic) && !defined(setIndex)) {
507
479
  // positions, normals, and tangents are handled statically in
508
480
  // GeometryStageVS
@@ -8,6 +8,13 @@ const ImageBasedLightingPipelineStage = {
8
8
  name: "ImageBasedLightingPipelineStage", // Helps with debugging
9
9
  };
10
10
 
11
+ /**
12
+ * Add shader code, uniforms, and defines related to image based lighting
13
+ * @param {ModelRenderResources} renderResources
14
+ * @param {Model} model
15
+ * @param {FrameState} frameState
16
+ * @private
17
+ */
11
18
  ImageBasedLightingPipelineStage.process = function (
12
19
  renderResources,
13
20
  model,
@@ -28,9 +28,7 @@ const LightingPipelineStage = {
28
28
  * @private
29
29
  */
30
30
  LightingPipelineStage.process = function (renderResources, primitive) {
31
- const model = renderResources.model;
32
- const lightingOptions = renderResources.lightingOptions;
33
- const shaderBuilder = renderResources.shaderBuilder;
31
+ const { model, lightingOptions, shaderBuilder } = renderResources;
34
32
 
35
33
  if (defined(model.lightColor)) {
36
34
  shaderBuilder.addDefine(
@@ -53,7 +51,7 @@ LightingPipelineStage.process = function (renderResources, primitive) {
53
51
 
54
52
  // The lighting model is always set by the material. However, custom shaders
55
53
  // can override this.
56
- const lightingModel = lightingOptions.lightingModel;
54
+ const { lightingModel } = lightingOptions;
57
55
 
58
56
  if (lightingModel === LightingModel.PBR) {
59
57
  shaderBuilder.addDefine(