UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 1.65 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{throwIfAborted as e,whenOrAbort as t}from"../../../core/promiseUtils.js";import{isSVG as r}from"../../../core/urlUtils.js";import{TextureCollection as s,TextureRequest as i,TextureResult as o}from"./TextureCollection.js";import{Texture as n}from"../webgl-engine/lib/Texture.js";import{TextureWrapMode as l}from"../../webgl/enums.js";class a extends s{constructor(e,t,r){super(t,r),this._streamDataRequester=e}async fromUrl(r,s,n){e(n);const l=n?.signal,a=this.makeUid(r,s);let h=this._textureRequests.get(a);if(!h){const e=new AbortController,t=this._streamDataRequester.request(r,"image",{uid:a,signal:e.signal});h=new i,h.abortController=e;const n=h;this._textureRequests.set(a,h),h.textureAsync=t.then((async e=>{const t=this._createTexture(r,e,s);return n.texture=t,n.abortController=null,await t.load(this._stage.renderView.renderingContext),this._stage.add(t),new o(a,t,(()=>this._release(a)))}),(e=>{throw n.abortController=null,e}))}h.referenceCount++;try{return await t(h.textureAsync,l)}catch(u){throw this._release(a),u}}_createTexture(e,t,s){const i={width:t.width,height:t.height,wrap:{s:l.CLAMP_TO_EDGE,t:l.CLAMP_TO_EDGE},preMultiplyAlpha:!0,reloadable:!0};if(r(e)){if(s||0===t.width&&0===t.height){const e=t.width?t.height/t.width:1;s=s||64,e>1?(t.width=Math.round(s/e),t.height=s):(t.width=s,t.height=Math.round(s*e))}this._stage.renderView?.renderingContext.driverTest.svgPremultipliesAlpha.result&&(i.preMultiplyAlpha=!1)}return new n(t,i)}}export{a as StreamTextureCollection};