@cesium/engine 23.0.0 → 24.0.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 (226) hide show
  1. package/Build/Workers/{chunk-QTOHIXGF.js → chunk-2N4KDHS3.js} +10 -10
  2. package/Build/Workers/{chunk-SQTRWKO2.js → chunk-44EMEGKW.js} +5 -5
  3. package/Build/Workers/{chunk-OHBM4YG4.js → chunk-4TIG36AW.js} +12 -12
  4. package/Build/Workers/{chunk-BNBD2YZK.js → chunk-5A2SW66E.js} +16 -16
  5. package/Build/Workers/{chunk-52K3GJKG.js → chunk-5GXYJQ2K.js} +3 -3
  6. package/Build/Workers/{chunk-NQCAZU7S.js → chunk-63SIWPLS.js} +13 -13
  7. package/Build/Workers/{chunk-UEEGWJJP.js → chunk-6MPGQEHA.js} +2 -2
  8. package/Build/Workers/{chunk-PQVNT5CJ.js → chunk-6RMS4S72.js} +6 -6
  9. package/Build/Workers/{chunk-HYTFXWMY.js → chunk-6WLHJFD3.js} +7 -7
  10. package/Build/Workers/{chunk-DT5SJBKA.js → chunk-72VYSVEW.js} +9 -9
  11. package/Build/Workers/{chunk-JUGY5AZN.js → chunk-7MDYBRYJ.js} +4 -4
  12. package/Build/Workers/{chunk-6SLGTBB2.js → chunk-7O5XJTVE.js} +5 -5
  13. package/Build/Workers/{chunk-4UNQX2MP.js → chunk-7QRFIKWQ.js} +2 -2
  14. package/Build/Workers/{chunk-GN5NEUDT.js → chunk-7TYLCBGK.js} +8 -8
  15. package/Build/Workers/{chunk-SGKTBHFQ.js → chunk-7X322WP2.js} +13 -13
  16. package/Build/Workers/{chunk-T43FXHNC.js → chunk-A47HVBC5.js} +7 -7
  17. package/Build/Workers/{chunk-FSDVXW7M.js → chunk-AF3MU2RL.js} +5 -5
  18. package/Build/Workers/{chunk-3B65YFXC.js → chunk-AJLTU6PF.js} +1 -1
  19. package/Build/Workers/{chunk-OQ3EAJNW.js → chunk-AMIHNSST.js} +2 -2
  20. package/Build/Workers/{chunk-N4AWE7TZ.js → chunk-B6SCUUFP.js} +10 -10
  21. package/Build/Workers/{chunk-OMXN7YF4.js → chunk-BJD6QGXZ.js} +12 -12
  22. package/Build/Workers/{chunk-APDKMX7W.js → chunk-C6P4IG5P.js} +6 -6
  23. package/Build/Workers/{chunk-QA24Q62E.js → chunk-D4EJ2NXG.js} +17 -17
  24. package/Build/Workers/{chunk-HYLEKKO5.js → chunk-DHKPFLSJ.js} +1 -1
  25. package/Build/Workers/{chunk-MQJG522T.js → chunk-DVB56LG7.js} +6 -6
  26. package/Build/Workers/{chunk-Y5AJSEEN.js → chunk-EDXL4W76.js} +2 -2
  27. package/Build/Workers/{chunk-QQX7S5QT.js → chunk-EV3VGO6Y.js} +17 -17
  28. package/Build/Workers/{chunk-IFA7VHHP.js → chunk-GOQBUCXH.js} +10 -10
  29. package/Build/Workers/{chunk-5A7YSAXT.js → chunk-GQUNK2XC.js} +14 -14
  30. package/Build/Workers/{chunk-36LBFITA.js → chunk-HKUES6UG.js} +12 -12
  31. package/Build/Workers/{chunk-OC6X22PG.js → chunk-HRHRYFHS.js} +9 -9
  32. package/Build/Workers/{chunk-L7RDJ4V7.js → chunk-HXJMS2ZI.js} +1 -1
  33. package/Build/Workers/{chunk-NAYRNPEP.js → chunk-ILMFADZA.js} +4 -4
  34. package/Build/Workers/{chunk-AA33B6PU.js → chunk-ISY4EZCA.js} +4 -4
  35. package/Build/Workers/{chunk-7KRN6JPQ.js → chunk-J6AW5YHS.js} +14 -14
  36. package/Build/Workers/{chunk-OQBPOKPZ.js → chunk-JCI63T3K.js} +6 -6
  37. package/Build/Workers/{chunk-2WI4HGJU.js → chunk-KLPGTXS3.js} +6 -6
  38. package/Build/Workers/{chunk-5R7SBUTW.js → chunk-LIB2H534.js} +10 -10
  39. package/Build/Workers/{chunk-IYVDOB5V.js → chunk-LXMCPFFS.js} +4 -4
  40. package/Build/Workers/{chunk-NUYLNQKV.js → chunk-MKM27KGV.js} +2 -2
  41. package/Build/Workers/{chunk-R7M4XNPP.js → chunk-N65BAKSH.js} +8 -8
  42. package/Build/Workers/{chunk-4LGFX2P5.js → chunk-NKT5K3K3.js} +11 -11
  43. package/Build/Workers/{chunk-NNHU33JK.js → chunk-NPF7SSHZ.js} +7 -7
  44. package/Build/Workers/{chunk-LDQWNMEC.js → chunk-PVV64VFW.js} +1 -1
  45. package/Build/Workers/{chunk-WKXDCVBO.js → chunk-Q3C6VQH6.js} +4 -4
  46. package/Build/Workers/{chunk-ARCFIOKA.js → chunk-RQNJD3O4.js} +12 -12
  47. package/Build/Workers/{chunk-G3YT7M7A.js → chunk-UIGVOKKI.js} +1 -1
  48. package/Build/Workers/{chunk-ZIW5FCIW.js → chunk-UQU4RXLT.js} +27 -19
  49. package/Build/Workers/{chunk-MT5M7RLZ.js → chunk-VLDEUTOP.js} +2 -2
  50. package/Build/Workers/{chunk-5JP5FG7U.js → chunk-VMVOUQ5J.js} +7 -7
  51. package/Build/Workers/{chunk-2GL2EUEE.js → chunk-XJRBB253.js} +11 -11
  52. package/Build/Workers/{chunk-ESD4IEOU.js → chunk-XY6HMDGI.js} +5 -5
  53. package/Build/Workers/{chunk-56OHFSLH.js → chunk-Y7HNNPNK.js} +10 -10
  54. package/Build/Workers/{chunk-6FVFM2KB.js → chunk-YAOZMOFL.js} +5 -5
  55. package/Build/Workers/{chunk-AP6XWET5.js → chunk-YJZGW74L.js} +8 -8
  56. package/Build/Workers/{chunk-KPYU6YZG.js → chunk-YQFTYQMZ.js} +1 -1
  57. package/Build/Workers/{chunk-5VKZVPO5.js → chunk-ZBZRTRJB.js} +10 -10
  58. package/Build/Workers/combineGeometry.js +24 -24
  59. package/Build/Workers/createBoxGeometry.js +18 -18
  60. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  61. package/Build/Workers/createCircleGeometry.js +26 -26
  62. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  63. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  64. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  65. package/Build/Workers/createCorridorGeometry.js +29 -29
  66. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  67. package/Build/Workers/createCylinderGeometry.js +20 -20
  68. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  69. package/Build/Workers/createEllipseGeometry.js +26 -26
  70. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  71. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  72. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  73. package/Build/Workers/createFrustumGeometry.js +18 -18
  74. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  75. package/Build/Workers/createGeometry.js +24 -24
  76. package/Build/Workers/createGroundPolylineGeometry.js +22 -22
  77. package/Build/Workers/createPlaneGeometry.js +16 -16
  78. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  79. package/Build/Workers/createPolygonGeometry.js +32 -32
  80. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  81. package/Build/Workers/createPolylineGeometry.js +25 -25
  82. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  83. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  84. package/Build/Workers/createRectangleGeometry.js +27 -27
  85. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  86. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  87. package/Build/Workers/createSphereGeometry.js +19 -19
  88. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  89. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  90. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  91. package/Build/Workers/createVectorTileGeometries.js +24 -24
  92. package/Build/Workers/createVectorTilePoints.js +13 -13
  93. package/Build/Workers/createVectorTilePolygons.js +22 -22
  94. package/Build/Workers/createVectorTilePolylines.js +14 -14
  95. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  96. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  97. package/Build/Workers/createVerticesFromHeightmap.js +22 -22
  98. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  99. package/Build/Workers/createWallGeometry.js +25 -25
  100. package/Build/Workers/createWallOutlineGeometry.js +24 -24
  101. package/Build/Workers/decodeDraco.js +10 -10
  102. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  103. package/Build/Workers/decodeI3S.js +12 -12
  104. package/Build/Workers/gaussianSplatSorter.js +4 -4
  105. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  106. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  107. package/Build/Workers/transcodeKTX2.js +6 -6
  108. package/Build/Workers/transferTypedArrayTest.js +1 -1
  109. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  110. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  111. package/Source/Core/BoundingSphere.js +1 -1
  112. package/Source/Core/Cartesian2.js +7 -5
  113. package/Source/Core/Cartesian3.js +8 -6
  114. package/Source/Core/Cartesian4.js +8 -6
  115. package/Source/Core/Color.js +5 -3
  116. package/Source/Core/DeveloperError.js +2 -1
  117. package/Source/Core/ITwinPlatform.js +1 -0
  118. package/Source/Core/Ion.js +1 -1
  119. package/Source/Core/S2Cell.js +2 -2
  120. package/Source/Core/TerrainMesh.js +10 -1
  121. package/Source/Core/TerrainPicker.js +1 -0
  122. package/Source/Core/WallGeometry.js +1 -1
  123. package/Source/Core/WallOutlineGeometry.js +1 -1
  124. package/Source/Core/assert.js +27 -0
  125. package/Source/Core/globalTypes.js +4 -0
  126. package/Source/DataSources/CzmlDataSource.js +9 -0
  127. package/Source/DataSources/PathGraphics.js +13 -0
  128. package/Source/DataSources/PathVisualizer.js +330 -18
  129. package/Source/DataSources/StaticGeometryColorBatch.js +7 -2
  130. package/Source/DataSources/StaticGeometryPerMaterialBatch.js +7 -2
  131. package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +3 -1
  132. package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +3 -1
  133. package/Source/Renderer/Context.js +1 -1
  134. package/Source/Renderer/RenderState.js +2 -2
  135. package/Source/Renderer/VertexArray.js +80 -0
  136. package/Source/Scene/ArcGisMapService.js +1 -1
  137. package/Source/Scene/BillboardCollection.js +65 -364
  138. package/Source/Scene/BufferPoint.js +148 -0
  139. package/Source/Scene/BufferPointCollection.js +135 -0
  140. package/Source/Scene/BufferPointMaterial.js +95 -0
  141. package/Source/Scene/BufferPolygon.js +516 -0
  142. package/Source/Scene/BufferPolygonCollection.js +368 -0
  143. package/Source/Scene/BufferPolygonMaterial.js +41 -0
  144. package/Source/Scene/BufferPolyline.js +185 -0
  145. package/Source/Scene/BufferPolylineCollection.js +136 -0
  146. package/Source/Scene/BufferPolylineMaterial.js +93 -0
  147. package/Source/Scene/BufferPrimitive.js +347 -0
  148. package/Source/Scene/BufferPrimitiveCollection.js +702 -0
  149. package/Source/Scene/BufferPrimitiveMaterial.js +140 -0
  150. package/Source/Scene/Cesium3DTileContent.js +5 -1
  151. package/Source/Scene/Cesium3DTileContentFactory.js +9 -0
  152. package/Source/Scene/Cesium3DTileStyle.js +22 -0
  153. package/Source/Scene/Cesium3DTileset.js +1 -0
  154. package/Source/Scene/ClippingPolygonCollection.js +270 -101
  155. package/Source/Scene/CubeMapPanorama.js +4 -4
  156. package/Source/Scene/GaussianSplat3DTileContent.js +40 -46
  157. package/Source/Scene/GaussianSplatPrimitive.js +413 -70
  158. package/Source/Scene/GetFeatureInfoFormat.js +3 -3
  159. package/Source/Scene/GltfLoader.js +227 -34
  160. package/Source/Scene/GltfSpzLoader.js +109 -0
  161. package/Source/Scene/ITwinData.js +1 -0
  162. package/Source/Scene/Label.js +32 -0
  163. package/Source/Scene/LabelCollection.js +14 -13
  164. package/Source/Scene/Material.js +2 -0
  165. package/Source/Scene/Megatexture.js +1 -0
  166. package/Source/Scene/MetadataClassProperty.js +24 -10
  167. package/Source/Scene/MetadataComponentType.js +115 -23
  168. package/Source/Scene/Model/CustomShaderPipelineStage.js +3 -1
  169. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +761 -263
  170. package/Source/Scene/Model/MaterialPipelineStage.js +147 -0
  171. package/Source/Scene/Model/MetadataPipelineStage.js +3 -3
  172. package/Source/Scene/Model/ModelDrawCommand.js +6 -0
  173. package/Source/Scene/Model/ModelReader.js +1 -1
  174. package/Source/Scene/Model/ModelUtility.js +3 -1
  175. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +330 -0
  176. package/Source/Scene/ModelComponents.js +1632 -1542
  177. package/Source/Scene/PickedMetadataInfo.js +1 -0
  178. package/Source/Scene/ScreenSpaceCameraController.js +13 -0
  179. package/Source/Scene/SkyBox.js +17 -8
  180. package/Source/Scene/TileBoundingRegion.js +1 -1
  181. package/Source/Scene/TileBoundingS2Cell.js +1 -1
  182. package/Source/Scene/TileBoundingSphere.js +1 -1
  183. package/Source/Scene/TweenCollection.js +7 -0
  184. package/Source/Scene/VectorGltf3DTileContent.js +382 -0
  185. package/Source/Scene/VertexAttributeSemantic.js +14 -0
  186. package/Source/Scene/WebMapServiceImageryProvider.js +2 -2
  187. package/Source/Scene/WebMapTileServiceImageryProvider.js +366 -131
  188. package/Source/Scene/parseStructuralMetadata.js +97 -37
  189. package/Source/Scene/renderBufferPointCollection.js +334 -0
  190. package/Source/Scene/renderBufferPolygonCollection.js +386 -0
  191. package/Source/Scene/renderBufferPolylineCollection.js +529 -0
  192. package/Source/Shaders/BillboardCollectionFS.glsl +2 -77
  193. package/Source/Shaders/BillboardCollectionFS.js +2 -77
  194. package/Source/Shaders/BillboardCollectionVS.glsl +2 -60
  195. package/Source/Shaders/BillboardCollectionVS.js +2 -60
  196. package/Source/Shaders/BufferPointMaterialFS.glsl +27 -0
  197. package/Source/Shaders/BufferPointMaterialFS.js +29 -0
  198. package/Source/Shaders/BufferPointMaterialVS.glsl +48 -0
  199. package/Source/Shaders/BufferPointMaterialVS.js +50 -0
  200. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  201. package/Source/Shaders/BufferPolygonMaterialFS.js +15 -0
  202. package/Source/Shaders/BufferPolygonMaterialVS.glsl +30 -0
  203. package/Source/Shaders/BufferPolygonMaterialVS.js +32 -0
  204. package/Source/Shaders/BufferPolylineMaterialFS.glsl +13 -0
  205. package/Source/Shaders/BufferPolylineMaterialFS.js +15 -0
  206. package/Source/Shaders/BufferPolylineMaterialVS.glsl +49 -0
  207. package/Source/Shaders/BufferPolylineMaterialVS.js +51 -0
  208. package/Source/Shaders/Model/EdgeVisibilityStageFS.glsl +34 -48
  209. package/Source/Shaders/Model/EdgeVisibilityStageFS.js +34 -49
  210. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +98 -0
  211. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +100 -0
  212. package/Source/Shaders/Model/ModelFS.glsl +15 -0
  213. package/Source/Shaders/Model/ModelFS.js +15 -0
  214. package/Source/Shaders/Model/ModelVS.glsl +8 -0
  215. package/Source/Shaders/Model/ModelVS.js +8 -0
  216. package/Source/Shaders/PolygonSignedDistanceFS.glsl +64 -33
  217. package/Source/Shaders/PolygonSignedDistanceFS.js +64 -33
  218. package/Source/Shaders/PrimitiveGaussianSplatVS.glsl +9 -2
  219. package/Source/Shaders/PrimitiveGaussianSplatVS.js +9 -2
  220. package/Source/Shaders/Voxels/VoxelFS.glsl +1 -1
  221. package/Source/Shaders/Voxels/VoxelFS.js +1 -1
  222. package/Source/Workers/decodeDraco.js +3 -0
  223. package/Source/Workers/decodeI3S.js +5 -2
  224. package/index.d.ts +1007 -111
  225. package/index.js +368 -343
  226. package/package.json +2 -2
