@cesium/engine 7.0.0 → 8.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 (172) hide show
  1. package/Build/Workers/{chunk-MY3VNFGQ.js → chunk-23UFSGND.js} +7 -7
  2. package/Build/Workers/{chunk-IQBYFRVW.js → chunk-2A75IWRS.js} +7 -7
  3. package/Build/Workers/{chunk-VRGFV2UO.js → chunk-2FRVPMCS.js} +10 -10
  4. package/Build/Workers/{chunk-46UD5ABS.js → chunk-2FWRMUTY.js} +4 -4
  5. package/Build/Workers/{chunk-DTAIXKTO.js → chunk-2UPKWTMJ.js} +6 -6
  6. package/Build/Workers/{chunk-6VJVYK2V.js → chunk-34FXV7D7.js} +2 -2
  7. package/Build/Workers/{chunk-ODW7WYM4.js → chunk-3VAZEH7M.js} +2 -2
  8. package/Build/Workers/{chunk-U2VCRRQW.js → chunk-4DO5W5XZ.js} +6 -6
  9. package/Build/Workers/{chunk-VK3EJHWI.js → chunk-4H7PY4U5.js} +2 -2
  10. package/Build/Workers/{chunk-RV7ZYPFT.js → chunk-5QULIR53.js} +4 -4
  11. package/Build/Workers/{chunk-JY5YEZFA.js → chunk-7TC63SJW.js} +8 -8
  12. package/Build/Workers/{chunk-JJ4VBOQ3.js → chunk-7ZFGPDJA.js} +4 -4
  13. package/Build/Workers/{chunk-FP6GYBFX.js → chunk-A5DWLWCY.js} +10 -10
  14. package/Build/Workers/{chunk-5M3U6ZMA.js → chunk-BBWDMCVU.js} +1 -1
  15. package/Build/Workers/{chunk-WZU2YLWG.js → chunk-BG4UCVXN.js} +3 -3
  16. package/Build/Workers/{chunk-5WQ523AW.js → chunk-BIKA3NRA.js} +5 -5
  17. package/Build/Workers/{chunk-PTQQUQC3.js → chunk-BROJAZRZ.js} +13 -13
  18. package/Build/Workers/{chunk-YUCVWAY6.js → chunk-DDUQAJ4P.js} +7 -7
  19. package/Build/Workers/{chunk-2HJWSU7B.js → chunk-EERJKOAF.js} +4 -4
  20. package/Build/Workers/{chunk-LZGHD6NY.js → chunk-EG6PTBY2.js} +15 -15
  21. package/Build/Workers/{chunk-IX2JCCNM.js → chunk-EHWHNOEX.js} +1 -1
  22. package/Build/Workers/{chunk-NKPBIX7F.js → chunk-F3YA3Y2Z.js} +1 -1
  23. package/Build/Workers/{chunk-L2ZN645J.js → chunk-F4HFJMGM.js} +6 -6
  24. package/Build/Workers/{chunk-F6SE42BK.js → chunk-FJKNFAKQ.js} +15 -472
  25. package/Build/Workers/{chunk-PNBGBETF.js → chunk-FNIRWHJB.js} +10 -10
  26. package/Build/Workers/{chunk-RAEV7K66.js → chunk-FZRIVR7Y.js} +5 -5
  27. package/Build/Workers/{chunk-AIPU2VSX.js → chunk-G43QFN4Q.js} +6 -6
  28. package/Build/Workers/{chunk-ZUA2UUNV.js → chunk-GATZHF3K.js} +2 -2
  29. package/Build/Workers/{chunk-ZK5JOS3D.js → chunk-GRC2ZTAF.js} +14 -14
  30. package/Build/Workers/{chunk-5YLJ77FF.js → chunk-HU6N6EXB.js} +10 -10
  31. package/Build/Workers/{chunk-4EBHOMFX.js → chunk-I46ZRR5W.js} +17 -17
  32. package/Build/Workers/{chunk-LZ7JIV3K.js → chunk-JURN7NPV.js} +17 -17
  33. package/Build/Workers/{chunk-JCNXK6EL.js → chunk-KKCR2YOP.js} +11 -11
  34. package/Build/Workers/{chunk-S6SKF6DT.js → chunk-LPR3YNP2.js} +5 -5
  35. package/Build/Workers/{chunk-UDO6BFSF.js → chunk-M7ERACJJ.js} +13 -13
  36. package/Build/Workers/{chunk-BZP4T2JJ.js → chunk-MDWEGWPA.js} +10 -10
  37. package/Build/Workers/{chunk-72SANQJV.js → chunk-OGXZVPPM.js} +9 -5
  38. package/Build/Workers/{chunk-AR5DNBJ4.js → chunk-PGSJK77E.js} +6 -6
  39. package/Build/Workers/{chunk-GEJTYLCO.js → chunk-PPH7OFP3.js} +5 -5
  40. package/Build/Workers/{chunk-OVLG3FRS.js → chunk-SH5USDPI.js} +6 -6
  41. package/Build/Workers/{chunk-6HZQPRUS.js → chunk-SOWMRMWA.js} +1 -1
  42. package/Build/Workers/{chunk-JXDC723O.js → chunk-STW2DGFI.js} +2 -2
  43. package/Build/Workers/{chunk-5HDYHG3F.js → chunk-T3XIFPYR.js} +13 -13
  44. package/Build/Workers/chunk-TTUZP4BO.js +501 -0
  45. package/Build/Workers/{chunk-7XEAYGZK.js → chunk-UEXTBDBE.js} +10 -10
  46. package/Build/Workers/{chunk-GV56Q4LU.js → chunk-VOXYEYJT.js} +11 -11
  47. package/Build/Workers/{chunk-NY3K4IM3.js → chunk-X4356LRH.js} +12 -12
  48. package/Build/Workers/{chunk-S4MAZ3SS.js → chunk-XGI5BXZY.js} +2 -2
  49. package/Build/Workers/{chunk-UAEW6HKG.js → chunk-Y2ME2IJV.js} +13 -13
  50. package/Build/Workers/{chunk-XWXM2O2R.js → chunk-Y5UQJLYE.js} +6 -6
  51. package/Build/Workers/{chunk-QZAD5O7I.js → chunk-YJEBABKH.js} +7 -7
  52. package/Build/Workers/{chunk-UGK3FCDY.js → chunk-YWTJ2B4B.js} +1 -1
  53. package/Build/Workers/{chunk-R5X4OQT4.js → chunk-Z3TIFFGF.js} +7 -7
  54. package/Build/Workers/{chunk-WBQCVXR3.js → chunk-ZT7KWISZ.js} +4 -4
  55. package/Build/Workers/combineGeometry.js +24 -23
  56. package/Build/Workers/createBoxGeometry.js +18 -17
  57. package/Build/Workers/createBoxOutlineGeometry.js +16 -15
  58. package/Build/Workers/createCircleGeometry.js +26 -25
  59. package/Build/Workers/createCircleOutlineGeometry.js +19 -18
  60. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -32
  61. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -30
  62. package/Build/Workers/createCorridorGeometry.js +29 -28
  63. package/Build/Workers/createCorridorOutlineGeometry.js +28 -27
  64. package/Build/Workers/createCylinderGeometry.js +20 -19
  65. package/Build/Workers/createCylinderOutlineGeometry.js +18 -17
  66. package/Build/Workers/createEllipseGeometry.js +26 -25
  67. package/Build/Workers/createEllipseOutlineGeometry.js +19 -18
  68. package/Build/Workers/createEllipsoidGeometry.js +19 -18
  69. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -17
  70. package/Build/Workers/createFrustumGeometry.js +18 -17
  71. package/Build/Workers/createFrustumOutlineGeometry.js +18 -17
  72. package/Build/Workers/createGeometry.js +54 -33
  73. package/Build/Workers/createGroundPolylineGeometry.js +22 -21
  74. package/Build/Workers/createPlaneGeometry.js +16 -15
  75. package/Build/Workers/createPlaneOutlineGeometry.js +15 -14
  76. package/Build/Workers/createPolygonGeometry.js +32 -31
  77. package/Build/Workers/createPolygonOutlineGeometry.js +30 -29
  78. package/Build/Workers/createPolylineGeometry.js +25 -24
  79. package/Build/Workers/createPolylineVolumeGeometry.js +31 -30
  80. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -26
  81. package/Build/Workers/createRectangleGeometry.js +27 -26
  82. package/Build/Workers/createRectangleOutlineGeometry.js +20 -19
  83. package/Build/Workers/createSimplePolylineGeometry.js +23 -22
  84. package/Build/Workers/createSphereGeometry.js +19 -18
  85. package/Build/Workers/createSphereOutlineGeometry.js +18 -17
  86. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  87. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  88. package/Build/Workers/createVectorTileGeometries.js +24 -23
  89. package/Build/Workers/createVectorTilePoints.js +12 -12
  90. package/Build/Workers/createVectorTilePolygons.js +22 -21
  91. package/Build/Workers/createVectorTilePolylines.js +14 -14
  92. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -21
  93. package/Build/Workers/createVerticesFromHeightmap.js +22 -21
  94. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -18
  95. package/Build/Workers/createWallGeometry.js +24 -23
  96. package/Build/Workers/createWallOutlineGeometry.js +23 -22
  97. package/Build/Workers/decodeDraco.js +11 -11
  98. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  99. package/Build/Workers/decodeI3S.js +601 -92
  100. package/Build/Workers/transcodeKTX2.js +7 -7
  101. package/Build/Workers/transferTypedArrayTest.js +1 -1
  102. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -21
  103. package/Source/Core/Ellipsoid.js +6 -0
  104. package/Source/Core/IntersectionTests.js +6 -3
  105. package/Source/Core/Ion.js +1 -1
  106. package/Source/Core/PixelFormat.js +5 -0
  107. package/Source/Core/Transforms.js +3 -0
  108. package/Source/Core/srgbToLinear.js +32 -0
  109. package/Source/DataSources/CzmlDataSource.js +51 -23
  110. package/Source/DataSources/DataSourceDisplay.js +27 -0
  111. package/Source/DataSources/Entity.js +20 -2
  112. package/Source/DataSources/GeometryUpdaterSet.js +114 -0
  113. package/Source/DataSources/GeometryVisualizer.js +19 -83
  114. package/Source/Renderer/Context.js +10 -0
  115. package/Source/Renderer/ContextLimits.js +2 -0
  116. package/Source/Renderer/demodernizeShader.js +4 -1
  117. package/Source/Scene/ArcGisMapService.js +1 -1
  118. package/Source/Scene/Axis.js +12 -7
  119. package/Source/Scene/Camera.js +46 -4
  120. package/Source/Scene/Cesium3DTileset.js +44 -6
  121. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +2 -4
  122. package/Source/Scene/FrameState.js +5 -0
  123. package/Source/Scene/GlobeTranslucencyState.js +1 -1
  124. package/Source/Scene/GltfPipeline/updateVersion.js +69 -68
  125. package/Source/Scene/I3SDataProvider.js +270 -53
  126. package/Source/Scene/I3SDecoder.js +8 -1
  127. package/Source/Scene/I3SFeature.js +2 -5
  128. package/Source/Scene/I3SField.js +136 -31
  129. package/Source/Scene/I3SGeometry.js +70 -2
  130. package/Source/Scene/I3SLayer.js +55 -10
  131. package/Source/Scene/I3SNode.js +175 -18
  132. package/Source/Scene/I3SStatistics.js +94 -0
  133. package/Source/Scene/I3SSublayer.js +176 -0
  134. package/Source/Scene/I3SSymbology.js +337 -0
  135. package/Source/Scene/KeyframeNode.js +1 -1
  136. package/Source/Scene/Model/pickModel.js +25 -7
  137. package/Source/Scene/PickFramebuffer.js +37 -2
  138. package/Source/Scene/Picking.js +113 -39
  139. package/Source/Scene/Primitive.js +6 -2
  140. package/Source/Scene/Scene.js +126 -42
  141. package/Source/Scene/ScreenSpaceCameraController.js +21 -7
  142. package/Source/Scene/SensorVolumePortionToDisplay.js +69 -0
  143. package/Source/Scene/SpatialNode.js +12 -19
  144. package/Source/Scene/StructuralMetadata.js +1 -1
  145. package/Source/Scene/VoxelBoxShape.js +76 -0
  146. package/Source/Scene/VoxelCell.js +273 -0
  147. package/Source/Scene/VoxelCylinderShape.js +114 -43
  148. package/Source/Scene/VoxelEllipsoidShape.js +158 -116
  149. package/Source/Scene/VoxelPrimitive.js +3 -1
  150. package/Source/Scene/VoxelRenderResources.js +3 -0
  151. package/Source/Scene/VoxelShape.js +13 -0
  152. package/Source/Scene/VoxelTraversal.js +76 -54
  153. package/Source/Scene/buildVoxelDrawCommands.js +23 -0
  154. package/Source/Scene/createGooglePhotorealistic3DTileset.js +1 -0
  155. package/Source/Scene/processVoxelProperties.js +2 -0
  156. package/Source/Shaders/Voxels/IntersectCylinder.glsl +14 -111
  157. package/Source/Shaders/Voxels/IntersectCylinder.js +14 -111
  158. package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +32 -113
  159. package/Source/Shaders/Voxels/IntersectEllipsoid.js +32 -113
  160. package/Source/Shaders/Voxels/IntersectLongitude.glsl +102 -0
  161. package/Source/Shaders/Voxels/IntersectLongitude.js +104 -0
  162. package/Source/Shaders/Voxels/VoxelFS.glsl +39 -1
  163. package/Source/Shaders/Voxels/VoxelFS.js +39 -1
  164. package/Source/Shaders/Voxels/convertUvToCylinder.glsl +19 -37
  165. package/Source/Shaders/Voxels/convertUvToCylinder.js +19 -37
  166. package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +24 -44
  167. package/Source/Shaders/Voxels/convertUvToEllipsoid.js +24 -44
  168. package/Source/Workers/createGeometry.js +40 -11
  169. package/Source/Workers/decodeI3S.js +720 -94
  170. package/index.d.ts +296 -11
  171. package/index.js +102 -94
  172. package/package.json +1 -1
