UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 2.03 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import"../../../core/has.js";import{property as r,subclass as s}from"../../../core/accessorSupport/decorators.js";import{ImmediateTask as o,TaskPriority as u}from"../../support/Scheduler.js";let n=class extends t{constructor(e,t){super({}),this._stage=e,this._textureRequests=new Map,this._frameTask=t?.registerTask(u.TEXTURE_UNLOAD)??o}normalizeCtorArgs(){return{}}destroy(){super.destroy(),this._frameTask?.remove(),this._textureRequests?.forEach(e=>this._releaseTextureRequest(e)),this._textureRequests?.clear()}get updating(){return this._frameTask.updating}fromData(e,t){const r=this.makeUid(e);let s=this._textureRequests.get(r);if(!s){const e=new a;e.texture=t(),this._stage&&(e.texture.load(this._stage.renderView.renderingContext),this._stage.addTexture(e.texture)),this._textureRequests.set(r,e),s=e}return s.referenceCount++,new i(r,s.texture,()=>this._release(r))}_release(e){const t=this._textureRequests.get(e);t?(t.referenceCount<1&&console.warn("TextureCollection: reference count is < 1 for "+e),t.referenceCount--,t.referenceCount<1&&this._frameTask.schedule(()=>this._releaseNow(e))):console.warn(`TextureCollection: texture doesn't exist: '${e}'`)}get test(){}_releaseNow(e){if(!this._textureRequests)return;const t=this._textureRequests.get(e);!t||t.referenceCount>0||(t.texture?.unload(),this._releaseTextureRequest(t),this._textureRequests.delete(e))}_releaseTextureRequest(e){e.texture?this._stage?.removeTexture(e.texture):e.abortController&&(e.abortController.abort(),e.abortController=null)}makeUid(e,t=null){return null!=t?`${e}.${t}px`:e}};e([r()],n.prototype,"_frameTask",void 0),e([r()],n.prototype,"updating",null),n=e([s("esri.views.3d.support.TextureCollection")],n);class i{constructor(e,t,r){this.uid=e,this.managedTexture=t,this.release=r}}class a{constructor(){this.referenceCount=0}}export{n as TextureCollection,i as TextureHandle,a as TextureRequest};