123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- define([
- '../Core/defined'
- ], function(
- defined) {
- "use strict";
-
- var TileReplacementQueue = function TileReplacementQueue() {
- this.head = undefined;
- this.tail = undefined;
- this.count = 0;
- this._lastBeforeStartOfFrame = undefined;
- };
-
- TileReplacementQueue.prototype.markStartOfRenderFrame = function() {
- this._lastBeforeStartOfFrame = this.head;
- };
-
- TileReplacementQueue.prototype.trimTiles = function(maximumTiles) {
- var tileToTrim = this.tail;
- var keepTrimming = true;
- while (keepTrimming &&
- defined(this._lastBeforeStartOfFrame) &&
- this.count > maximumTiles &&
- defined(tileToTrim)) {
-
-
- keepTrimming = tileToTrim !== this._lastBeforeStartOfFrame;
- var previous = tileToTrim.replacementPrevious;
- if (tileToTrim.eligibleForUnloading) {
- tileToTrim.freeResources();
- remove(this, tileToTrim);
- }
- tileToTrim = previous;
- }
- };
- function remove(tileReplacementQueue, item) {
- var previous = item.replacementPrevious;
- var next = item.replacementNext;
- if (item === tileReplacementQueue._lastBeforeStartOfFrame) {
- tileReplacementQueue._lastBeforeStartOfFrame = next;
- }
- if (item === tileReplacementQueue.head) {
- tileReplacementQueue.head = next;
- } else {
- previous.replacementNext = next;
- }
- if (item === tileReplacementQueue.tail) {
- tileReplacementQueue.tail = previous;
- } else {
- next.replacementPrevious = previous;
- }
- item.replacementPrevious = undefined;
- item.replacementNext = undefined;
- --tileReplacementQueue.count;
- }
-
- TileReplacementQueue.prototype.markTileRendered = function(item) {
- var head = this.head;
- if (head === item) {
- if (item === this._lastBeforeStartOfFrame) {
- this._lastBeforeStartOfFrame = item.replacementNext;
- }
- return;
- }
- ++this.count;
- if (!defined(head)) {
-
- item.replacementPrevious = undefined;
- item.replacementNext = undefined;
- this.head = item;
- this.tail = item;
- return;
- }
- if (defined(item.replacementPrevious) || defined(item.replacementNext)) {
-
- remove(this, item);
- }
- item.replacementPrevious = undefined;
- item.replacementNext = head;
- head.replacementPrevious = item;
- this.head = item;
- };
- return TileReplacementQueue;
- });
|