@cesium/engine 26.0.0 → 26.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.
- package/Build/ThirdParty/Workers/zip-web-worker.js +586 -480
- package/Build/Workers/{chunk-7J2HKPRH.js → chunk-27FWRTJI.js} +9 -9
- package/Build/Workers/{chunk-EF2QYXGA.js → chunk-2EFYUSUY.js} +14 -14
- package/Build/Workers/chunk-2H5264K7.js +1284 -0
- package/Build/Workers/{chunk-DOBXCNC3.js → chunk-2H73KDBM.js} +13 -13
- package/Build/Workers/chunk-2RGJPWQX.js +1284 -0
- package/Build/Workers/chunk-2Z4ZLVOD.js +352 -0
- package/Build/Workers/{chunk-F6QDY6HU.js → chunk-2ZKH2QZB.js} +13 -13
- package/Build/Workers/chunk-36NI5E6W.js +3820 -0
- package/Build/Workers/{chunk-ZK3CF7ZD.js → chunk-37SW7SYS.js} +12 -12
- package/Build/Workers/chunk-3GHVJ3SO.js +455 -0
- package/Build/Workers/chunk-3LB4UVPU.js +387 -0
- package/Build/Workers/chunk-3PONLKEL.js +778 -0
- package/Build/Workers/{chunk-Y57HREW5.js → chunk-3PSS3T43.js} +4 -4
- package/Build/Workers/chunk-3QR662HH.js +3820 -0
- package/Build/Workers/{chunk-QN67VG36.js → chunk-3SX2WYSO.js} +6 -6
- package/Build/Workers/{chunk-G7PXZRVF.js → chunk-3UDN6LYX.js} +7 -7
- package/Build/Workers/chunk-47MCBSXI.js +9237 -0
- package/Build/Workers/{chunk-KKOSKAZB.js → chunk-4E626OCE.js} +17 -17
- package/Build/Workers/chunk-4NW2MJKH.js +455 -0
- package/Build/Workers/{chunk-DBOEKL43.js → chunk-52YK5BSN.js} +7 -7
- package/Build/Workers/{chunk-KFSTQKNM.js → chunk-5LSOO2KD.js} +7 -7
- package/Build/Workers/chunk-5RNAQZK6.js +9234 -0
- package/Build/Workers/chunk-5YPQBFRD.js +519 -0
- package/Build/Workers/{chunk-S4MCOY6I.js → chunk-6FHT43QR.js} +5 -5
- package/Build/Workers/chunk-6FZDPMTO.js +455 -0
- package/Build/Workers/{chunk-VQYETPWC.js → chunk-6HK6IXK2.js} +4 -4
- package/Build/Workers/chunk-6R5X2GUA.js +1284 -0
- package/Build/Workers/{chunk-AYKR4VBR.js → chunk-6YR6JBMY.js} +2 -2
- package/Build/Workers/chunk-76FDC45O.js +511 -0
- package/Build/Workers/chunk-7A2OGDHT.js +305 -0
- package/Build/Workers/chunk-7CGEQUM2.js +305 -0
- package/Build/Workers/{chunk-54I6Y66F.js → chunk-7D2HZKH7.js} +6 -6
- package/Build/Workers/{chunk-3VFEWOBI.js → chunk-7I325HV6.js} +7 -7
- package/Build/Workers/{chunk-4MGMYHOO.js → chunk-7KVKHY7O.js} +6 -6
- package/Build/Workers/chunk-7MM3N2VE.js +1067 -0
- package/Build/Workers/chunk-7TKLTCZW.js +219 -0
- package/Build/Workers/chunk-7UUKBDH6.js +1054 -0
- package/Build/Workers/chunk-7W6DUHAB.js +693 -0
- package/Build/Workers/{chunk-DDWSZVMY.js → chunk-7XM5JK5F.js} +5 -5
- package/Build/Workers/chunk-7YG3ND3P.js +454 -0
- package/Build/Workers/{chunk-IRBKFCEJ.js → chunk-A3O6EDBK.js} +2 -2
- package/Build/Workers/chunk-A62YI6S6.js +305 -0
- package/Build/Workers/{chunk-V7VQKN6N.js → chunk-A6X24AZI.js} +5 -5
- package/Build/Workers/chunk-A7TTWVTF.js +2719 -0
- package/Build/Workers/chunk-ACTVJHSP.js +519 -0
- package/Build/Workers/chunk-ADX3CBKD.js +9234 -0
- package/Build/Workers/{chunk-52JDLOEM.js → chunk-AF7DTMJ7.js} +14 -14
- package/Build/Workers/{chunk-ZP7JMQV4.js → chunk-AHWAZRBV.js} +6 -2
- package/Build/Workers/chunk-AJSFRY4U.js +1344 -0
- package/Build/Workers/{chunk-EBSIOBXY.js → chunk-ARZICEEP.js} +8 -8
- package/Build/Workers/chunk-B3QHNA4A.js +147 -0
- package/Build/Workers/{chunk-YLY7NKAB.js → chunk-B4CQSLZJ.js} +4 -4
- package/Build/Workers/chunk-BKPQFCXH.js +511 -0
- package/Build/Workers/{chunk-O3EA5HS7.js → chunk-BSPCI2LO.js} +10 -10
- package/Build/Workers/chunk-BUJWSX5S.js +301 -0
- package/Build/Workers/{chunk-J6BWOHUF.js → chunk-C7JQVRLM.js} +3 -3
- package/Build/Workers/chunk-C7QDUNI3.js +138 -0
- package/Build/Workers/{chunk-KSSWJIZW.js → chunk-CDJDJ5LK.js} +2 -2
- package/Build/Workers/chunk-CEEZE3YZ.js +476 -0
- package/Build/Workers/chunk-CIV5DJOQ.js +778 -0
- package/Build/Workers/{chunk-INUEEEQA.js → chunk-CLCTQVVL.js} +8 -8
- package/Build/Workers/{chunk-C6J67V5A.js → chunk-CQNFIAZU.js} +1 -1
- package/Build/Workers/chunk-CRCGE4J4.js +9237 -0
- package/Build/Workers/{chunk-SMQZZOW6.js → chunk-CUTRKXUQ.js} +10 -10
- package/Build/Workers/{chunk-Q3PY526V.js → chunk-D6AY775A.js} +6 -6
- package/Build/Workers/chunk-DBD5WWG2.js +959 -0
- package/Build/Workers/{chunk-E7VQ76KE.js → chunk-DIGUUD6G.js} +6 -6
- package/Build/Workers/{chunk-P3CK7MCY.js → chunk-DSGLDRTI.js} +4 -4
- package/Build/Workers/chunk-DZBQUULR.js +138 -0
- package/Build/Workers/chunk-DZUFEE4L.js +140 -0
- package/Build/Workers/chunk-E2NKV5YT.js +3820 -0
- package/Build/Workers/{chunk-424RNO3D.js → chunk-E7NZJOK7.js} +196 -22
- package/Build/Workers/{chunk-UOOIQ3KX.js → chunk-EB3Y5P3A.js} +12 -12
- package/Build/Workers/{chunk-ACXQXN46.js → chunk-EHTS2YPT.js} +16 -16
- package/Build/Workers/{chunk-EPYXRCDB.js → chunk-ELE6SC2C.js} +12 -12
- package/Build/Workers/{chunk-VWV2IJRB.js → chunk-ENNFMWDW.js} +11 -11
- package/Build/Workers/chunk-EOWDZN5S.js +288 -0
- package/Build/Workers/chunk-ERKUET22.js +3201 -0
- package/Build/Workers/chunk-EZGQPOIG.js +162 -0
- package/Build/Workers/chunk-F2IMBMZY.js +241 -0
- package/Build/Workers/chunk-F4CSNRZO.js +219 -0
- package/Build/Workers/chunk-FBP4DUQJ.js +693 -0
- package/Build/Workers/{chunk-FRQZECAO.js → chunk-FCP2QY4G.js} +5 -5
- package/Build/Workers/{chunk-ZZ46LWL6.js → chunk-FDK4K5IA.js} +1 -1
- package/Build/Workers/{chunk-C6KNZ7T4.js → chunk-FGQFQHN5.js} +17 -17
- package/Build/Workers/chunk-FJWZMGOQ.js +1992 -0
- package/Build/Workers/{chunk-Y5BF6AFU.js → chunk-FQ42MT7M.js} +2 -2
- package/Build/Workers/chunk-FU4BGABC.js +398 -0
- package/Build/Workers/chunk-FX3VEAIU.js +2719 -0
- package/Build/Workers/chunk-GGNWQWSB.js +301 -0
- package/Build/Workers/chunk-GHXVQVUM.js +1344 -0
- package/Build/Workers/{chunk-CZEYZU4N.js → chunk-GNKXEN4C.js} +10 -10
- package/Build/Workers/{chunk-MYP774IS.js → chunk-GSWMAFTE.js} +8 -8
- package/Build/Workers/chunk-GVA7XQI2.js +368 -0
- package/Build/Workers/chunk-GXDHRC4J.js +1344 -0
- package/Build/Workers/chunk-GXWQZBAI.js +58 -0
- package/Build/Workers/chunk-GYSYP6PC.js +1067 -0
- package/Build/Workers/chunk-H2WCFXLP.js +241 -0
- package/Build/Workers/chunk-HDL4HOXZ.js +778 -0
- package/Build/Workers/chunk-HHV3MCGV.js +162 -0
- package/Build/Workers/chunk-HLW2ZRVK.js +368 -0
- package/Build/Workers/chunk-HS6AD4P2.js +398 -0
- package/Build/Workers/chunk-HT6FASOT.js +973 -0
- package/Build/Workers/chunk-I74ZH5LK.js +959 -0
- package/Build/Workers/{chunk-7WM2PX4V.js → chunk-IDVHUDZT.js} +5 -5
- package/Build/Workers/chunk-IGAZBTFZ.js +3201 -0
- package/Build/Workers/chunk-IJZJMIUY.js +789 -0
- package/Build/Workers/chunk-ILME5BXA.js +301 -0
- package/Build/Workers/chunk-IMBVP57H.js +44 -0
- package/Build/Workers/chunk-IOO7Z2AV.js +57 -0
- package/Build/Workers/chunk-IUIFLOYO.js +44 -0
- package/Build/Workers/chunk-J73T2VOY.js +171 -0
- package/Build/Workers/chunk-JALGQYDY.js +288 -0
- package/Build/Workers/chunk-JKXV6PG5.js +56 -0
- package/Build/Workers/chunk-JW6OZT4R.js +288 -0
- package/Build/Workers/{chunk-CXOYE2WM.js → chunk-JXYLJCTC.js} +5 -5
- package/Build/Workers/{chunk-CFQP6LYM.js → chunk-K27QOAW6.js} +4 -4
- package/Build/Workers/chunk-KGXSYGBG.js +387 -0
- package/Build/Workers/chunk-KMV25A63.js +789 -0
- package/Build/Workers/chunk-KP5QD7WU.js +693 -0
- package/Build/Workers/chunk-KZWFWJML.js +2719 -0
- package/Build/Workers/chunk-LCXRRALY.js +387 -0
- package/Build/Workers/chunk-LD64RPYV.js +368 -0
- package/Build/Workers/{chunk-U3ZA64U7.js → chunk-LDRQSYBN.js} +2 -2
- package/Build/Workers/chunk-LGNDTZVX.js +97 -0
- package/Build/Workers/chunk-LNSQVXFH.js +1800 -0
- package/Build/Workers/chunk-M4JZ6TSZ.js +959 -0
- package/Build/Workers/chunk-M6QKXVAU.js +1054 -0
- package/Build/Workers/chunk-MAAHFYPC.js +198 -0
- package/Build/Workers/chunk-MCJDRDJQ.js +102 -0
- package/Build/Workers/chunk-MEENMEAH.js +198 -0
- package/Build/Workers/{chunk-TKKIREQ6.js → chunk-N7CCOFLX.js} +1 -1
- package/Build/Workers/chunk-NAWU5RF4.js +162 -0
- package/Build/Workers/{chunk-M3B5JKSM.js → chunk-NCL22ZUX.js} +1 -1
- package/Build/Workers/chunk-NEFDMMLY.js +241 -0
- package/Build/Workers/{chunk-UA25D5MX.js → chunk-NIWITKQK.js} +10 -10
- package/Build/Workers/chunk-NJVBJG63.js +124 -0
- package/Build/Workers/chunk-NLLCQBX3.js +73 -0
- package/Build/Workers/chunk-NSKZ6SBK.js +1483 -0
- package/Build/Workers/chunk-NXGQBQWE.js +837 -0
- package/Build/Workers/chunk-O3DKEX7Q.js +352 -0
- package/Build/Workers/chunk-O3XFXGPZ.js +476 -0
- package/Build/Workers/chunk-OA6MYL2C.js +837 -0
- package/Build/Workers/chunk-OBEU25PI.js +1067 -0
- package/Build/Workers/chunk-OHP4ELS7.js +198 -0
- package/Build/Workers/chunk-OZGPS7FB.js +138 -0
- package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
- package/Build/Workers/chunk-PD4GK4EM.js +57 -0
- package/Build/Workers/chunk-PEDU33QG.js +2342 -0
- package/Build/Workers/chunk-PRWUMCXF.js +682 -0
- package/Build/Workers/chunk-PVTSNNVI.js +288 -0
- package/Build/Workers/chunk-QFSSCLLZ.js +973 -0
- package/Build/Workers/chunk-QHPZH22L.js +241 -0
- package/Build/Workers/chunk-QIZDWZK6.js +301 -0
- package/Build/Workers/chunk-QV6DG2YX.js +1483 -0
- package/Build/Workers/chunk-QVLAFFJY.js +56 -0
- package/Build/Workers/{chunk-6YEE6JDR.js → chunk-R4FPNAZ2.js} +6 -6
- package/Build/Workers/chunk-R4K7EHOU.js +171 -0
- package/Build/Workers/chunk-R7JGHDD6.js +789 -0
- package/Build/Workers/chunk-RASQEYD4.js +1483 -0
- package/Build/Workers/chunk-RG4F5R57.js +454 -0
- package/Build/Workers/chunk-RW6ITX7Q.js +3820 -0
- package/Build/Workers/chunk-RYSQVJR6.js +398 -0
- package/Build/Workers/chunk-S6RJU5NM.js +1054 -0
- package/Build/Workers/chunk-SA2A2AN5.js +2342 -0
- package/Build/Workers/chunk-SDFHDNS4.js +147 -0
- package/Build/Workers/chunk-SF6K72D7.js +124 -0
- package/Build/Workers/chunk-SGRGNDOD.js +682 -0
- package/Build/Workers/{chunk-QRWGUWI6.js → chunk-SJYSIOEM.js} +11 -11
- package/Build/Workers/chunk-SM2CDCYF.js +198 -0
- package/Build/Workers/chunk-SMTGMFBL.js +97 -0
- package/Build/Workers/chunk-SS5ABQGY.js +102 -0
- package/Build/Workers/{chunk-IYOUHCZB.js → chunk-SXSP3JHS.js} +1 -1
- package/Build/Workers/chunk-T5QBPLE3.js +414 -0
- package/Build/Workers/chunk-TN35HP5B.js +1067 -0
- package/Build/Workers/chunk-TNWKJNUZ.js +454 -0
- package/Build/Workers/chunk-TOAF47AQ.js +102 -0
- package/Build/Workers/chunk-TQ4QCOXT.js +2719 -0
- package/Build/Workers/chunk-TSDSILQB.js +124 -0
- package/Build/Workers/chunk-TVZD72WJ.js +778 -0
- package/Build/Workers/chunk-U5LV3F3Z.js +1054 -0
- package/Build/Workers/chunk-UAZUP4I5.js +1992 -0
- package/Build/Workers/chunk-UEY73NRN.js +38 -0
- package/Build/Workers/chunk-UF46SZEZ.js +789 -0
- package/Build/Workers/chunk-UNRTMCET.js +398 -0
- package/Build/Workers/chunk-UTB7U3O6.js +1992 -0
- package/Build/Workers/chunk-UVO6COT2.js +352 -0
- package/Build/Workers/chunk-V46YGZE6.js +352 -0
- package/Build/Workers/chunk-VAL7DYNR.js +278 -0
- package/Build/Workers/chunk-VDGOCROW.js +57 -0
- package/Build/Workers/chunk-VFWSSBPT.js +511 -0
- package/Build/Workers/chunk-VVYMXI3I.js +1284 -0
- package/Build/Workers/chunk-VXWHPYQM.js +837 -0
- package/Build/Workers/chunk-VXYUBRSB.js +219 -0
- package/Build/Workers/chunk-VZLDLEWI.js +387 -0
- package/Build/Workers/{chunk-4S7IE3LB.js → chunk-W5OCKMPJ.js} +2 -2
- package/Build/Workers/chunk-WBSY7HDY.js +837 -0
- package/Build/Workers/chunk-WN3F4CVG.js +3201 -0
- package/Build/Workers/chunk-WPRUWXGV.js +693 -0
- package/Build/Workers/chunk-WTO2ERBP.js +414 -0
- package/Build/Workers/chunk-WVHMDVG4.js +959 -0
- package/Build/Workers/chunk-XCBZVTIV.js +280 -0
- package/Build/Workers/chunk-XDWCTQCZ.js +101 -0
- package/Build/Workers/chunk-XGA23TAX.js +73 -0
- package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
- package/Build/Workers/chunk-XLXSDIP5.js +973 -0
- package/Build/Workers/chunk-XQ3SKCMM.js +140 -0
- package/Build/Workers/chunk-XQH66YJC.js +147 -0
- package/Build/Workers/chunk-XTA7BXJG.js +682 -0
- package/Build/Workers/chunk-XTIDAFRS.js +476 -0
- package/Build/Workers/chunk-XUEDWBUD.js +682 -0
- package/Build/Workers/chunk-XYFLRH3H.js +124 -0
- package/Build/Workers/chunk-Y7JRTRTO.js +305 -0
- package/Build/Workers/chunk-Y7QSMDCJ.js +352 -0
- package/Build/Workers/chunk-YCB5TYTR.js +1483 -0
- package/Build/Workers/chunk-YEYOSTJX.js +219 -0
- package/Build/Workers/chunk-YGFVAGYF.js +630 -0
- package/Build/Workers/chunk-YIIACKQO.js +368 -0
- package/Build/Workers/chunk-YJGSP6PE.js +511 -0
- package/Build/Workers/{chunk-XZMBNNDX.js → chunk-YKU2Q3A2.js} +9 -9
- package/Build/Workers/chunk-Z4LR5EHE.js +454 -0
- package/Build/Workers/chunk-Z66EVE2A.js +44 -0
- package/Build/Workers/chunk-ZHIHHHTB.js +414 -0
- package/Build/Workers/chunk-ZMBHFYOX.js +1344 -0
- package/Build/Workers/chunk-ZNWHFSLE.js +171 -0
- package/Build/Workers/chunk-ZQLZG4IN.js +2342 -0
- package/Build/Workers/chunk-ZRTSMUZ2.js +414 -0
- package/Build/Workers/{chunk-MPZHGZU6.js → chunk-ZSGUV73H.js} +4 -4
- package/Build/Workers/chunk-ZZUVT5BM.js +476 -0
- package/Build/Workers/combineGeometry.js +24 -24
- package/Build/Workers/createBoxGeometry.js +18 -18
- package/Build/Workers/createBoxOutlineGeometry.js +16 -16
- package/Build/Workers/createCircleGeometry.js +26 -26
- package/Build/Workers/createCircleOutlineGeometry.js +19 -19
- package/Build/Workers/createCoplanarPolygonGeometry.js +35 -35
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
- package/Build/Workers/createCorridorGeometry.js +31 -33
- package/Build/Workers/createCorridorOutlineGeometry.js +29 -31
- package/Build/Workers/createCylinderGeometry.js +20 -20
- package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
- package/Build/Workers/createEllipseGeometry.js +26 -26
- package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
- package/Build/Workers/createEllipsoidGeometry.js +19 -19
- package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
- package/Build/Workers/createFrustumGeometry.js +18 -18
- package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
- package/Build/Workers/createGeometry.js +24 -24
- package/Build/Workers/createGroundPolylineGeometry.js +24 -24
- package/Build/Workers/createPlaneGeometry.js +16 -16
- package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
- package/Build/Workers/createPolygonGeometry.js +34 -34
- package/Build/Workers/createPolygonOutlineGeometry.js +31 -31
- package/Build/Workers/createPolylineGeometry.js +26 -26
- package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
- package/Build/Workers/createRectangleGeometry.js +27 -27
- package/Build/Workers/createRectangleOutlineGeometry.js +21 -21
- package/Build/Workers/createSimplePolylineGeometry.js +24 -24
- package/Build/Workers/createSphereGeometry.js +19 -19
- package/Build/Workers/createSphereOutlineGeometry.js +18 -18
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
- package/Build/Workers/createVectorTileGeometries.js +24 -24
- package/Build/Workers/createVectorTilePoints.js +13 -13
- package/Build/Workers/createVectorTilePolygons.js +22 -22
- package/Build/Workers/createVectorTilePolylines.js +14 -14
- package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
- package/Build/Workers/createVerticesFromHeightmap.js +22 -22
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
- package/Build/Workers/createWallGeometry.js +24 -24
- package/Build/Workers/createWallOutlineGeometry.js +24 -24
- package/Build/Workers/decodeDraco.js +10 -10
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +987 -2320
- package/Build/Workers/decodeI3S.js +10 -10
- package/Build/Workers/gaussianSplatSorter.js +4 -4
- package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
- package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
- package/Build/Workers/transcodeKTX2.js +6 -6
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
- package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
- package/Source/Core/BoundingRectangle.js +6 -8
- package/Source/Core/BoundingSphere.js +0 -3
- package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
- package/Source/Core/Color.js +1 -0
- package/Source/Core/CoplanarPolygonGeometry.js +2 -2
- package/Source/Core/CorridorGeometry.js +2 -4
- package/Source/Core/CorridorOutlineGeometry.js +1 -3
- package/Source/Core/EarthOrientationParameters.js +2 -2
- package/Source/Core/EllipseGeometryLibrary.js +2 -2
- package/Source/Core/EllipsoidGeodesic.js +3 -3
- package/Source/Core/EllipsoidRhumbLine.js +1 -1
- package/Source/Core/GroundPolylineGeometry.js +2 -2
- package/Source/Core/Heap.js +1 -1
- package/Source/Core/HermitePolynomialApproximation.js +215 -179
- package/Source/Core/InterpolationAlgorithm.js +58 -50
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/JulianDate.js +1 -1
- package/Source/Core/LagrangePolynomialApproximation.js +55 -52
- package/Source/Core/LinearApproximation.js +69 -66
- package/Source/Core/Math.js +59 -0
- package/Source/Core/Matrix2.js +2 -2
- package/Source/Core/Matrix3.js +2 -2
- package/Source/Core/OrthographicFrustum.js +1 -1
- package/Source/Core/PerspectiveFrustum.js +1 -1
- package/Source/Core/PolygonGeometry.js +2 -2
- package/Source/Core/PolygonGeometryLibrary.js +1 -1
- package/Source/Core/PolygonOutlineGeometry.js +1 -1
- package/Source/Core/PolylineGeometry.js +1 -1
- package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
- package/Source/Core/Rectangle.js +7 -1
- package/Source/Core/RectangleOutlineGeometry.js +1 -1
- package/Source/Core/SimplePolylineGeometry.js +1 -1
- package/Source/Core/TerrainEncoding.js +2 -2
- package/Source/Core/TerrainMesh.js +3 -3
- package/Source/Core/TerrainPicker.js +180 -168
- package/Source/Core/TimeIntervalCollection.js +1 -3
- package/Source/Core/Tipsify.js +1 -1
- package/Source/Core/Transforms.js +5 -1
- package/Source/Core/VectorPipeline.js +1117 -0
- package/Source/Core/VectorProvider.js +429 -0
- package/Source/Core/WallOutlineGeometry.js +1 -1
- package/Source/Core/getTimestamp.js +4 -2
- package/Source/Core/writeTextToCanvas.js +1 -0
- package/Source/DataSources/CompositeEntityCollection.js +0 -1
- package/Source/DataSources/CzmlDataSource.js +14 -0
- package/Source/DataSources/DataSourceDisplay.js +1 -1
- package/Source/DataSources/GeoJsonDataSource.js +0 -1
- package/Source/DataSources/GeometryVisualizer.js +1 -1
- package/Source/DataSources/KmlDataSource.js +529 -557
- package/Source/DataSources/PathGraphics.js +8 -1
- package/Source/DataSources/PathMode.js +27 -0
- package/Source/DataSources/PathVisualizer.js +298 -1
- package/Source/DataSources/PolylineVisualizer.js +1 -1
- package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
- package/Source/Renderer/AutomaticUniforms.js +23 -0
- package/Source/Renderer/Context.js +9 -3
- package/Source/Renderer/DrawCommand.js +22 -0
- package/Source/Renderer/Framebuffer.js +4 -0
- package/Source/Renderer/Pass.js +11 -10
- package/Source/Renderer/Texture.js +12 -1
- package/Source/Renderer/UniformState.js +7 -0
- package/Source/Renderer/VertexArray.js +1 -1
- package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/Billboard.js +2 -1
- package/Source/Scene/BillboardCollection.js +7 -3
- package/Source/Scene/BillboardTexture.js +5 -3
- package/Source/Scene/BufferPrimitiveCollection.js +27 -5
- package/Source/Scene/Camera.js +71 -5
- package/Source/Scene/Cesium3DTileOptimizations.js +4 -6
- package/Source/Scene/Cesium3DTileset.js +1 -1
- package/Source/Scene/ClippingPlaneCollection.js +4 -4
- package/Source/Scene/ClippingPolygon.js +2 -0
- package/Source/Scene/ClippingPolygonCollection.js +2 -2
- package/Source/Scene/Controllers/Controller.js +63 -0
- package/Source/Scene/Controllers/ControllerHost.js +78 -0
- package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
- package/Source/Scene/Controllers/MouseButton.js +32 -0
- package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
- package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
- package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
- package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
- package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
- package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
- package/Source/Scene/DerivedCommand.js +98 -0
- package/Source/Scene/EdgeFramebuffer.js +1 -5
- package/Source/Scene/Expression.js +6 -8
- package/Source/Scene/FrameState.js +17 -0
- package/Source/Scene/Globe.js +20 -0
- package/Source/Scene/GlobeDepth.js +27 -1
- package/Source/Scene/GlobeSurfaceShaderSet.js +511 -409
- package/Source/Scene/GlobeSurfaceTile.js +575 -398
- package/Source/Scene/GlobeSurfaceTileProvider.js +1382 -1151
- package/Source/Scene/GltfBufferViewLoader.js +3 -3
- package/Source/Scene/GltfLoader.js +33 -3
- package/Source/Scene/GltfLoaderUtil.js +20 -4
- package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +10 -0
- package/Source/Scene/GltfPipeline/removeUnusedElements.js +21 -11
- package/Source/Scene/GltfSpzLoader.js +1 -1
- package/Source/Scene/GltfVertexBufferLoader.js +6 -3
- package/Source/Scene/I3SDataProvider.js +1 -1
- package/Source/Scene/I3SLayer.js +1 -1
- package/Source/Scene/I3SNode.js +2 -2
- package/Source/Scene/ImageryLayer.js +2 -2
- package/Source/Scene/ImageryLayerCollection.js +190 -6
- package/Source/Scene/IonImageryProvider.js +1 -5
- package/Source/Scene/Label.js +4 -4
- package/Source/Scene/LabelCollection.js +1 -1
- package/Source/Scene/MVTDataProvider.js +2 -0
- package/Source/Scene/Material.js +1 -0
- package/Source/Scene/Model/B3dmLoader.js +1 -2
- package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +10 -8
- package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +4 -0
- package/Source/Scene/Model/I3dmLoader.js +1 -1
- package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
- package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
- package/Source/Scene/Model/Model.js +11 -10
- package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
- package/Source/Scene/Model/ModelDrawCommand.js +160 -16
- package/Source/Scene/Model/ModelDrawCommands.js +4 -0
- package/Source/Scene/Model/ModelSceneGraph.js +21 -0
- package/Source/Scene/Model/ModelUtility.js +1 -0
- package/Source/Scene/Model/PickingPipelineStage.js +29 -0
- package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
- package/Source/Scene/ModelComponents.js +71 -0
- package/Source/Scene/Picking.js +19 -3
- package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
- package/Source/Scene/PntsParser.js +1 -1
- package/Source/Scene/PolylineCollection.js +1 -1
- package/Source/Scene/PostProcessStage.js +4 -2
- package/Source/Scene/QuadtreePrimitive.js +3 -2
- package/Source/Scene/ResourceCache.js +7 -4
- package/Source/Scene/ResourceCacheKey.js +21 -18
- package/Source/Scene/Scene.js +203 -5
- package/Source/Scene/ScreenSpaceCameraController.js +1 -2
- package/Source/Scene/ShadowMap.js +9 -3
- package/Source/Scene/ShadowMapShader.js +50 -2
- package/Source/Scene/SnapFramebuffer.js +121 -0
- package/Source/Scene/Snapping.js +184 -0
- package/Source/Scene/TerrainFillMesh.js +3 -2
- package/Source/Scene/UrlTemplate3DTilesDataProvider.js +1 -1
- package/Source/Scene/Vector3DTileContent.js +2 -3
- package/Source/Scene/VectorGltf3DTileContent.js +23 -3
- package/Source/Scene/View.js +10 -8
- package/Source/Scene/VoxelTraversal.js +1 -1
- package/Source/Scene/createElevationBandMaterial.js +1 -1
- package/Source/Scene/findMeshoptExtension.js +23 -0
- package/Source/Scene/renderBufferPointCollection.js +14 -10
- package/Source/Scene/renderBufferPolygonCollection.js +10 -15
- package/Source/Scene/renderBufferPolylineCollection.js +121 -194
- package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
- package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
- package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
- package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
- package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
- package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
- package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
- package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
- package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
- package/Source/Shaders/GlobeFS.glsl +10 -5
- package/Source/Shaders/GlobeFS.js +9 -5
- package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
- package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
- package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
- package/Source/Shaders/Model/MaterialStageFS.js +8 -2
- package/Source/Shaders/Model/ModelFS.glsl +105 -0
- package/Source/Shaders/Model/ModelFS.js +105 -0
- package/Source/Shaders/VectorCommon.glsl +178 -0
- package/Source/Shaders/VectorCommon.js +75 -0
- package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
- package/Source/ThirdParty/zip-module.wasm +0 -0
- package/Source/Widget/CesiumWidget.js +30 -0
- package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
- package/Source/Workers/incrementallyBuildTerrainPicker.js +2 -0
- package/index.d.ts +825 -260
- package/index.js +29 -10
- package/package.json +4 -4
|
@@ -9,6 +9,7 @@ import RequestState from "../Core/RequestState.js";
|
|
|
9
9
|
import RequestType from "../Core/RequestType.js";
|
|
10
10
|
import TerrainEncoding from "../Core/TerrainEncoding.js";
|
|
11
11
|
import TileProviderError from "../Core/TileProviderError.js";
|
|
12
|
+
import VectorPipeline from "../Core/VectorPipeline.js";
|
|
12
13
|
import Buffer from "../Renderer/Buffer.js";
|
|
13
14
|
import BufferUsage from "../Renderer/BufferUsage.js";
|
|
14
15
|
import PixelDatatype from "../Renderer/PixelDatatype.js";
|
|
@@ -22,83 +23,104 @@ import ImageryState from "./ImageryState.js";
|
|
|
22
23
|
import QuadtreeTileLoadState from "./QuadtreeTileLoadState.js";
|
|
23
24
|
import TerrainState from "./TerrainState.js";
|
|
24
25
|
|
|
26
|
+
/** @import Context from "../Renderer/Context.js"; */
|
|
27
|
+
/** @import Ellipsoid from "../Core/Ellipsoid.js"; */
|
|
28
|
+
/** @import FrameState from "./FrameState.js"; */
|
|
29
|
+
/** @import HeightmapTerrainData from "../Core/HeightmapTerrainData.js"; */
|
|
30
|
+
/** @import ImageryLayerCollection from "./ImageryLayerCollection.js"; */
|
|
31
|
+
/** @import MapProjection from "../Core/MapProjection.js"; */
|
|
32
|
+
/** @import QuadtreePrimitive from "./QuadtreePrimitive.js"; */
|
|
33
|
+
/** @import QuadtreeTile from "./QuadtreeTile.js"; */
|
|
34
|
+
/** @import Ray from "../Core/Ray.js"; */
|
|
35
|
+
/** @import SceneMode from "./SceneMode.js"; */
|
|
36
|
+
/** @import TerrainMesh from "../Core/TerrainMesh.js"; */
|
|
37
|
+
/** @import TerrainProvider from "../Core/TerrainProvider.js"; */
|
|
38
|
+
/** @import TileBoundingRegion from "./TileBoundingRegion.js"; */
|
|
39
|
+
/** @import TileImagery from "./TileImagery.js"; */
|
|
40
|
+
/** @import VectorProvider, { VectorTileData } from "../Core/VectorProvider.js"; */
|
|
41
|
+
|
|
25
42
|
/**
|
|
26
43
|
* Contains additional information about a {@link QuadtreeTile} of the globe's surface, and
|
|
27
44
|
* encapsulates state transition logic for loading tiles.
|
|
28
45
|
*
|
|
29
|
-
* @constructor
|
|
30
|
-
* @alias GlobeSurfaceTile
|
|
31
46
|
* @private
|
|
32
47
|
*/
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
class GlobeSurfaceTile {
|
|
49
|
+
/** @type {Request} */
|
|
50
|
+
request;
|
|
51
|
+
|
|
52
|
+
constructor() {
|
|
53
|
+
/**
|
|
54
|
+
* The {@link TileImagery} attached to this tile.
|
|
55
|
+
* @type {TileImagery[]}
|
|
56
|
+
* @default []
|
|
57
|
+
*/
|
|
58
|
+
this.imagery = [];
|
|
59
|
+
|
|
60
|
+
/** @type {Texture} */
|
|
61
|
+
this.waterMaskTexture = undefined;
|
|
62
|
+
this.waterMaskTranslationAndScale = new Cartesian4(0.0, 0.0, 1.0, 1.0);
|
|
40
63
|
|
|
41
|
-
|
|
42
|
-
|
|
64
|
+
/** @type {HeightmapTerrainData} */
|
|
65
|
+
this.terrainData = undefined;
|
|
43
66
|
|
|
44
|
-
|
|
45
|
-
|
|
67
|
+
/** @type {VectorTileData} */
|
|
68
|
+
this.vectorData = undefined;
|
|
46
69
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
* but the `minimumHeight` and `maximumHeight` properties may be derived from the min/max of an ancestor tile
|
|
50
|
-
* and be quite loose-fitting and thus very poor for estimating distance.
|
|
51
|
-
* @type {TileBoundingRegion}
|
|
52
|
-
*/
|
|
53
|
-
this.tileBoundingRegion = undefined;
|
|
54
|
-
this.occludeePointInScaledSpace = new Cartesian3();
|
|
55
|
-
this.boundingVolumeSourceTile = undefined;
|
|
56
|
-
this.boundingVolumeIsFromMesh = false;
|
|
70
|
+
/** @type {VertexArray} */
|
|
71
|
+
this.vertexArray = undefined;
|
|
57
72
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
73
|
+
/**
|
|
74
|
+
* A bounding region used to estimate distance to the tile. The horizontal bounds are always tight-fitting,
|
|
75
|
+
* but the `minimumHeight` and `maximumHeight` properties may be derived from the min/max of an ancestor tile
|
|
76
|
+
* and be quite loose-fitting and thus very poor for estimating distance.
|
|
77
|
+
* @type {TileBoundingRegion}
|
|
78
|
+
*/
|
|
79
|
+
this.tileBoundingRegion = undefined;
|
|
80
|
+
this.occludeePointInScaledSpace = new Cartesian3();
|
|
81
|
+
this.boundingVolumeSourceTile = undefined;
|
|
82
|
+
this.boundingVolumeIsFromMesh = false;
|
|
61
83
|
|
|
62
|
-
|
|
84
|
+
this.terrainState = TerrainState.UNLOADED;
|
|
85
|
+
this.mesh = undefined;
|
|
86
|
+
this.fill = undefined;
|
|
63
87
|
|
|
64
|
-
|
|
65
|
-
this.isClipped = true;
|
|
88
|
+
this.pickBoundingSphere = new BoundingSphere();
|
|
66
89
|
|
|
67
|
-
|
|
68
|
-
|
|
90
|
+
this.surfaceShader = undefined;
|
|
91
|
+
this.isClipped = true;
|
|
92
|
+
|
|
93
|
+
this.clippedByBoundaries = false;
|
|
94
|
+
}
|
|
69
95
|
|
|
70
|
-
Object.defineProperties(GlobeSurfaceTile.prototype, {
|
|
71
96
|
/**
|
|
72
97
|
* Gets a value indicating whether or not this tile is eligible to be unloaded.
|
|
73
98
|
* Typically, a tile is ineligible to be unloaded while an asynchronous operation,
|
|
74
99
|
* such as a request for data, is in progress on it. A tile will never be
|
|
75
100
|
* unloaded while it is needed for rendering, regardless of the value of this
|
|
76
101
|
* property.
|
|
77
|
-
* @memberof GlobeSurfaceTile.prototype
|
|
78
102
|
* @type {boolean}
|
|
79
103
|
*/
|
|
80
|
-
eligibleForUnloading
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
104
|
+
get eligibleForUnloading() {
|
|
105
|
+
// Do not remove tiles that are transitioning or that have
|
|
106
|
+
// imagery that is transitioning.
|
|
107
|
+
const terrainState = this.terrainState;
|
|
108
|
+
const loadingIsTransitioning =
|
|
109
|
+
terrainState === TerrainState.RECEIVING ||
|
|
110
|
+
terrainState === TerrainState.TRANSFORMING;
|
|
111
|
+
|
|
112
|
+
let shouldRemoveTile = !loadingIsTransitioning;
|
|
113
|
+
|
|
114
|
+
const imagery = this.imagery;
|
|
115
|
+
for (let i = 0, len = imagery.length; shouldRemoveTile && i < len; ++i) {
|
|
116
|
+
const tileImagery = imagery[i];
|
|
117
|
+
shouldRemoveTile =
|
|
118
|
+
!defined(tileImagery.loadingImagery) ||
|
|
119
|
+
tileImagery.loadingImagery.state !== ImageryState.TRANSITIONING;
|
|
120
|
+
}
|
|
98
121
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
},
|
|
122
|
+
return shouldRemoveTile;
|
|
123
|
+
}
|
|
102
124
|
|
|
103
125
|
/**
|
|
104
126
|
* Gets the {@link TerrainMesh} that is used for rendering this tile, if any.
|
|
@@ -107,224 +129,455 @@ Object.defineProperties(GlobeSurfaceTile.prototype, {
|
|
|
107
129
|
* {@link TerrainFillMesh#mesh} property of the {@link GlobeSurfaceTile#fill}.
|
|
108
130
|
* If there is no fill, it returns undefined.
|
|
109
131
|
*
|
|
110
|
-
* @memberof GlobeSurfaceTile.prototype
|
|
111
132
|
* @type {TerrainMesh}
|
|
112
133
|
*/
|
|
113
|
-
renderedMesh
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
return undefined;
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
GlobeSurfaceTile.prototype.pick = function (
|
|
126
|
-
ray,
|
|
127
|
-
mode,
|
|
128
|
-
projection,
|
|
129
|
-
cullBackFaces,
|
|
130
|
-
result,
|
|
131
|
-
) {
|
|
132
|
-
if (!defined(this.renderedMesh)) {
|
|
134
|
+
get renderedMesh() {
|
|
135
|
+
if (defined(this.vertexArray)) {
|
|
136
|
+
return this.mesh;
|
|
137
|
+
} else if (defined(this.fill)) {
|
|
138
|
+
return this.fill.mesh;
|
|
139
|
+
}
|
|
133
140
|
return undefined;
|
|
134
141
|
}
|
|
135
|
-
const value = this.renderedMesh.pick(ray, cullBackFaces, mode, projection);
|
|
136
|
-
return Cartesian3.clone(value, result);
|
|
137
|
-
};
|
|
138
142
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
143
|
+
/**
|
|
144
|
+
* @param {Ray} ray
|
|
145
|
+
* @param {SceneMode} mode
|
|
146
|
+
* @param {MapProjection} projection
|
|
147
|
+
* @param {boolean} cullBackFaces
|
|
148
|
+
* @param {Cartesian3} result
|
|
149
|
+
*/
|
|
150
|
+
pick(ray, mode, projection, cullBackFaces, result) {
|
|
151
|
+
if (!defined(this.renderedMesh)) {
|
|
152
|
+
return undefined;
|
|
144
153
|
}
|
|
145
|
-
this.
|
|
154
|
+
const value = this.renderedMesh.pick(ray, cullBackFaces, mode, projection);
|
|
155
|
+
return Cartesian3.clone(value, result);
|
|
146
156
|
}
|
|
147
157
|
|
|
148
|
-
|
|
158
|
+
freeResources() {
|
|
159
|
+
if (defined(this.waterMaskTexture)) {
|
|
160
|
+
--this.waterMaskTexture.referenceCount;
|
|
161
|
+
if (this.waterMaskTexture.referenceCount === 0) {
|
|
162
|
+
this.waterMaskTexture.destroy();
|
|
163
|
+
}
|
|
164
|
+
this.waterMaskTexture = undefined;
|
|
165
|
+
}
|
|
149
166
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
167
|
+
if (defined(this.vectorData)) {
|
|
168
|
+
VectorPipeline.freeResources(this.vectorData);
|
|
169
|
+
this.vectorData = undefined;
|
|
170
|
+
}
|
|
153
171
|
|
|
154
|
-
|
|
155
|
-
for (let i = 0, len = imageryList.length; i < len; ++i) {
|
|
156
|
-
imageryList[i].freeResources();
|
|
157
|
-
}
|
|
158
|
-
this.imagery.length = 0;
|
|
172
|
+
this.terrainData = undefined;
|
|
159
173
|
|
|
160
|
-
|
|
161
|
-
|
|
174
|
+
this.terrainState = TerrainState.UNLOADED;
|
|
175
|
+
this.mesh = undefined;
|
|
176
|
+
this.fill = this.fill && this.fill.destroy();
|
|
162
177
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
};
|
|
178
|
+
const imageryList = this.imagery;
|
|
179
|
+
for (let i = 0, len = imageryList.length; i < len; ++i) {
|
|
180
|
+
imageryList[i].freeResources();
|
|
181
|
+
}
|
|
182
|
+
this.imagery.length = 0;
|
|
169
183
|
|
|
170
|
-
|
|
171
|
-
tile,
|
|
172
|
-
terrainProvider,
|
|
173
|
-
imageryLayerCollection,
|
|
174
|
-
) {
|
|
175
|
-
let surfaceTile = tile.data;
|
|
176
|
-
if (!defined(surfaceTile)) {
|
|
177
|
-
surfaceTile = tile.data = new GlobeSurfaceTile();
|
|
184
|
+
this.freeVertexArray();
|
|
178
185
|
}
|
|
179
186
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
187
|
+
freeVertexArray() {
|
|
188
|
+
GlobeSurfaceTile._freeVertexArray(this.vertexArray);
|
|
189
|
+
this.vertexArray = undefined;
|
|
190
|
+
GlobeSurfaceTile._freeVertexArray(this.wireframeVertexArray);
|
|
191
|
+
this.wireframeVertexArray = undefined;
|
|
183
192
|
}
|
|
184
|
-
};
|
|
185
193
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
/**
|
|
195
|
+
* @param {QuadtreeTile} tile
|
|
196
|
+
* @param {TerrainProvider} terrainProvider
|
|
197
|
+
* @param {VectorProvider} vectorProvider
|
|
198
|
+
* @param {ImageryLayerCollection} imageryLayerCollection
|
|
199
|
+
*/
|
|
200
|
+
static initialize(
|
|
201
|
+
tile,
|
|
202
|
+
terrainProvider,
|
|
203
|
+
vectorProvider,
|
|
204
|
+
imageryLayerCollection,
|
|
205
|
+
) {
|
|
206
|
+
if (!defined(tile.data)) {
|
|
207
|
+
tile.data = new GlobeSurfaceTile();
|
|
208
|
+
}
|
|
196
209
|
|
|
197
|
-
|
|
210
|
+
if (tile.state === QuadtreeTileLoadState.START) {
|
|
211
|
+
prepareNewTile(
|
|
212
|
+
tile,
|
|
213
|
+
terrainProvider,
|
|
214
|
+
vectorProvider,
|
|
215
|
+
imageryLayerCollection,
|
|
216
|
+
);
|
|
217
|
+
tile.state = QuadtreeTileLoadState.LOADING;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
198
220
|
|
|
199
|
-
|
|
200
|
-
|
|
221
|
+
/**
|
|
222
|
+
* @param {QuadtreeTile} tile
|
|
223
|
+
* @param {FrameState} frameState
|
|
224
|
+
* @param {TerrainProvider} terrainProvider
|
|
225
|
+
* @param {VectorProvider} vectorProvider
|
|
226
|
+
* @param {ImageryLayerCollection} imageryLayerCollection
|
|
227
|
+
* @param {QuadtreePrimitive} quadtree
|
|
228
|
+
* @param {*} vertexArraysToDestroy
|
|
229
|
+
* @param {*} terrainOnly
|
|
230
|
+
*/
|
|
231
|
+
static processStateMachine(
|
|
232
|
+
tile,
|
|
233
|
+
frameState,
|
|
234
|
+
terrainProvider,
|
|
235
|
+
vectorProvider,
|
|
236
|
+
imageryLayerCollection,
|
|
237
|
+
quadtree,
|
|
238
|
+
vertexArraysToDestroy,
|
|
239
|
+
terrainOnly,
|
|
240
|
+
) {
|
|
241
|
+
GlobeSurfaceTile.initialize(
|
|
201
242
|
tile,
|
|
202
|
-
frameState,
|
|
203
243
|
terrainProvider,
|
|
244
|
+
vectorProvider,
|
|
204
245
|
imageryLayerCollection,
|
|
205
|
-
quadtree,
|
|
206
|
-
vertexArraysToDestroy,
|
|
207
246
|
);
|
|
208
|
-
}
|
|
209
247
|
|
|
210
|
-
|
|
211
|
-
// we're certain that the terrain tiles are actually visible, though. We'll load terrainOnly
|
|
212
|
-
// in these scenarios:
|
|
213
|
-
// * our bounding volume isn't accurate so we're not certain this tile is really visible (see GlobeSurfaceTileProvider#loadTile).
|
|
214
|
-
// * we want to upsample from this tile but don't plan to render it (see processTerrainStateMachine).
|
|
215
|
-
if (terrainOnly) {
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
248
|
+
const surfaceTile = tile.data;
|
|
218
249
|
|
|
219
|
-
|
|
250
|
+
if (tile.state === QuadtreeTileLoadState.LOADING) {
|
|
251
|
+
processTerrainStateMachine(
|
|
252
|
+
tile,
|
|
253
|
+
frameState,
|
|
254
|
+
terrainProvider,
|
|
255
|
+
vectorProvider,
|
|
256
|
+
imageryLayerCollection,
|
|
257
|
+
quadtree,
|
|
258
|
+
vertexArraysToDestroy,
|
|
259
|
+
);
|
|
260
|
+
}
|
|
220
261
|
|
|
221
|
-
|
|
222
|
-
|
|
262
|
+
// From here down we're loading imagery, not terrain. We don't want to load imagery until
|
|
263
|
+
// we're certain that the terrain tiles are actually visible, though. We'll load terrainOnly
|
|
264
|
+
// in these scenarios:
|
|
265
|
+
// * our bounding volume isn't accurate so we're not certain this tile is really visible (see GlobeSurfaceTileProvider#loadTile).
|
|
266
|
+
// * we want to upsample from this tile but don't plan to render it (see processTerrainStateMachine).
|
|
267
|
+
if (terrainOnly) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
223
270
|
|
|
224
|
-
|
|
225
|
-
const isTerrainDoneLoading = surfaceTile.terrainState === TerrainState.READY;
|
|
271
|
+
const wasAlreadyRenderable = tile.renderable;
|
|
226
272
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
tile.upsampledFromParent =
|
|
230
|
-
defined(surfaceTile.terrainData) &&
|
|
231
|
-
surfaceTile.terrainData.wasCreatedByUpsampling();
|
|
273
|
+
// The terrain is renderable as soon as we have a valid vertex array.
|
|
274
|
+
tile.renderable = defined(surfaceTile.vertexArray);
|
|
232
275
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
276
|
+
// But it's not done loading until it's in the READY state.
|
|
277
|
+
const isTerrainDoneLoading =
|
|
278
|
+
surfaceTile.terrainState === TerrainState.READY;
|
|
279
|
+
|
|
280
|
+
// If this tile's terrain and imagery are just upsampled from its parent, mark the tile as
|
|
281
|
+
// upsampled only. We won't refine a tile if its four children are upsampled only.
|
|
282
|
+
tile.upsampledFromParent =
|
|
283
|
+
defined(surfaceTile.terrainData) &&
|
|
284
|
+
surfaceTile.terrainData.wasCreatedByUpsampling();
|
|
285
|
+
|
|
286
|
+
const isImageryDoneLoading = surfaceTile.processImagery(
|
|
287
|
+
tile,
|
|
288
|
+
terrainProvider,
|
|
289
|
+
frameState,
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
if (isTerrainDoneLoading && isImageryDoneLoading) {
|
|
293
|
+
const callbacks = tile._loadedCallbacks;
|
|
294
|
+
const newCallbacks = {};
|
|
295
|
+
for (const layerId in callbacks) {
|
|
296
|
+
if (callbacks.hasOwnProperty(layerId)) {
|
|
297
|
+
if (!callbacks[layerId](tile)) {
|
|
298
|
+
newCallbacks[layerId] = callbacks[layerId];
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
tile._loadedCallbacks = newCallbacks;
|
|
303
|
+
|
|
304
|
+
tile.state = QuadtreeTileLoadState.DONE;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Once a tile is renderable, it stays renderable, because doing otherwise would
|
|
308
|
+
// cause detail (or maybe even the entire globe) to vanish when adding a new
|
|
309
|
+
// imagery layer. `GlobeSurfaceTileProvider._onLayerAdded` sets renderable to
|
|
310
|
+
// false for all affected tiles that are not currently being rendered.
|
|
311
|
+
if (wasAlreadyRenderable) {
|
|
312
|
+
tile.renderable = true;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* @param {QuadtreeTile} tile
|
|
318
|
+
* @param {TerrainProvider} terrainProvider
|
|
319
|
+
* @param {FrameState} frameState
|
|
320
|
+
* @param {boolean} skipLoading
|
|
321
|
+
*/
|
|
322
|
+
processImagery(tile, terrainProvider, frameState, skipLoading) {
|
|
323
|
+
const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
|
|
324
|
+
let isUpsampledOnly = tile.upsampledFromParent;
|
|
325
|
+
let isAnyTileLoaded = false;
|
|
326
|
+
let isDoneLoading = true;
|
|
327
|
+
|
|
328
|
+
// Transition imagery states
|
|
329
|
+
const tileImageryCollection = surfaceTile.imagery;
|
|
330
|
+
let i, len;
|
|
331
|
+
for (i = 0, len = tileImageryCollection.length; i < len; ++i) {
|
|
332
|
+
const tileImagery = tileImageryCollection[i];
|
|
333
|
+
if (!defined(tileImagery.loadingImagery)) {
|
|
334
|
+
isUpsampledOnly = false;
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
238
337
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
338
|
+
if (tileImagery.loadingImagery.state === ImageryState.PLACEHOLDER) {
|
|
339
|
+
const imageryLayer = tileImagery.loadingImagery.imageryLayer;
|
|
340
|
+
if (imageryLayer.ready) {
|
|
341
|
+
// Remove the placeholder and add the actual skeletons (if any)
|
|
342
|
+
// at the same position. Then continue the loop at the same index.
|
|
343
|
+
tileImagery.freeResources();
|
|
344
|
+
tileImageryCollection.splice(i, 1);
|
|
345
|
+
imageryLayer._createTileImagerySkeletons(tile, terrainProvider, i);
|
|
346
|
+
--i;
|
|
347
|
+
len = tileImageryCollection.length;
|
|
348
|
+
continue;
|
|
349
|
+
} else {
|
|
350
|
+
isUpsampledOnly = false;
|
|
246
351
|
}
|
|
247
352
|
}
|
|
353
|
+
|
|
354
|
+
const thisTileDoneLoading = tileImagery.processStateMachine(
|
|
355
|
+
tile,
|
|
356
|
+
frameState,
|
|
357
|
+
skipLoading,
|
|
358
|
+
);
|
|
359
|
+
isDoneLoading = isDoneLoading && thisTileDoneLoading;
|
|
360
|
+
|
|
361
|
+
// The imagery is renderable as soon as we have any renderable imagery for this region.
|
|
362
|
+
isAnyTileLoaded =
|
|
363
|
+
isAnyTileLoaded ||
|
|
364
|
+
thisTileDoneLoading ||
|
|
365
|
+
defined(tileImagery.readyImagery);
|
|
366
|
+
|
|
367
|
+
isUpsampledOnly =
|
|
368
|
+
isUpsampledOnly &&
|
|
369
|
+
defined(tileImagery.loadingImagery) &&
|
|
370
|
+
(tileImagery.loadingImagery.state === ImageryState.FAILED ||
|
|
371
|
+
tileImagery.loadingImagery.state === ImageryState.INVALID);
|
|
248
372
|
}
|
|
249
|
-
tile._loadedCallbacks = newCallbacks;
|
|
250
373
|
|
|
251
|
-
tile.
|
|
374
|
+
tile.upsampledFromParent = isUpsampledOnly;
|
|
375
|
+
|
|
376
|
+
// Allow rendering if any available layers are loaded
|
|
377
|
+
tile.renderable = tile.renderable && (isAnyTileLoaded || isDoneLoading);
|
|
378
|
+
|
|
379
|
+
return isDoneLoading;
|
|
252
380
|
}
|
|
253
381
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
382
|
+
/**
|
|
383
|
+
* @param {Ellipsoid} ellipsoid
|
|
384
|
+
* @param {FrameState} frameState
|
|
385
|
+
*/
|
|
386
|
+
addGeodeticSurfaceNormals(ellipsoid, frameState) {
|
|
387
|
+
toggleGeodeticSurfaceNormals(this, true, ellipsoid, frameState);
|
|
260
388
|
}
|
|
261
|
-
};
|
|
262
389
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
frameState
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
isUpsampledOnly = false;
|
|
281
|
-
continue;
|
|
390
|
+
/**
|
|
391
|
+
* @param {FrameState} frameState
|
|
392
|
+
*/
|
|
393
|
+
removeGeodeticSurfaceNormals(frameState) {
|
|
394
|
+
toggleGeodeticSurfaceNormals(this, false, undefined, frameState);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* @param {QuadtreeTile} tile
|
|
399
|
+
* @param {FrameState} frameState
|
|
400
|
+
* @param {QuadtreePrimitive} quadtree
|
|
401
|
+
*/
|
|
402
|
+
updateExaggeration(tile, frameState, quadtree) {
|
|
403
|
+
const surfaceTile = this;
|
|
404
|
+
const mesh = surfaceTile.renderedMesh;
|
|
405
|
+
if (mesh === undefined) {
|
|
406
|
+
return;
|
|
282
407
|
}
|
|
283
408
|
|
|
284
|
-
if
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
409
|
+
// Check the tile's terrain encoding to see if it has been exaggerated yet
|
|
410
|
+
const exaggeration = frameState.verticalExaggeration;
|
|
411
|
+
const exaggerationRelativeHeight =
|
|
412
|
+
frameState.verticalExaggerationRelativeHeight;
|
|
413
|
+
const hasExaggerationScale = exaggeration !== 1.0;
|
|
414
|
+
|
|
415
|
+
const encoding = mesh.encoding;
|
|
416
|
+
const encodingExaggerationScaleChanged =
|
|
417
|
+
encoding.exaggeration !== exaggeration;
|
|
418
|
+
const encodingRelativeHeightChanged =
|
|
419
|
+
encoding.exaggerationRelativeHeight !== exaggerationRelativeHeight;
|
|
420
|
+
const exaggerationChanged =
|
|
421
|
+
encodingExaggerationScaleChanged || encodingRelativeHeightChanged;
|
|
422
|
+
|
|
423
|
+
if (exaggerationChanged) {
|
|
424
|
+
// Turning exaggeration scale on/off requires adding or removing geodetic surface normals
|
|
425
|
+
// Relative height only translates, so it has no effect on normals
|
|
426
|
+
if (encodingExaggerationScaleChanged) {
|
|
427
|
+
if (hasExaggerationScale && !encoding.hasGeodeticSurfaceNormals) {
|
|
428
|
+
const ellipsoid = tile.tilingScheme.ellipsoid;
|
|
429
|
+
surfaceTile.addGeodeticSurfaceNormals(ellipsoid, frameState);
|
|
430
|
+
} else if (
|
|
431
|
+
!hasExaggerationScale &&
|
|
432
|
+
encoding.hasGeodeticSurfaceNormals
|
|
433
|
+
) {
|
|
434
|
+
surfaceTile.removeGeodeticSurfaceNormals(frameState);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
encoding.exaggeration = exaggeration;
|
|
439
|
+
encoding.exaggerationRelativeHeight = exaggerationRelativeHeight;
|
|
440
|
+
|
|
441
|
+
// Notify the quadtree that this tile's height has changed
|
|
442
|
+
if (quadtree !== undefined) {
|
|
443
|
+
quadtree._tileToUpdateHeights.push(tile);
|
|
444
|
+
const customData = tile.customData;
|
|
445
|
+
for (const data of customData) {
|
|
446
|
+
// Restart the level so that a height update is triggered
|
|
447
|
+
data.level = -1;
|
|
448
|
+
}
|
|
297
449
|
}
|
|
450
|
+
|
|
451
|
+
mesh.updateExaggeration(exaggeration, exaggerationRelativeHeight);
|
|
298
452
|
}
|
|
453
|
+
}
|
|
299
454
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
455
|
+
/**
|
|
456
|
+
* @param {SceneMode} mode
|
|
457
|
+
*/
|
|
458
|
+
updateSceneMode(mode) {
|
|
459
|
+
const surfaceTile = this;
|
|
460
|
+
const mesh = surfaceTile.renderedMesh;
|
|
461
|
+
if (mesh === undefined) {
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
mesh.updateSceneMode(mode);
|
|
466
|
+
}
|
|
306
467
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
468
|
+
/**
|
|
469
|
+
* @param {Context} context
|
|
470
|
+
* @param {TerrainMesh} mesh
|
|
471
|
+
*/
|
|
472
|
+
static _createVertexArrayForMesh(context, mesh) {
|
|
473
|
+
const typedArray = mesh.vertices;
|
|
474
|
+
const buffer = Buffer.createVertexBuffer({
|
|
475
|
+
context: context,
|
|
476
|
+
typedArray: typedArray,
|
|
477
|
+
usage: BufferUsage.STATIC_DRAW,
|
|
478
|
+
});
|
|
479
|
+
const attributes = mesh.encoding.getAttributes(buffer);
|
|
480
|
+
|
|
481
|
+
const indexBuffers = mesh.indices.indexBuffers || {};
|
|
482
|
+
let indexBuffer = indexBuffers[context.id];
|
|
483
|
+
if (!defined(indexBuffer) || indexBuffer.isDestroyed()) {
|
|
484
|
+
const indices = mesh.indices;
|
|
485
|
+
indexBuffer = Buffer.createIndexBuffer({
|
|
486
|
+
context: context,
|
|
487
|
+
typedArray: indices,
|
|
488
|
+
usage: BufferUsage.STATIC_DRAW,
|
|
489
|
+
// @ts-expect-error https://github.com/CesiumGS/cesium/issues/13420
|
|
490
|
+
indexDatatype: IndexDatatype.fromSizeInBytes(indices.BYTES_PER_ELEMENT),
|
|
491
|
+
});
|
|
492
|
+
indexBuffer.vertexArrayDestroyable = false;
|
|
493
|
+
indexBuffer.referenceCount = 1;
|
|
494
|
+
indexBuffers[context.id] = indexBuffer;
|
|
495
|
+
mesh.indices.indexBuffers = indexBuffers;
|
|
496
|
+
} else {
|
|
497
|
+
++indexBuffer.referenceCount;
|
|
498
|
+
}
|
|
312
499
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
500
|
+
return new VertexArray({
|
|
501
|
+
context: context,
|
|
502
|
+
attributes: attributes,
|
|
503
|
+
indexBuffer: indexBuffer,
|
|
504
|
+
});
|
|
318
505
|
}
|
|
319
506
|
|
|
320
|
-
|
|
507
|
+
/**
|
|
508
|
+
* @param {VertexArray} vertexArray
|
|
509
|
+
*/
|
|
510
|
+
static _freeVertexArray(vertexArray) {
|
|
511
|
+
if (defined(vertexArray)) {
|
|
512
|
+
// @ts-expect-error Missing types.
|
|
513
|
+
const indexBuffer = vertexArray.indexBuffer;
|
|
321
514
|
|
|
322
|
-
|
|
323
|
-
|
|
515
|
+
if (!vertexArray.isDestroyed()) {
|
|
516
|
+
vertexArray.destroy();
|
|
517
|
+
}
|
|
324
518
|
|
|
325
|
-
|
|
326
|
-
|
|
519
|
+
if (
|
|
520
|
+
defined(indexBuffer) &&
|
|
521
|
+
!indexBuffer.isDestroyed() &&
|
|
522
|
+
defined(indexBuffer.referenceCount)
|
|
523
|
+
) {
|
|
524
|
+
--indexBuffer.referenceCount;
|
|
525
|
+
if (indexBuffer.referenceCount === 0) {
|
|
526
|
+
indexBuffer.destroy();
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* @param {QuadtreeTile} tile
|
|
534
|
+
*/
|
|
535
|
+
_findAncestorTileWithTerrainData(tile) {
|
|
536
|
+
let sourceTile = tile.parent;
|
|
537
|
+
|
|
538
|
+
while (
|
|
539
|
+
defined(sourceTile) &&
|
|
540
|
+
(!defined(sourceTile.data) ||
|
|
541
|
+
!defined(sourceTile.data.terrainData) ||
|
|
542
|
+
sourceTile.data.terrainData.wasCreatedByUpsampling())
|
|
543
|
+
) {
|
|
544
|
+
sourceTile = sourceTile.parent;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
return sourceTile;
|
|
548
|
+
}
|
|
327
549
|
|
|
550
|
+
/**
|
|
551
|
+
* @param {QuadtreeTile} tile
|
|
552
|
+
* @param {QuadtreeTile} sourceTile
|
|
553
|
+
* @param {Cartesian4} result
|
|
554
|
+
*/
|
|
555
|
+
_computeWaterMaskTranslationAndScale(tile, sourceTile, result) {
|
|
556
|
+
const sourceTileRectangle = sourceTile.rectangle;
|
|
557
|
+
const tileRectangle = tile.rectangle;
|
|
558
|
+
const tileWidth = tileRectangle.width;
|
|
559
|
+
const tileHeight = tileRectangle.height;
|
|
560
|
+
|
|
561
|
+
const scaleX = tileWidth / sourceTileRectangle.width;
|
|
562
|
+
const scaleY = tileHeight / sourceTileRectangle.height;
|
|
563
|
+
result.x =
|
|
564
|
+
(scaleX * (tileRectangle.west - sourceTileRectangle.west)) / tileWidth;
|
|
565
|
+
result.y =
|
|
566
|
+
(scaleY * (tileRectangle.south - sourceTileRectangle.south)) / tileHeight;
|
|
567
|
+
result.z = scaleX;
|
|
568
|
+
result.w = scaleY;
|
|
569
|
+
|
|
570
|
+
return result;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* @param {GlobeSurfaceTile} surfaceTile
|
|
576
|
+
* @param {boolean} enabled
|
|
577
|
+
* @param {Ellipsoid} ellipsoid
|
|
578
|
+
* @param {FrameState} frameState
|
|
579
|
+
* @ignore
|
|
580
|
+
*/
|
|
328
581
|
function toggleGeodeticSurfaceNormals(
|
|
329
582
|
surfaceTile,
|
|
330
583
|
enabled,
|
|
@@ -376,85 +629,22 @@ function toggleGeodeticSurfaceNormals(
|
|
|
376
629
|
surfaceTile.wireframeVertexArray = undefined;
|
|
377
630
|
}
|
|
378
631
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
frameState,
|
|
388
|
-
) {
|
|
389
|
-
toggleGeodeticSurfaceNormals(this, false, undefined, frameState);
|
|
390
|
-
};
|
|
391
|
-
|
|
392
|
-
GlobeSurfaceTile.prototype.updateExaggeration = function (
|
|
632
|
+
/**
|
|
633
|
+
* @param {QuadtreeTile} tile
|
|
634
|
+
* @param {TerrainProvider} terrainProvider
|
|
635
|
+
* @param {VectorProvider} vectorProvider
|
|
636
|
+
* @param {ImageryLayerCollection} imageryLayerCollection
|
|
637
|
+
* @ignore
|
|
638
|
+
*/
|
|
639
|
+
function prepareNewTile(
|
|
393
640
|
tile,
|
|
394
|
-
|
|
395
|
-
|
|
641
|
+
terrainProvider,
|
|
642
|
+
vectorProvider,
|
|
643
|
+
imageryLayerCollection,
|
|
396
644
|
) {
|
|
397
|
-
|
|
398
|
-
const mesh = surfaceTile.renderedMesh;
|
|
399
|
-
if (mesh === undefined) {
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
// Check the tile's terrain encoding to see if it has been exaggerated yet
|
|
404
|
-
const exaggeration = frameState.verticalExaggeration;
|
|
405
|
-
const exaggerationRelativeHeight =
|
|
406
|
-
frameState.verticalExaggerationRelativeHeight;
|
|
407
|
-
const hasExaggerationScale = exaggeration !== 1.0;
|
|
408
|
-
|
|
409
|
-
const encoding = mesh.encoding;
|
|
410
|
-
const encodingExaggerationScaleChanged =
|
|
411
|
-
encoding.exaggeration !== exaggeration;
|
|
412
|
-
const encodingRelativeHeightChanged =
|
|
413
|
-
encoding.exaggerationRelativeHeight !== exaggerationRelativeHeight;
|
|
414
|
-
const exaggerationChanged =
|
|
415
|
-
encodingExaggerationScaleChanged || encodingRelativeHeightChanged;
|
|
416
|
-
|
|
417
|
-
if (exaggerationChanged) {
|
|
418
|
-
// Turning exaggeration scale on/off requires adding or removing geodetic surface normals
|
|
419
|
-
// Relative height only translates, so it has no effect on normals
|
|
420
|
-
if (encodingExaggerationScaleChanged) {
|
|
421
|
-
if (hasExaggerationScale && !encoding.hasGeodeticSurfaceNormals) {
|
|
422
|
-
const ellipsoid = tile.tilingScheme.ellipsoid;
|
|
423
|
-
surfaceTile.addGeodeticSurfaceNormals(ellipsoid, frameState);
|
|
424
|
-
} else if (!hasExaggerationScale && encoding.hasGeodeticSurfaceNormals) {
|
|
425
|
-
surfaceTile.removeGeodeticSurfaceNormals(frameState);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
encoding.exaggeration = exaggeration;
|
|
430
|
-
encoding.exaggerationRelativeHeight = exaggerationRelativeHeight;
|
|
431
|
-
|
|
432
|
-
// Notify the quadtree that this tile's height has changed
|
|
433
|
-
if (quadtree !== undefined) {
|
|
434
|
-
quadtree._tileToUpdateHeights.push(tile);
|
|
435
|
-
const customData = tile.customData;
|
|
436
|
-
for (const data of customData) {
|
|
437
|
-
// Restart the level so that a height update is triggered
|
|
438
|
-
data.level = -1;
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
mesh.updateExaggeration(exaggeration, exaggerationRelativeHeight);
|
|
443
|
-
}
|
|
444
|
-
};
|
|
445
|
-
|
|
446
|
-
GlobeSurfaceTile.prototype.updateSceneMode = function (mode) {
|
|
447
|
-
const surfaceTile = this;
|
|
448
|
-
const mesh = surfaceTile.renderedMesh;
|
|
449
|
-
if (mesh === undefined) {
|
|
450
|
-
return;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
mesh.updateSceneMode(mode);
|
|
454
|
-
};
|
|
455
|
-
|
|
456
|
-
function prepareNewTile(tile, terrainProvider, imageryLayerCollection) {
|
|
645
|
+
/** @type {boolean} */
|
|
457
646
|
let available = terrainProvider.getTileDataAvailable(
|
|
647
|
+
// @ts-expect-error Missing types.
|
|
458
648
|
tile.x,
|
|
459
649
|
tile.y,
|
|
460
650
|
tile.level,
|
|
@@ -463,7 +653,7 @@ function prepareNewTile(tile, terrainProvider, imageryLayerCollection) {
|
|
|
463
653
|
if (!defined(available) && defined(tile.parent)) {
|
|
464
654
|
// Provider doesn't know if this tile is available. Does the parent tile know?
|
|
465
655
|
const parent = tile.parent;
|
|
466
|
-
const parentSurfaceTile = parent.data;
|
|
656
|
+
const parentSurfaceTile = /** @type {GlobeSurfaceTile} */ (parent.data);
|
|
467
657
|
if (defined(parentSurfaceTile) && defined(parentSurfaceTile.terrainData)) {
|
|
468
658
|
available = parentSurfaceTile.terrainData.isChildAvailable(
|
|
469
659
|
parent.x,
|
|
@@ -474,12 +664,15 @@ function prepareNewTile(tile, terrainProvider, imageryLayerCollection) {
|
|
|
474
664
|
}
|
|
475
665
|
}
|
|
476
666
|
|
|
667
|
+
const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
|
|
668
|
+
|
|
477
669
|
if (available === false) {
|
|
478
670
|
// This tile is not available, so mark it failed so we start upsampling right away.
|
|
479
|
-
|
|
671
|
+
surfaceTile.terrainState = TerrainState.FAILED;
|
|
480
672
|
}
|
|
481
673
|
|
|
482
674
|
// Map imagery tiles to this terrain tile
|
|
675
|
+
// @ts-expect-error Missing types.
|
|
483
676
|
for (let i = 0, len = imageryLayerCollection.length; i < len; ++i) {
|
|
484
677
|
const layer = imageryLayerCollection.get(i);
|
|
485
678
|
if (layer.show) {
|
|
@@ -488,15 +681,26 @@ function prepareNewTile(tile, terrainProvider, imageryLayerCollection) {
|
|
|
488
681
|
}
|
|
489
682
|
}
|
|
490
683
|
|
|
684
|
+
/**
|
|
685
|
+
* @param {QuadtreeTile} tile
|
|
686
|
+
* @param {FrameState} frameState
|
|
687
|
+
* @param {TerrainProvider} terrainProvider
|
|
688
|
+
* @param {VectorProvider} vectorProvider
|
|
689
|
+
* @param {ImageryLayerCollection} imageryLayerCollection
|
|
690
|
+
* @param {QuadtreePrimitive} quadtree
|
|
691
|
+
* @param {*} vertexArraysToDestroy
|
|
692
|
+
* @ignore
|
|
693
|
+
*/
|
|
491
694
|
function processTerrainStateMachine(
|
|
492
695
|
tile,
|
|
493
696
|
frameState,
|
|
494
697
|
terrainProvider,
|
|
698
|
+
vectorProvider,
|
|
495
699
|
imageryLayerCollection,
|
|
496
700
|
quadtree,
|
|
497
701
|
vertexArraysToDestroy,
|
|
498
702
|
) {
|
|
499
|
-
const surfaceTile = tile.data;
|
|
703
|
+
const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
|
|
500
704
|
|
|
501
705
|
// If this tile is FAILED, we'll need to upsample from the parent. If the parent isn't
|
|
502
706
|
// ready for that, let's push it along.
|
|
@@ -505,15 +709,19 @@ function processTerrainStateMachine(
|
|
|
505
709
|
surfaceTile.terrainState === TerrainState.FAILED &&
|
|
506
710
|
parent !== undefined
|
|
507
711
|
) {
|
|
712
|
+
const parentSurfaceTile = /** @type {GlobeSurfaceTile|undefined} */ (
|
|
713
|
+
parent.data
|
|
714
|
+
);
|
|
508
715
|
const parentReady =
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
716
|
+
parentSurfaceTile !== undefined &&
|
|
717
|
+
parentSurfaceTile.terrainData !== undefined &&
|
|
718
|
+
parentSurfaceTile.terrainData.canUpsample !== false;
|
|
512
719
|
if (!parentReady) {
|
|
513
720
|
GlobeSurfaceTile.processStateMachine(
|
|
514
721
|
parent,
|
|
515
722
|
frameState,
|
|
516
723
|
terrainProvider,
|
|
724
|
+
vectorProvider,
|
|
517
725
|
imageryLayerCollection,
|
|
518
726
|
quadtree,
|
|
519
727
|
vertexArraysToDestroy,
|
|
@@ -573,6 +781,7 @@ function processTerrainStateMachine(
|
|
|
573
781
|
if (
|
|
574
782
|
surfaceTile.terrainState >= TerrainState.RECEIVED &&
|
|
575
783
|
surfaceTile.waterMaskTexture === undefined &&
|
|
784
|
+
// @ts-expect-error Missing types.
|
|
576
785
|
terrainProvider.hasWaterMask
|
|
577
786
|
) {
|
|
578
787
|
const terrainData = surfaceTile.terrainData;
|
|
@@ -580,8 +789,11 @@ function processTerrainStateMachine(
|
|
|
580
789
|
createWaterMaskTextureIfNeeded(frameState.context, surfaceTile);
|
|
581
790
|
} else {
|
|
582
791
|
const sourceTile = surfaceTile._findAncestorTileWithTerrainData(tile);
|
|
583
|
-
|
|
584
|
-
|
|
792
|
+
const sourceSurfaceTile = /** @type {GlobeSurfaceTile|undefined} */ (
|
|
793
|
+
sourceTile?.data
|
|
794
|
+
);
|
|
795
|
+
if (defined(sourceTile) && defined(sourceSurfaceTile.waterMaskTexture)) {
|
|
796
|
+
surfaceTile.waterMaskTexture = sourceSurfaceTile.waterMaskTexture;
|
|
585
797
|
++surfaceTile.waterMaskTexture.referenceCount;
|
|
586
798
|
surfaceTile._computeWaterMaskTranslationAndScale(
|
|
587
799
|
tile,
|
|
@@ -593,6 +805,16 @@ function processTerrainStateMachine(
|
|
|
593
805
|
}
|
|
594
806
|
}
|
|
595
807
|
|
|
808
|
+
/**
|
|
809
|
+
* @param {GlobeSurfaceTile} surfaceTile
|
|
810
|
+
* @param {QuadtreeTile} tile
|
|
811
|
+
* @param {FrameState} frameState
|
|
812
|
+
* @param {TerrainProvider} terrainProvider
|
|
813
|
+
* @param {number} x
|
|
814
|
+
* @param {number} y
|
|
815
|
+
* @param {number} level
|
|
816
|
+
* @ignore
|
|
817
|
+
*/
|
|
596
818
|
function upsample(surfaceTile, tile, frameState, terrainProvider, x, y, level) {
|
|
597
819
|
const parent = tile.parent;
|
|
598
820
|
if (!parent) {
|
|
@@ -601,7 +823,8 @@ function upsample(surfaceTile, tile, frameState, terrainProvider, x, y, level) {
|
|
|
601
823
|
return;
|
|
602
824
|
}
|
|
603
825
|
|
|
604
|
-
const
|
|
826
|
+
const parentSurfaceTile = /** @type {GlobeSurfaceTile} */ (parent.data);
|
|
827
|
+
const sourceData = parentSurfaceTile.terrainData;
|
|
605
828
|
const sourceX = parent.x;
|
|
606
829
|
const sourceY = parent.y;
|
|
607
830
|
const sourceLevel = parent.level;
|
|
@@ -612,6 +835,7 @@ function upsample(surfaceTile, tile, frameState, terrainProvider, x, y, level) {
|
|
|
612
835
|
}
|
|
613
836
|
|
|
614
837
|
const terrainDataPromise = sourceData.upsample(
|
|
838
|
+
// @ts-expect-error Missing types.
|
|
615
839
|
terrainProvider.tilingScheme,
|
|
616
840
|
sourceX,
|
|
617
841
|
sourceY,
|
|
@@ -642,7 +866,16 @@ function upsample(surfaceTile, tile, frameState, terrainProvider, x, y, level) {
|
|
|
642
866
|
});
|
|
643
867
|
}
|
|
644
868
|
|
|
869
|
+
/**
|
|
870
|
+
* @param {GlobeSurfaceTile} surfaceTile
|
|
871
|
+
* @param {TerrainProvider} terrainProvider
|
|
872
|
+
* @param {number} x
|
|
873
|
+
* @param {number} y
|
|
874
|
+
* @param {number} level
|
|
875
|
+
* @ignore
|
|
876
|
+
*/
|
|
645
877
|
function requestTileGeometry(surfaceTile, terrainProvider, x, y, level) {
|
|
878
|
+
/** @param {HeightmapTerrainData} terrainData */
|
|
646
879
|
function success(terrainData) {
|
|
647
880
|
if (!defined(terrainData)) {
|
|
648
881
|
// Throttled due to low priority - try again later.
|
|
@@ -656,6 +889,7 @@ function requestTileGeometry(surfaceTile, terrainProvider, x, y, level) {
|
|
|
656
889
|
surfaceTile.request = undefined;
|
|
657
890
|
}
|
|
658
891
|
|
|
892
|
+
/** @param {Error} error */
|
|
659
893
|
function failure(error) {
|
|
660
894
|
if (surfaceTile.request.state === RequestState.CANCELLED) {
|
|
661
895
|
// Cancelled due to low priority - try again later.
|
|
@@ -671,15 +905,19 @@ function requestTileGeometry(surfaceTile, terrainProvider, x, y, level) {
|
|
|
671
905
|
surfaceTile.request = undefined;
|
|
672
906
|
|
|
673
907
|
const message = `Failed to obtain terrain tile X: ${x} Y: ${y} Level: ${level}. Error message: "${error}"`;
|
|
908
|
+
// @ts-expect-error Missing types.
|
|
674
909
|
terrainProvider._requestError = TileProviderError.reportError(
|
|
910
|
+
// @ts-expect-error Missing types.
|
|
675
911
|
terrainProvider._requestError,
|
|
676
912
|
terrainProvider,
|
|
913
|
+
// @ts-expect-error Missing types.
|
|
677
914
|
terrainProvider.errorEvent,
|
|
678
915
|
message,
|
|
679
916
|
x,
|
|
680
917
|
y,
|
|
681
918
|
level,
|
|
682
919
|
);
|
|
920
|
+
// @ts-expect-error Missing types.
|
|
683
921
|
if (terrainProvider._requestError.retry) {
|
|
684
922
|
doRequest();
|
|
685
923
|
}
|
|
@@ -695,6 +933,7 @@ function requestTileGeometry(surfaceTile, terrainProvider, x, y, level) {
|
|
|
695
933
|
surfaceTile.request = request;
|
|
696
934
|
|
|
697
935
|
const requestPromise = terrainProvider.requestTileGeometry(
|
|
936
|
+
// @ts-expect-error Missing types.
|
|
698
937
|
x,
|
|
699
938
|
y,
|
|
700
939
|
level,
|
|
@@ -732,7 +971,17 @@ const scratchCreateMeshOptions = {
|
|
|
732
971
|
throttle: true,
|
|
733
972
|
};
|
|
734
973
|
|
|
974
|
+
/**
|
|
975
|
+
* @param {GlobeSurfaceTile} surfaceTile
|
|
976
|
+
* @param {FrameState} frameState
|
|
977
|
+
* @param {TerrainProvider} terrainProvider
|
|
978
|
+
* @param {number} x
|
|
979
|
+
* @param {number} y
|
|
980
|
+
* @param {number} level
|
|
981
|
+
* @ignore
|
|
982
|
+
*/
|
|
735
983
|
function transform(surfaceTile, frameState, terrainProvider, x, y, level) {
|
|
984
|
+
// @ts-expect-error Missing types.
|
|
736
985
|
const tilingScheme = terrainProvider.tilingScheme;
|
|
737
986
|
|
|
738
987
|
const createMeshOptions = scratchCreateMeshOptions;
|
|
@@ -765,61 +1014,16 @@ function transform(surfaceTile, frameState, terrainProvider, x, y, level) {
|
|
|
765
1014
|
});
|
|
766
1015
|
}
|
|
767
1016
|
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
let indexBuffer = indexBuffers[context.id];
|
|
779
|
-
if (!defined(indexBuffer) || indexBuffer.isDestroyed()) {
|
|
780
|
-
const indices = mesh.indices;
|
|
781
|
-
indexBuffer = Buffer.createIndexBuffer({
|
|
782
|
-
context: context,
|
|
783
|
-
typedArray: indices,
|
|
784
|
-
usage: BufferUsage.STATIC_DRAW,
|
|
785
|
-
indexDatatype: IndexDatatype.fromSizeInBytes(indices.BYTES_PER_ELEMENT),
|
|
786
|
-
});
|
|
787
|
-
indexBuffer.vertexArrayDestroyable = false;
|
|
788
|
-
indexBuffer.referenceCount = 1;
|
|
789
|
-
indexBuffers[context.id] = indexBuffer;
|
|
790
|
-
mesh.indices.indexBuffers = indexBuffers;
|
|
791
|
-
} else {
|
|
792
|
-
++indexBuffer.referenceCount;
|
|
793
|
-
}
|
|
794
|
-
|
|
795
|
-
return new VertexArray({
|
|
796
|
-
context: context,
|
|
797
|
-
attributes: attributes,
|
|
798
|
-
indexBuffer: indexBuffer,
|
|
799
|
-
});
|
|
800
|
-
};
|
|
801
|
-
|
|
802
|
-
GlobeSurfaceTile._freeVertexArray = function (vertexArray) {
|
|
803
|
-
if (defined(vertexArray)) {
|
|
804
|
-
const indexBuffer = vertexArray.indexBuffer;
|
|
805
|
-
|
|
806
|
-
if (!vertexArray.isDestroyed()) {
|
|
807
|
-
vertexArray.destroy();
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
if (
|
|
811
|
-
defined(indexBuffer) &&
|
|
812
|
-
!indexBuffer.isDestroyed() &&
|
|
813
|
-
defined(indexBuffer.referenceCount)
|
|
814
|
-
) {
|
|
815
|
-
--indexBuffer.referenceCount;
|
|
816
|
-
if (indexBuffer.referenceCount === 0) {
|
|
817
|
-
indexBuffer.destroy();
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
};
|
|
822
|
-
|
|
1017
|
+
/**
|
|
1018
|
+
* @param {GlobeSurfaceTile} surfaceTile
|
|
1019
|
+
* @param {Context} context
|
|
1020
|
+
* @param {TerrainProvider} terrainProvider
|
|
1021
|
+
* @param {number} x
|
|
1022
|
+
* @param {number} y
|
|
1023
|
+
* @param {number} level
|
|
1024
|
+
* @param {*} vertexArraysToDestroy
|
|
1025
|
+
* @ignore
|
|
1026
|
+
*/
|
|
823
1027
|
function createResources(
|
|
824
1028
|
surfaceTile,
|
|
825
1029
|
context,
|
|
@@ -838,6 +1042,10 @@ function createResources(
|
|
|
838
1042
|
surfaceTile.fill && surfaceTile.fill.destroy(vertexArraysToDestroy);
|
|
839
1043
|
}
|
|
840
1044
|
|
|
1045
|
+
/**
|
|
1046
|
+
* @param {Context} context
|
|
1047
|
+
* @ignore
|
|
1048
|
+
*/
|
|
841
1049
|
function getContextWaterMaskData(context) {
|
|
842
1050
|
let data = context.cache.tile_waterMaskData;
|
|
843
1051
|
|
|
@@ -875,6 +1083,11 @@ function getContextWaterMaskData(context) {
|
|
|
875
1083
|
return data;
|
|
876
1084
|
}
|
|
877
1085
|
|
|
1086
|
+
/**
|
|
1087
|
+
* @param {Context} context
|
|
1088
|
+
* @param {GlobeSurfaceTile} surfaceTile
|
|
1089
|
+
* @ignore
|
|
1090
|
+
*/
|
|
878
1091
|
function createWaterMaskTextureIfNeeded(context, surfaceTile) {
|
|
879
1092
|
const waterMask = surfaceTile.terrainData.waterMask;
|
|
880
1093
|
const waterMaskData = getContextWaterMaskData(context);
|
|
@@ -928,40 +1141,4 @@ function createWaterMaskTextureIfNeeded(context, surfaceTile) {
|
|
|
928
1141
|
);
|
|
929
1142
|
}
|
|
930
1143
|
|
|
931
|
-
GlobeSurfaceTile.prototype._findAncestorTileWithTerrainData = function (tile) {
|
|
932
|
-
let sourceTile = tile.parent;
|
|
933
|
-
|
|
934
|
-
while (
|
|
935
|
-
defined(sourceTile) &&
|
|
936
|
-
(!defined(sourceTile.data) ||
|
|
937
|
-
!defined(sourceTile.data.terrainData) ||
|
|
938
|
-
sourceTile.data.terrainData.wasCreatedByUpsampling())
|
|
939
|
-
) {
|
|
940
|
-
sourceTile = sourceTile.parent;
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
return sourceTile;
|
|
944
|
-
};
|
|
945
|
-
|
|
946
|
-
GlobeSurfaceTile.prototype._computeWaterMaskTranslationAndScale = function (
|
|
947
|
-
tile,
|
|
948
|
-
sourceTile,
|
|
949
|
-
result,
|
|
950
|
-
) {
|
|
951
|
-
const sourceTileRectangle = sourceTile.rectangle;
|
|
952
|
-
const tileRectangle = tile.rectangle;
|
|
953
|
-
const tileWidth = tileRectangle.width;
|
|
954
|
-
const tileHeight = tileRectangle.height;
|
|
955
|
-
|
|
956
|
-
const scaleX = tileWidth / sourceTileRectangle.width;
|
|
957
|
-
const scaleY = tileHeight / sourceTileRectangle.height;
|
|
958
|
-
result.x =
|
|
959
|
-
(scaleX * (tileRectangle.west - sourceTileRectangle.west)) / tileWidth;
|
|
960
|
-
result.y =
|
|
961
|
-
(scaleY * (tileRectangle.south - sourceTileRectangle.south)) / tileHeight;
|
|
962
|
-
result.z = scaleX;
|
|
963
|
-
result.w = scaleY;
|
|
964
|
-
|
|
965
|
-
return result;
|
|
966
|
-
};
|
|
967
1144
|
export default GlobeSurfaceTile;
|