| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- import defined from "../Core/defined.js";
 
- import ImageryState from "./ImageryState.js";
 
- /**
 
-  * The assocation between a terrain tile and an imagery tile.
 
-  *
 
-  * @alias TileImagery
 
-  * @private
 
-  *
 
-  * @param {Imagery} imagery The imagery tile.
 
-  * @param {Cartesian4} textureCoordinateRectangle The texture rectangle of the tile that is covered
 
-  *        by the imagery, where X=west, Y=south, Z=east, W=north.
 
-  * @param {Boolean} useWebMercatorT true to use the Web Mercator texture coordinates for this imagery tile.
 
-  */
 
- function TileImagery(imagery, textureCoordinateRectangle, useWebMercatorT) {
 
-   this.readyImagery = undefined;
 
-   this.loadingImagery = imagery;
 
-   this.textureCoordinateRectangle = textureCoordinateRectangle;
 
-   this.textureTranslationAndScale = undefined;
 
-   this.useWebMercatorT = useWebMercatorT;
 
- }
 
- /**
 
-  * Frees the resources held by this instance.
 
-  */
 
- TileImagery.prototype.freeResources = function () {
 
-   if (defined(this.readyImagery)) {
 
-     this.readyImagery.releaseReference();
 
-   }
 
-   if (defined(this.loadingImagery)) {
 
-     this.loadingImagery.releaseReference();
 
-   }
 
- };
 
- /**
 
-  * Processes the load state machine for this instance.
 
-  *
 
-  * @param {Tile} tile The tile to which this instance belongs.
 
-  * @param {FrameState} frameState The frameState.
 
-  * @param {Boolean} skipLoading True to skip loading, e.g. new requests, creating textures. This function will
 
-  *                  still synchronously process imagery that's already mostly ready to go, e.g. use textures
 
-  *                  already loaded on ancestor tiles.
 
-  * @returns {Boolean} True if this instance is done loading; otherwise, false.
 
-  */
 
- TileImagery.prototype.processStateMachine = function (
 
-   tile,
 
-   frameState,
 
-   skipLoading
 
- ) {
 
-   const loadingImagery = this.loadingImagery;
 
-   const imageryLayer = loadingImagery.imageryLayer;
 
-   loadingImagery.processStateMachine(
 
-     frameState,
 
-     !this.useWebMercatorT,
 
-     skipLoading
 
-   );
 
-   if (loadingImagery.state === ImageryState.READY) {
 
-     if (defined(this.readyImagery)) {
 
-       this.readyImagery.releaseReference();
 
-     }
 
-     this.readyImagery = this.loadingImagery;
 
-     this.loadingImagery = undefined;
 
-     this.textureTranslationAndScale = imageryLayer._calculateTextureTranslationAndScale(
 
-       tile,
 
-       this
 
-     );
 
-     return true; // done loading
 
-   }
 
-   // Find some ancestor imagery we can use while this imagery is still loading.
 
-   let ancestor = loadingImagery.parent;
 
-   let closestAncestorThatNeedsLoading;
 
-   while (
 
-     defined(ancestor) &&
 
-     (ancestor.state !== ImageryState.READY ||
 
-       (!this.useWebMercatorT && !defined(ancestor.texture)))
 
-   ) {
 
-     if (
 
-       ancestor.state !== ImageryState.FAILED &&
 
-       ancestor.state !== ImageryState.INVALID
 
-     ) {
 
-       // ancestor is still loading
 
-       closestAncestorThatNeedsLoading =
 
-         closestAncestorThatNeedsLoading || ancestor;
 
-     }
 
-     ancestor = ancestor.parent;
 
-   }
 
-   if (this.readyImagery !== ancestor) {
 
-     if (defined(this.readyImagery)) {
 
-       this.readyImagery.releaseReference();
 
-     }
 
-     this.readyImagery = ancestor;
 
-     if (defined(ancestor)) {
 
-       ancestor.addReference();
 
-       this.textureTranslationAndScale = imageryLayer._calculateTextureTranslationAndScale(
 
-         tile,
 
-         this
 
-       );
 
-     }
 
-   }
 
-   if (
 
-     loadingImagery.state === ImageryState.FAILED ||
 
-     loadingImagery.state === ImageryState.INVALID
 
-   ) {
 
-     // The imagery tile is failed or invalid, so we'd like to use an ancestor instead.
 
-     if (defined(closestAncestorThatNeedsLoading)) {
 
-       // Push the ancestor's load process along a bit.  This is necessary because some ancestor imagery
 
-       // tiles may not be attached directly to a terrain tile.  Such tiles will never load if
 
-       // we don't do it here.
 
-       closestAncestorThatNeedsLoading.processStateMachine(
 
-         frameState,
 
-         !this.useWebMercatorT,
 
-         skipLoading
 
-       );
 
-       return false; // not done loading
 
-     }
 
-     // This imagery tile is failed or invalid, and we have the "best available" substitute.
 
-     return true; // done loading
 
-   }
 
-   return false; // not done loading
 
- };
 
- export default TileImagery;
 
 
  |