Cesium 地球(2)-瓦片创建
QuadtreePrimitive
代码执行4个步骤:
step1: update()
step2: beginFrame()
step3: render()
step4: endFrame()
但并不是瓦片的创建步骤。
1、创建 QuadtreeTile
基于 step3: render()
step3: render()┖ selectTilesForRendering()
在 selectTilesForRendering
中, 创建 QuadtreeTile
。
然后将QuadtreeTile
加入到_tileLoadQueueHigh
队列。
2、创建 GlobeSurfaceTile
基于 step4: endFrame()
在 GlobeSurfaceTile.initialize()
中创建 GlobeSurfaceTile
。
step4: endFrame()┖ processTileLoadQueue()┖ processSinglePriorityLoadQueue()┖ (tileProvider as GlobeSurfaceTileProvider).loadTile()┖ GlobeSurfaceTile.processStateMachine()┖ GlobeSurfaceTile.initialize()
并且在 GlobeSurfaceTile.initialize
中, tile.state
状态发生切换:
QuadtreeTileLoadState.START => QuadtreeTileLoadState.LOADING
3、创建 TileImagery
和 imagery
基于 step4: endFrame()
基于step3: render()
中的GlobeSurfaceTile.initialize
中:
在 (layer as ImageryLayer)._createTileImagerySkeletons()
中创建 TileImagery
和 imagery
GlobeSurfaceTile.initialize()┖ prepareNewTile()┖ (layer as ImageryLayer)._createTileImagerySkeletons()
4、状态切换基于 step4: endFrame()
step4: endFrame()┖ processTileLoadQueue()┖ processSinglePriorityLoadQueue()┖ (tileProvider as GlobeSurfaceTileProvider).loadTile()┖ GlobeSurfaceTile.processStateMachine()┃┃ // 网格状态机┠ processTerrainStateMachine()┃┃ // 栅格状态机┖ surfaceTile.processImagery()┖ (image as Imagery).processStateMachine()
后面 GlobeSurfaceTile
的状态切换就由 processStateMachine
处理。