@@ -52,48 +52,79 @@ void main() {
52
52
  }
53
53
  int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);
54
54
 
55
+ if (regionIndex >= u_extentsLength) {
56
+ return; // done (no polygons in this region)
57
+ }
58
+
55
59
  for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {
56
60
  ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);
57
61
  int positionsLength = positionsLengthAndExtents.x;
58
62
  int polygonExtentsIndex = positionsLengthAndExtents.y;
59
63
  lastPolygonIndex += 1;
60
64
 
65
+ // Read the individual polygon extent (2 pixels: south/west, latRange/lonRange)
66
+ vec2 extentsSouthWest = getPolygonPosition(lastPolygonIndex);
67
+ vec2 extentsRange = getPolygonPosition(lastPolygonIndex + 1);
68
+ vec4 polygonExtent = vec4(extentsSouthWest, extentsRange);
69
+ lastPolygonIndex += 2;
70
+
71
+ if (polygonExtentsIndex < regionIndex) {
72
+ lastPolygonIndex += positionsLength;
73
+ continue; // skip to next (TODO: could optimize further if we knew how many polygons to skip)
74
+ } else if (polygonExtentsIndex > regionIndex) {
75
+ break; // done (we know polygons are sorted by regionIndex)
76
+ }
77
+
61
78
  // Only compute signed distance for the relevant part of the atlas