@@ -10,7 +10,11 @@ export default "// See Intersection.glsl for the definition of intersectScene\n\
10
10
  // See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture\n\
11
11
  \n\
12
12
  #define STEP_COUNT_MAX 1000 // Harcoded value because GLSL doesn't like variable length loops\n\
13
- #define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0\n\
13
+ #if defined(PICKING_VOXEL)\n\
14
+ #define ALPHA_ACCUM_MAX 0.1\n\
15
+ #else\n\
16
+ #define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0\n\
17
+ #endif\n\
14
18
  \n\
15
19
  uniform mat3 u_transformDirectionViewToLocal;\n\
16
20
  uniform vec3 u_cameraPositionUv;\n\
@@ -43,6 +47,30 @@ vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersecti
43
47
  #endif\n\
44
48
  }\n\
45
49
  \n\
50
+ vec2 packIntToVec2(int value) {\n\
51
+ float shifted = float(value) / 255.0;\n\
52
+ float lowBits = fract(shifted);\n\
53
+ float highBits = floor(shifted) / 255.0;\n\
54
+ return vec2(highBits, lowBits);\n\
55
+ }\n\
56
+ \n\
57
+ vec2 packFloatToVec2(float value) {\n\
58
+ float lowBits = fract(value);\n\
59
+ float highBits = floor(value) / 255.0;\n\
60
+ return vec2(highBits, lowBits);\n\
61
+ }\n\
62
+ \n\
63
+ int getSampleIndex(in vec3 tileUv) {\n\
64
+ ivec3 voxelDimensions = u_dimensions;\n\
65
+ vec3 tileCoordinate = clamp(tileUv, 0.0, 1.0) * vec3(voxelDimensions);\n\
66
+ ivec3 tileIndex = ivec3(floor(tileCoordinate));\n\
67
+ #if defined(PADDING)\n\
68
+ voxelDimensions += u_paddingBefore + u_paddingAfter;\n\
69
+ tileIndex += u_paddingBefore;\n\
70
+ #endif\n\
71
+ return tileIndex.x + voxelDimensions.x * (tileIndex.y + voxelDimensions.y * tileIndex.z);\n\
72
+ }\n\
73
+ \n\
46
74
  void main()\n\
