Imagery.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*global define*/
  2. define([
  3. '../Core/defined',
  4. '../Core/destroyObject',
  5. './ImageryState'
  6. ], function(
  7. defined,
  8. destroyObject,
  9. ImageryState) {
  10. "use strict";
  11. /**
  12. * Stores details about a tile of imagery.
  13. *
  14. * @alias Imagery
  15. * @private
  16. */
  17. var Imagery = function(imageryLayer, x, y, level, rectangle) {
  18. this.imageryLayer = imageryLayer;
  19. this.x = x;
  20. this.y = y;
  21. this.level = level;
  22. if (level !== 0) {
  23. var parentX = x / 2 | 0;
  24. var parentY = y / 2 | 0;
  25. var parentLevel = level - 1;
  26. this.parent = imageryLayer.getImageryFromCache(parentX, parentY, parentLevel);
  27. }
  28. this.state = ImageryState.UNLOADED;
  29. this.imageUrl = undefined;
  30. this.image = undefined;
  31. this.texture = undefined;
  32. this.credits = undefined;
  33. this.referenceCount = 0;
  34. if (!defined(rectangle) && imageryLayer.imageryProvider.ready) {
  35. var tilingScheme = imageryLayer.imageryProvider.tilingScheme;
  36. rectangle = tilingScheme.tileXYToRectangle(x, y, level);
  37. }
  38. this.rectangle = rectangle;
  39. };
  40. Imagery.createPlaceholder = function(imageryLayer) {
  41. var result = new Imagery(imageryLayer, 0, 0, 0);
  42. result.addReference();
  43. result.state = ImageryState.PLACEHOLDER;
  44. return result;
  45. };
  46. Imagery.prototype.addReference = function() {
  47. ++this.referenceCount;
  48. };
  49. Imagery.prototype.releaseReference = function() {
  50. --this.referenceCount;
  51. if (this.referenceCount === 0) {
  52. this.imageryLayer.removeImageryFromCache(this);
  53. if (defined(this.parent)) {
  54. this.parent.releaseReference();
  55. }
  56. if (defined(this.image) && defined(this.image.destroy)) {
  57. this.image.destroy();
  58. }
  59. if (defined(this.texture)) {
  60. this.texture.destroy();
  61. }
  62. destroyObject(this);
  63. return 0;
  64. }
  65. return this.referenceCount;
  66. };
  67. return Imagery;
  68. });