62
- if (polygonExtentsIndex == regionIndex) {
63
- float clipAmount = czm_infinity;
64
- vec4 extents = getExtents(polygonExtentsIndex);
65
- vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;
66
- vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents);
67
- float s = 1.0;
68
-
69
- // Check each edge for absolute distance
70
- for (int i = 0, j = positionsLength - 1; i < positionsLength; j = i, i++) {
71
- vec2 a = getPolygonPosition(lastPolygonIndex + i);
72
- vec2 b = getPolygonPosition(lastPolygonIndex + j);
73
-
74
- vec2 ab = b - a;
75
- vec2 pa = p - a;
76
- float t = dot(pa, ab) / dot(ab, ab);
77
- t = clamp(t, 0.0, 1.0);
78
-
79
- vec2 pq = pa - t * ab;
80
- float d = length(pq);
81
-
82
- // Inside / outside computation to determine sign
83
- bvec3 cond = bvec3(p.y >= a.y,
84
- p.y < b.y,
85
- ab.x * pa.y > ab.y * pa.x);
86
- if (all(cond) || all(not(cond))) s = -s;
87
- if (abs(d) < abs(clipAmount)) {
88
- clipAmount = d;
89
- }
79
+ float clipAmount = czm_infinity;
80
+ vec4 extents = getExtents(polygonExtentsIndex);
81
+ vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;
82
+ vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents); // current pixel position
83
+
84
+ // Only consider polygons whos boundingbox includes current pixel (with a slight padding)
85
+ float padding = 0.05; // 5% of polygon extents
86
+ float polygonNorth = polygonExtent.x + polygonExtent.z;
87
+ float polygonEast = polygonExtent.y + polygonExtent.w;
88
+ float latPadding = padding * polygonExtent.z; // padding as fraction of latitude range
89
+ float lonPadding = padding * polygonExtent.w; // padding as fraction of longitude range
90
+ if (p.x < polygonExtent.x - latPadding || p.x > polygonNorth + latPadding ||
91
+ p.y < polygonExtent.y - lonPadding || p.y > polygonEast + lonPadding) {
92
+ lastPolygonIndex += positionsLength;
93
+ continue; // skip to next
94
+ }
95
+
96
+ float s = 1.0;
97
+
98
+ // Check each edge for absolute distance.
99
+ // Cache the previous vertex to halve the texture reads per iteration.
100
+ vec2 prev = getPolygonPosition(lastPolygonIndex + positionsLength - 1);
101
+ for (int i = 0; i < positionsLength; i++) {
102
+ vec2 a = getPolygonPosition(lastPolygonIndex + i);
103
+ vec2 b = prev;
104
+ prev = a;
105
+
106
+ vec2 ab = b - a;
107
+ vec2 pa = p - a;
108
+ float t = dot(pa, ab) / dot(ab, ab);
109
+ t = clamp(t, 0.0, 1.0);
110
+
111
+ vec2 pq = pa - t * ab;
112
+ float d = length(pq);
113
+
114
+ // Inside / outside computation to determine sign
115
+ bvec3 cond = bvec3(p.y >= a.y,
116
+ p.y < b.y,
117
+ ab.x * pa.y > ab.y * pa.x);
118
+ if (all(cond) || all(not(cond))) s = -s;
119
+ if (abs(d) < abs(clipAmount)) {
120
+ clipAmount = d;
90
121
  }
122
+ }
91
123
 