47
75
  {\n\
48
76
  vec4 fragCoord = gl_FragCoord;\n\
@@ -103,6 +131,8 @@ void main()\n\
103
131
  fragmentInput.voxel.viewDirWorld = viewDirWorld;\n\
104
132
  fragmentInput.voxel.surfaceNormal = step.xyz;\n\
105
133
  fragmentInput.voxel.travelDistance = step.w;\n\
134
+ fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex;\n\
135
+ fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0].tileUv);\n\
106
136
  \n\
107
137
  // Run the custom shader\n\
108
138
  czm_modelMaterial materialOutput;\n\
@@ -165,6 +195,14 @@ void main()\n\
165
195
  discard;\n\
166
196
  }\n\
167
197
  out_FragColor = u_pickColor;\n\
198
+ #elif defined(PICKING_VOXEL)\n\
199
+ // If alpha is 0.0 there is nothing to pick\n\
200
+ if (colorAccum.a == 0.0) {\n\
201
+ discard;\n\
202
+ }\n\
203
+ vec2 megatextureId = packIntToVec2(sampleDatas[0].megatextureIndex);\n\
204
+ vec2 sampleIndex = packIntToVec2(getSampleIndex(sampleDatas[0].tileUv));\n\
205
+ out_FragColor = vec4(megatextureId, sampleIndex);\n\
168
206
  #else\n\
