UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 3.04 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}from"../../../../../core/promiseUtils.js";import{areStreamlinesCompatible as t,setUniforms as a}from"../utils.js";import{BufferObject as s}from"../../../../webgl/BufferObject.js";import{DataType as r,BlendFactor as i,PrimitiveType as o,Usage as n}from"../../../../webgl/enums.js";import{VertexArrayObject as m}from"../../../../webgl/VertexArrayObject.js";import{VertexElementDescriptor as p}from"../../../../webgl/VertexElementDescriptor.js";class _{constructor(e){this._params=e}get animated(){return this._params.flowSpeed>0}isCompatible(e){return e instanceof _&&t(this._params,e._params)}async load(t,a){const{extent:s,size:r}=t;e(a);const i=await this._params.loadImagery(s,r[0],r[1],this._params.timeExtent,a),{vertexData:o,indexData:n}=await this._params.createFlowMesh("Streamlines",this._params.simulationSettings,i,a);return new d(o,n,{color:this._params.color,opacity:this._params.opacity,size:this._params.size})}render(e,t,s){const{context:n}=e,{program:m}=s;n.setFaceCullingEnabled(!1),n.setBlendingEnabled(!0),n.setBlendFunction(i.ONE,i.ONE_MINUS_SRC_ALPHA),n.useProgram(m),m.setUniform1f("u_time",t.time),m.setUniform1f("u_trailLength",this._params.trailLength),m.setUniform1f("u_flowSpeed",this._params.flowSpeed),m.setUniform1f("u_featheringSize",this._params.featheringSize),m.setUniform1f("u_featheringOffset",this._params.featheringOffset),m.setUniform1f("u_introFade",this._params.introFade?1:0),m.setUniform1f("u_fadeToZero",this._params.fadeToZero?1:0),m.setUniform1f("u_decayRate",this._params.decayRate),m.setUniformMatrix3fv("u_dvsMat3",t.dvsMat3),m.setUniformMatrix3fv("u_displayViewMat3",t.displayViewMat3),a(m,"color","vec4",this._params.color),a(m,"opacity","float",this._params.opacity),a(m,"size","float",this._params.size),n.bindVAO(s.vertexArray),n.drawElements(o.TRIANGLES,s.indexCount,r.UNSIGNED_INT,0)}}const l=new Map;l.set("a_positionAndSide",0),l.set("a_timeInfo",1),l.set("a_extrude",2),l.set("a_speed",3);const h=new Map([["geometry",[new p("a_positionAndSide",3,r.FLOAT,0,36),new p("a_timeInfo",3,r.FLOAT,12,36),new p("a_extrude",2,r.FLOAT,24,36),new p("a_speed",1,r.FLOAT,32,36)]]]),f={vsPath:"raster/flow/streamlines",fsPath:"raster/flow/streamlines",attributes:l};class d{constructor(e,t,a){this._vertexData=e,this._indexData=t,this._values=a}attach(e){const{context:t}=e,a=s.createVertex(t,n.STATIC_DRAW,this._vertexData),r=s.createIndex(t,n.STATIC_DRAW,this._indexData),i=new Map([["geometry",a]]),o=new m(t,l,h,i,r),p=[];"ramp"===this._values.color.kind&&p.push("vvColor"),"ramp"===this._values.opacity.kind&&p.push("vvOpacity"),"ramp"===this._values.size.kind&&p.push("vvSize");const _=e.getProgram(f,p);this.vertexArray=o,this.program=_,this.indexCount=this._indexData.length,this._vertexData=null,this._indexData=null}detach(){this.vertexArray.dispose()}get ready(){return this.program.compiled}}export{_ as default};