92
- // Normalize the range to [0,1]
93
- vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;
94
- // In the case where we've iterated through multiple polygons, take the minimum
95
- out_FragColor = min(out_FragColor, result);
96
- }
124
+ // Normalize the range to [0,1]
125
+ vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;
126
+ // In the case where we've iterated through multiple polygons, take the minimum
127
+ out_FragColor = min(out_FragColor, result);
97
128
 
98
129
  lastPolygonIndex += positionsLength;
99
130
  }
@@ -52,49 +52,80 @@ void main() {\n\
52
52
  dimension = ceil(log2(float(u_extentsLength)));\n\
53
53
  }\n\
54
54
  int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);\n\
55
+ \n\
56
+ if (regionIndex >= u_extentsLength) {\n\
57
+ return; // done (no polygons in this region)\n\
58
+ }\n\
55
59
  \n\
56
60
  for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {\n\
57
61
  ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);\n\
58
62
  int positionsLength = positionsLengthAndExtents.x;\n\
59
63
  int polygonExtentsIndex = positionsLengthAndExtents.y;\n\
60
64
  lastPolygonIndex += 1;\n\
65
+ \n\
66
+ // Read the individual polygon extent (2 pixels: south/west, latRange/lonRange)\n\
67
+ vec2 extentsSouthWest = getPolygonPosition(lastPolygonIndex);\n\
68
+ vec2 extentsRange = getPolygonPosition(lastPolygonIndex + 1);\n\
69
+ vec4 polygonExtent = vec4(extentsSouthWest, extentsRange);\n\
70
+ lastPolygonIndex += 2;\n\
71
+ \n\
72
+ if (polygonExtentsIndex < regionIndex) {\n\
73
+ lastPolygonIndex += positionsLength;\n\
74
+ continue; // skip to next (TODO: could optimize further if we knew how many polygons to skip)\n\
75
+ } else if (polygonExtentsIndex > regionIndex) {\n\
76
+ break; // done (we know polygons are sorted by regionIndex)\n\
77
+ }\n\
61
78
  \n\