169
207
  out_FragColor = colorAccum;\n\
170
208
  #endif\n\
@@ -1,10 +1,7 @@
1
1
  /* Cylinder defines (set in Scene/VoxelCylinderShape.js)
2
2
  #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS
3
- #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT
4
3
  #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT
5
- #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
6
4
  #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE
7
- #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
8
5
  #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY
9
6
  #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY
10
7
  #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED
@@ -29,46 +26,31 @@
29
26
  vec3 convertUvToShapeUvSpace(in vec3 positionUv) {
30
27
  vec3 positionLocal = positionUv * 2.0 - 1.0; // [-1,+1]
31
28
 
32
- // Compute radius
33
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT)
34
- float radius = 1.0;
35
- #else
36
- float radius = length(positionLocal.xy); // [0,1]
37
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)
38
- radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; // x = scale, y = offset
39
- #endif
29
+ float radius = length(positionLocal.xy); // [0,1]
30
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)
31
+ radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; // x = scale, y = offset
40
32
  #endif
41
33
 
42
- // Compute height
43
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)
44
- float height = 1.0;
45
- #else
46
- float height = positionUv.z; // [0,1]
47
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
48
- height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset
49
- #endif
34
+ float height = positionUv.z; // [0,1]
35
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
36
+ height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset
50
37
  #endif
51
38
 
52
- // Compute angle
53
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)
54
- float angle = 1.0;
55
- #else
56
- float angle = (atan(positionLocal.y, positionLocal.x) + czm_pi) / czm_twoPi; // [0,1]
57
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
58
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)
59
- // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.
60
- angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);
61
- #endif
62
-
63
- // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
64
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)
65
- angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;
66
- #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)
67
- angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;
68
- #endif
39
+ float angle = (atan(positionLocal.y, positionLocal.x) + czm_pi) / czm_twoPi; // [0,1]
40
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
41
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)
42
+ // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.
43
+ angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);
44
+ #endif
69
45
 
70
- angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset
46
+ // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
47
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)
48
+ angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;
49
+ #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)
50
+ angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;
71
51
  #endif
52
+
53
+ angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset
72
54
  #endif
73
55
 
74
56
  return vec3(radius, height, angle);
@@ -1,11 +1,8 @@
1
1
  //This file is automatically rebuilt by the Cesium build process.
2
2
  export default "/* Cylinder defines (set in Scene/VoxelCylinderShape.js)\n\
3
3
  #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS\n\
4
- #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT\n\
5
4
  #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT\n\
6
- #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT\n\
7
5
  #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE\n\
8
- #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO\n\
9
6
  #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY\n\
10
7
  #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY\n\
11
8
  #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED\n\
@@ -30,46 +27,31 @@ export default "/* Cylinder defines (set in Scene/VoxelCylinderShape.js)\n\
30
27
  vec3 convertUvToShapeUvSpace(in vec3 positionUv) {\n\
31
28
  vec3 positionLocal = positionUv * 2.0 - 1.0; // [-1,+1]\n\
32
29
  \n\
33
- // Compute radius\n\
34
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT)\n\
35
- float radius = 1.0;\n\
36
- #else\n\
37
- float radius = length(positionLocal.xy); // [0,1]\n\
38
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)\n\
39
- radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; // x = scale, y = offset\n\
40
- #endif\n\
30
+ float radius = length(positionLocal.xy); // [0,1]\n\
31
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)\n\
32
+ radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; // x = scale, y = offset\n\
41
33
  #endif\n\
42
34
  \n\
43
- // Compute height\n\
44
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)\n\
45
- float height = 1.0;\n\
46
- #else\n\
47
- float height = positionUv.z; // [0,1]\n\
48
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)\n\
49
- height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset\n\
50
- #endif\n\
35
+ float height = positionUv.z; // [0,1]\n\
36
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)\n\
37
+ height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset\n\
51
38
  #endif\n\
52
39
  \n\
53
- // Compute angle\n\
54
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)\n\
55
- float angle = 1.0;\n\
56
- #else\n\
57
- float angle = (atan(positionLocal.y, positionLocal.x) + czm_pi) / czm_twoPi; // [0,1]\n\
58
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)\n\
59
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)\n\
60
- // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.\n\
61
- angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);\n\
62
- #endif\n\
63
- \n\
64
- // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.\n\
65
- #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)\n\
66
- angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;\n\
67
- #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)\n\
68
- angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;\n\
69
- #endif\n\
40
+ float angle = (atan(positionLocal.y, positionLocal.x) + czm_pi) / czm_twoPi; // [0,1]\n\
41
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)\n\
42
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)\n\
43
+ // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.\n\
44
+ angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);\n\
45
+ #endif\n\
70
46
  \n\
71
- angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset\n\
47
+ // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.\n\
48
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)\n\
49
+ angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;\n\
50
+ #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)\n\
51
+ angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;\n\
72
52
  #endif\n\
53
+ \n\
54
+ angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset\n\
73
55
  #endif\n\
74
56
  \n\
75
57
  return vec3(radius, height, angle);\n\
@@ -2,11 +2,8 @@
2
2
  #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY
3
3
  #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY
4
4
  #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE
5
- #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO
6
5
  #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED
7
6
  #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE
8
- #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO
9
- #define ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN
10
7
  #define ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
11
8
  #define ELLIPSOID_IS_SPHERE
12
9
  */
