@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.57 kB
JavaScript
import{isSome as e}from"../../../core/maybe.js";import{throwIfAborted as t,whenOrAbort as r}from"../../../core/promiseUtils.js";import{isSVG as s}from"../../../core/urlUtils.js";import{TextureCollection as i}from"./TextureCollection.js";import{PowerOfTwoResizeMode as o}from"../webgl-engine/lib/basicInterfaces.js";import{Texture as n}from"../webgl-engine/lib/Texture.js";class l extends i{constructor(e,t,r,s){super(t,s),this._streamDataRequester=e,this._parameters=r}async fromUrl(s,i,o){t(o);const n=e(o)?o.signal:null,l=this.makeUid(s,i);let a=this._textureRequests.get(l);if(!a){const e=new AbortController,t=this._streamDataRequester.request(s,"image",{uid:l,signal:e.signal});a={referenceCount:0,texture:null,textureAsync:null,abortController:e};const r=a;this._textureRequests.set(l,a),a.textureAsync=t.then((async e=>{const t=this._createTexture(s,e,i);return r.texture=t,r.abortController=null,this._stage.add(t),await this._stage.load(t),{uid:l,texture:t,release:()=>this._release(l)}}),(e=>{throw r.abortController=null,e}))}a.referenceCount++;try{return await r(a.textureAsync,n)}catch(h){throw this._release(l),h}}_createTexture(e,t,r){const i={...this._parameters,powerOfTwoResizeMode:o.PAD};if(s(e)){if(r||0===t.width&&0===t.height){const e=t.width?t.height/t.width:1;r=r||64,e>1?(t.width=Math.round(r/e),t.height=r):(t.width=r,t.height=Math.round(r*e))}this._stage.renderView?.renderingContext.driverTest.svgPremultipliesAlpha.result&&(i.preMultiplyAlpha=!1)}return i.width=t.width,i.height=t.height,new n(t,i)}}export{l as StreamTextureCollection};