62
79
  // Only compute signed distance for the relevant part of the atlas\n\
63
- if (polygonExtentsIndex == regionIndex) {\n\
64
- float clipAmount = czm_infinity;\n\
65
- vec4 extents = getExtents(polygonExtentsIndex);\n\
66
- vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;\n\
67
- vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents);\n\
68
- float s = 1.0;\n\
69
- \n\
70
- // Check each edge for absolute distance\n\
71
- for (int i = 0, j = positionsLength - 1; i < positionsLength; j = i, i++) {\n\
72
- vec2 a = getPolygonPosition(lastPolygonIndex + i);\n\
73
- vec2 b = getPolygonPosition(lastPolygonIndex + j);\n\
74
- \n\
75
- vec2 ab = b - a;\n\
76
- vec2 pa = p - a;\n\
77
- float t = dot(pa, ab) / dot(ab, ab);\n\
78
- t = clamp(t, 0.0, 1.0);\n\
79
- \n\
80
- vec2 pq = pa - t * ab;\n\
81
- float d = length(pq);\n\
82
- \n\
83
- // Inside / outside computation to determine sign\n\
84
- bvec3 cond = bvec3(p.y >= a.y, \n\
85
- p.y < b.y, \n\
86
- ab.x * pa.y > ab.y * pa.x);\n\
87
- if (all(cond) || all(not(cond))) s = -s;\n\
88
- if (abs(d) < abs(clipAmount)) {\n\
89
- clipAmount = d;\n\
90
- }\n\
80
+ float clipAmount = czm_infinity;\n\
81
+ vec4 extents = getExtents(polygonExtentsIndex);\n\
82
+ vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;\n\
83
+ vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents); // current pixel position\n\
84
+ \n\
85
+ // Only consider polygons whos boundingbox includes current pixel (with a slight padding)\n\
86
+ float padding = 0.05; // 5% of polygon extents\n\
87
+ float polygonNorth = polygonExtent.x + polygonExtent.z;\n\
88
+ float polygonEast = polygonExtent.y + polygonExtent.w;\n\
89
+ float latPadding = padding * polygonExtent.z; // padding as fraction of latitude range\n\
90
+ float lonPadding = padding * polygonExtent.w; // padding as fraction of longitude range\n\
91
+ if (p.x < polygonExtent.x - latPadding || p.x > polygonNorth + latPadding ||\n\
92
+ p.y < polygonExtent.y - lonPadding || p.y > polygonEast + lonPadding) {\n\
93
+ lastPolygonIndex += positionsLength;\n\
94
+ continue; // skip to next\n\
95
+ }\n\
96
+ \n\
97
+ float s = 1.0;\n\
98
+ \n\
99
+ // Check each edge for absolute distance.\n\
100
+ // Cache the previous vertex to halve the texture reads per iteration.\n\
101
+ vec2 prev = getPolygonPosition(lastPolygonIndex + positionsLength - 1);\n\
102
+ for (int i = 0; i < positionsLength; i++) {\n\
103
+ vec2 a = getPolygonPosition(lastPolygonIndex + i);\n\
104
+ vec2 b = prev;\n\
105
+ prev = a;\n\
106
+ \n\
107
+ vec2 ab = b - a;\n\
108
+ vec2 pa = p - a;\n\
109
+ float t = dot(pa, ab) / dot(ab, ab);\n\
110
+ t = clamp(t, 0.0, 1.0);\n\
111
+ \n\
112
+ vec2 pq = pa - t * ab;\n\
113
+ float d = length(pq);\n\
114
+ \n\
115
+ // Inside / outside computation to determine sign\n\
116
+ bvec3 cond = bvec3(p.y >= a.y, \n\
117
+ p.y < b.y, \n\
118
+ ab.x * pa.y > ab.y * pa.x);\n\
119
+ if (all(cond) || all(not(cond))) s = -s;\n\
120
+ if (abs(d) < abs(clipAmount)) {\n\
121
+ clipAmount = d;\n\
91
122
  }\n\
123
+ }\n\
92
124
  \n\