@@ -24,7 +21,7 @@ uniform vec3 u_ellipsoidRadiiUv; // [0,1]
24
21
  #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
25
22
  uniform vec2 u_ellipsoidUvToShapeUvLatitude; // x = scale, y = offset
26
23
  #endif
27
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN) && !defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)
24
+ #if !defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)
28
25
  uniform float u_ellipsoidInverseHeightDifferenceUv;
29
26
  uniform vec2 u_ellipseInnerRadiiUv; // [0,1]
30
27
  #endif
@@ -66,38 +63,30 @@ vec3 convertUvToShapeUvSpace(in vec3 positionUv) {
66
63
  #endif
67
64
 
68
65
  // Compute longitude
69
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO)
70
- float longitude = 1.0;
71
- #else
72
- float longitude = (atan(normal.y, normal.x) + czm_pi) / czm_twoPi;
66
+ float longitude = (atan(normal.y, normal.x) + czm_pi) / czm_twoPi;
73
67
 
74
- // Correct the angle when max < min
75
- // Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space.
76
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)
77
- longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z);
78
- #endif
68
+ // Correct the angle when max < min
69
+ // Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space.
70
+ #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)
71
+ longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z);
72
+ #endif
79
73
 
80
- // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
81
- #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY)
82
- longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude;
83
- #endif
84
- #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY)
85
- longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude;
86
- #endif
74
+ // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
75
+ #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY)
76
+ longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude;
77
+ #endif
78
+ #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY)
79
+ longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude;
80
+ #endif
87
81
 
88
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
89
- longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y;
90
- #endif
82
+ #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
83
+ longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y;
91
84
  #endif
92
85
 
93
86
  // Compute latitude
94
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO)
95
- float latitude = 1.0;
96
- #else
97
- float latitude = (asin(normal.z) + czm_piOverTwo) / czm_pi;
98
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
99
- latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y;
100
- #endif
87
+ float latitude = (asin(normal.z) + czm_piOverTwo) / czm_pi;
88
+ #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
89
+ latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y;
101
90
  #endif
102
91
 
103
92
  // Compute height
@@ -108,21 +97,12 @@ vec3 convertUvToShapeUvSpace(in vec3 positionUv) {
108
97
  float height = 1.0;
109
98
  #else
110
99
  #if defined(ELLIPSOID_IS_SPHERE)
111
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN)
112
- float height = (length(posEllipsoid) - u_ellipseInnerRadiiUv.x) * u_ellipsoidInverseHeightDifferenceUv;
113
- #else
114
- float height = length(posEllipsoid);
115
- #endif
100
+ float height = (length(posEllipsoid) - u_ellipseInnerRadiiUv.x) * u_ellipsoidInverseHeightDifferenceUv;
116
101
  #else
117
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN)
118
- // Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z) (assuming radii.x == radii.y which is true for WGS84).
119
- // This is an optimization so that math can be done with ellipses instead of ellipsoids.
120
- vec2 posEllipse = vec2(length(posEllipsoid.xy), posEllipsoid.z);
121
- float height = ellipseDistanceIterative(posEllipse, u_ellipseInnerRadiiUv) * u_ellipsoidInverseHeightDifferenceUv;
122
- #else
123
- // TODO: this is probably not correct
124
- float height = length(posEllipsoid);
125
- #endif
102
+ // Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z) (assuming radii.x == radii.y which is true for WGS84).
103
+ // This is an optimization so that math can be done with ellipses instead of ellipsoids.
104
+ vec2 posEllipse = vec2(length(posEllipsoid.xy), posEllipsoid.z);
105
+ float height = ellipseDistanceIterative(posEllipse, u_ellipseInnerRadiiUv) * u_ellipsoidInverseHeightDifferenceUv;
126
106
  #endif