93
- // Normalize the range to [0,1]\n\
94
- vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;\n\
95
- // In the case where we've iterated through multiple polygons, take the minimum\n\
96
- out_FragColor = min(out_FragColor, result);\n\
97
- }\n\
125
+ // Normalize the range to [0,1]\n\
126
+ vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;\n\
127
+ // In the case where we've iterated through multiple polygons, take the minimum\n\
128
+ out_FragColor = min(out_FragColor, result);\n\
98
129
  \n\
99
130
  lastPolygonIndex += positionsLength;\n\
100
131
  }\n\
@@ -142,7 +142,14 @@ highp vec4 discardVec = vec4(0.0, 0.0, 2.0, 1.0);
142
142
 
143
143
  void main() {
144
144
  uint texIdx = uint(a_splatIndex);
145
- ivec2 posCoord = ivec2((texIdx & 0x3ffu) << 1, texIdx >> 10);
145
+ // u_splatRowMask and u_splatRowShift encode the row width of the splat
146
+ // attribute texture. The texture width is always maximumTextureSize, which
147
+ // varies by GPU, so these are passed as uniforms rather than constants.
148
+ // rowMask = maximumTextureSize/2 - 1
149
+ // rowShift = log2(maximumTextureSize/2)
150
+ uint rowMask = uint(u_splatRowMask);
151
+ uint rowShift = uint(u_splatRowShift);
152
+ ivec2 posCoord = ivec2(int((texIdx & rowMask) << 1), int(texIdx >> rowShift));
146
153
  vec4 splatPosition = vec4( uintBitsToFloat(uvec4(texelFetch(u_splatAttributeTexture, posCoord, 0))) );
147
154
 
148
155
  vec4 splatViewPos = czm_modelView * vec4(splatPosition.xyz, 1.0);
@@ -155,7 +162,7 @@ void main() {
155
162
  return;
156
163
  }
157
164
 
158
- ivec2 covCoord = ivec2(((texIdx & 0x3ffu) << 1) | 1u, texIdx >> 10);
165
+ ivec2 covCoord = ivec2(int(((texIdx & rowMask) << 1) | 1u), int(texIdx >> rowShift));
159
166
  uvec4 covariance = uvec4(texelFetch(u_splatAttributeTexture, covCoord, 0));
160
167
 
161
168
  gl_Position = clipPosition;
@@ -143,7 +143,14 @@ highp vec4 discardVec = vec4(0.0, 0.0, 2.0, 1.0);\n\
143
143
  \n\
144
144
  void main() {\n\
145
145
  uint texIdx = uint(a_splatIndex);\n\
146
- ivec2 posCoord = ivec2((texIdx & 0x3ffu) << 1, texIdx >> 10);\n\
146
+ // u_splatRowMask and u_splatRowShift encode the row width of the splat\n\
147
+ // attribute texture. The texture width is always maximumTextureSize, which\n\
148
+ // varies by GPU, so these are passed as uniforms rather than constants.\n\
149
+ // rowMask = maximumTextureSize/2 - 1\n\
150
+ // rowShift = log2(maximumTextureSize/2)\n\
151
+ uint rowMask = uint(u_splatRowMask);\n\
152
+ uint rowShift = uint(u_splatRowShift);\n\
153
+ ivec2 posCoord = ivec2(int((texIdx & rowMask) << 1), int(texIdx >> rowShift));\n\
147
154
  vec4 splatPosition = vec4( uintBitsToFloat(uvec4(texelFetch(u_splatAttributeTexture, posCoord, 0))) );\n\
148
155
  \n\
149
156
  vec4 splatViewPos = czm_modelView * vec4(splatPosition.xyz, 1.0);\n\
@@ -156,7 +163,7 @@ void main() {\n\
156
163
  return;\n\
157
164
  }\n\
158
165
  \n\
159
- ivec2 covCoord = ivec2(((texIdx & 0x3ffu) << 1) | 1u, texIdx >> 10);\n\
166
+ ivec2 covCoord = ivec2(int(((texIdx & rowMask) << 1) | 1u), int(texIdx >> rowShift));\n\
160
167
  uvec4 covariance = uvec4(texelFetch(u_splatAttributeTexture, covCoord, 0));\n\
161
168
  \n\
162
169
  gl_Position = clipPosition;\n\
@@ -213,7 +213,7 @@ void main()
213
213
  if (step.w == 0.0) {
214
214
  // Shape is infinitely thin. The ray may have hit the edge of a
215
215
  // foreground voxel. Step ahead slightly to check for more voxels
216
- step.w == 0.00001;
216
+ step.w = 0.001;
217
217
  }
218
218
 
219
219
  // Keep raymarching
@@ -214,7 +214,7 @@ void main()\n\
214
214
  if (step.w == 0.0) {\n\
215
215
  // Shape is infinitely thin. The ray may have hit the edge of a\n\
216
216
  // foreground voxel. Step ahead slightly to check for more voxels\n\
217
- step.w == 0.00001;\n\
217
+ step.w = 0.001;\n\
218
218
  }\n\
219
219
  \n\
220
220
  // Keep raymarching\n\
@@ -1,3 +1,6 @@
1
+ // Draco API uses many capitalized non-constructor methods.
2
+ /* eslint-disable new-cap */
3
+
1
4
  import ComponentDatatype from "../Core/ComponentDatatype.js";
2
5
  import defined from "../Core/defined.js";
3
6
  import IndexDatatype from "../Core/IndexDatatype.js";
@@ -1,3 +1,6 @@
1
+ // Draco API uses many capitalized non-constructor methods.
2
+ /* eslint-disable new-cap */
3
+
1
4
  import createTaskProcessorWorker from "./createTaskProcessorWorker.js";
2
5
  import defined from "../Core/defined.js";
3
6
  import WebMercatorProjection from "../Core/WebMercatorProjection.js";
@@ -808,8 +811,8 @@ function generateGltfBuffer(
808
811
  componentType: 5126,
809
812
  count: meshPositions.length / 3,
810
813
  type: "VEC3",
811
- max: [minX, minY, minZ],
812
- min: [maxX, maxY, maxZ],
814
+ min: [minX, minY, minZ],
815
+ max: [maxX, maxY, maxZ],
813
816
  });
814
817
 
815
818
  // NORMALS