127
107
  #endif
128
108
 
@@ -3,11 +3,8 @@ export default "/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js)\n\
3
3
  #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY\n\
4
4
  #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY\n\
5
5
  #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE\n\
6
- #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO\n\
7
6
  #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED\n\
8
7
  #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE\n\
9
- #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO\n\
10
- #define ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN\n\
11
8
  #define ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT\n\
12
9
  #define ELLIPSOID_IS_SPHERE\n\
13
10
  */\n\
@@ -25,7 +22,7 @@ uniform vec3 u_ellipsoidRadiiUv; // [0,1]\n\
25
22
  #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)\n\
26
23
  uniform vec2 u_ellipsoidUvToShapeUvLatitude; // x = scale, y = offset\n\
27
24
  #endif\n\
28
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN) && !defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)\n\
25
+ #if !defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)\n\
29
26
  uniform float u_ellipsoidInverseHeightDifferenceUv;\n\
30
27
  uniform vec2 u_ellipseInnerRadiiUv; // [0,1]\n\
31
28
  #endif\n\
@@ -67,38 +64,30 @@ vec3 convertUvToShapeUvSpace(in vec3 positionUv) {\n\
67
64
  #endif\n\
68
65
  \n\
69
66
  // Compute longitude\n\
70
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO)\n\
71
- float longitude = 1.0;\n\
72
- #else\n\
73
- float longitude = (atan(normal.y, normal.x) + czm_pi) / czm_twoPi;\n\
67
+ float longitude = (atan(normal.y, normal.x) + czm_pi) / czm_twoPi;\n\
74
68
  \n\
75
- // Correct the angle when max < min\n\
76
- // Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space.\n\
77
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)\n\
78
- longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z);\n\
79
- #endif\n\
69
+ // Correct the angle when max < min\n\
70
+ // Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space.\n\
71
+ #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)\n\
72
+ longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z);\n\
73
+ #endif\n\
80
74
  \n\
81
- // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.\n\
82
- #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY)\n\
83
- longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude;\n\
84
- #endif\n\
85
- #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY)\n\
86
- longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude;\n\
87
- #endif\n\
75
+ // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.\n\
76
+ #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY)\n\
77
+ longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude;\n\
78
+ #endif\n\
79
+ #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY)\n\
80
+ longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude;\n\
81
+ #endif\n\
88
82
  \n\
89
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)\n\
90
- longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y;\n\
91
- #endif\n\
83
+ #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)\n\
84
+ longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y;\n\
92
85
  #endif\n\
93
86
  \n\
94
87
  // Compute latitude\n\
95
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO)\n\
96
- float latitude = 1.0;\n\
97
- #else\n\
98
- float latitude = (asin(normal.z) + czm_piOverTwo) / czm_pi;\n\
99
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)\n\
100
- latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y;\n\
101
- #endif\n\
88
+ float latitude = (asin(normal.z) + czm_piOverTwo) / czm_pi;\n\
89
+ #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)\n\
90
+ latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y;\n\
102
91
  #endif\n\
103
92
  \n\
104
93
  // Compute height\n\
@@ -109,21 +98,12 @@ vec3 convertUvToShapeUvSpace(in vec3 positionUv) {\n\
109
98
  float height = 1.0;\n\
110
99
  #else\n\
111
100
  #if defined(ELLIPSOID_IS_SPHERE)\n\
112
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN)\n\
113
- float height = (length(posEllipsoid) - u_ellipseInnerRadiiUv.x) * u_ellipsoidInverseHeightDifferenceUv;\n\
114
- #else\n\
115
- float height = length(posEllipsoid);\n\
116
- #endif\n\
101
+ float height = (length(posEllipsoid) - u_ellipseInnerRadiiUv.x) * u_ellipsoidInverseHeightDifferenceUv;\n\
117
102
  #else\n\
118
- #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN)\n\
119
- // Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z) (assuming radii.x == radii.y which is true for WGS84).\n\
120
- // This is an optimization so that math can be done with ellipses instead of ellipsoids.\n\
121
- vec2 posEllipse = vec2(length(posEllipsoid.xy), posEllipsoid.z);\n\
122
- float height = ellipseDistanceIterative(posEllipse, u_ellipseInnerRadiiUv) * u_ellipsoidInverseHeightDifferenceUv;\n\
123
- #else\n\
124
- // TODO: this is probably not correct\n\
125
- float height = length(posEllipsoid);\n\
126
- #endif\n\
103
+ // Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z) (assuming radii.x == radii.y which is true for WGS84).\n\
104
+ // This is an optimization so that math can be done with ellipses instead of ellipsoids.\n\
105
+ vec2 posEllipse = vec2(length(posEllipsoid.xy), posEllipsoid.z);\n\
106
+ float height = ellipseDistanceIterative(posEllipse, u_ellipseInnerRadiiUv) * u_ellipsoidInverseHeightDifferenceUv;\n\
127
107
  #endif\n\
128
108
  #endif\n\
129
109
  \n\
@@ -1,23 +1,46 @@
1
+ import DeveloperError from "../Core/DeveloperError.js";
2
+ import defaultValue from "../Core/defaultValue.js";
1
3
  import defined from "../Core/defined.js";
2
4
  import PrimitivePipeline from "../Scene/PrimitivePipeline.js";
3
5
  import createTaskProcessorWorker from "./createTaskProcessorWorker.js";
6
+ /* global require */
4
7
 
5
8
  const moduleCache = {};
6
9
 
7
- async function getModule(moduleName) {
8
- let module = moduleCache[moduleName];
9
- if (!defined(module)) {
10
+ async function getModule(moduleName, modulePath) {
11
+ let module = defaultValue(moduleCache[modulePath] ?? moduleCache[moduleName]);
12
+
13
+ if (defined(module)) {
14
+ return module;
15
+ }
16
+
17
+ if (defined(modulePath)) {
18
+ // ignore moduleName and use the path to import
10
19
  if (typeof exports === "object") {
11
20
  // Use CommonJS-style require.
12
- /* global require */
13
- moduleCache[module] = module = require(`Workers/${moduleName}`);
21
+ module = require(modulePath);
14
22
  } else {
15
23
  // Use ESM-style dynamic import
16
- const result = await import(`./${moduleName}.js`);
24
+ const result = await import(modulePath);
17
25
  module = result.default;
18
- moduleCache[module] = module;
19
26
  }
27
+
28
+ moduleCache[modulePath] = module;
29
+ return module;
20
30
  }
31
+
32
+ if (typeof exports === "object") {
33
+ // Use CommonJS-style require.
34
+ module = require(`Workers/${moduleName}`);
35
+ } else {
36
+ // Use ESM-style dynamic import
37
+ const result = defined(modulePath)
38
+ ? await import(modulePath)
39
+ : await import(`./${moduleName}.js`);
40
+ module = result.default;
41
+ }
42
+
43
+ moduleCache[moduleName] = module;
21
44
  return module;
22
45
  }
23
46
 
@@ -30,11 +53,17 @@ async function createGeometry(parameters, transferableObjects) {
30
53
  const task = subTasks[i];
31
54
  const geometry = task.geometry;
32
55
  const moduleName = task.moduleName;
56
+ const modulePath = task.modulePath;
57
+
58
+ if (defined(moduleName) && defined(modulePath)) {
59
+ throw new DeveloperError("Must only set moduleName or modulePath");
60
+ }
33
61
 
34
- if (defined(moduleName)) {
35
- resultsOrPromises[i] = getModule(moduleName).then((createFunction) =>
36
- createFunction(geometry, task.offset)
37
- );
62
+ if (defined(moduleName) || defined(modulePath)) {
63
+ resultsOrPromises[i] = getModule(
64
+ moduleName,
65
+ modulePath
66
+ ).then((createFunction) => createFunction(geometry, task.offset));
38
67
  } else {
39
68
  // Already created geometry
40
69
  resultsOrPromises[i] = geometry;