UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.89 kB
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={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 m(t,l,h,{geometry:a},r),o=[];"ramp"===this._values.color.kind&&o.push("vvColor"),"ramp"===this._values.opacity.kind&&o.push("vvOpacity"),"ramp"===this._values.size.kind&&o.push("vvSize");const p=e.painter.materialManager.getProgram(f,o);this.vertexArray=i,this.program=p,this.indexCount=this._indexData.length,this._vertexData=null,this._indexData=null}detach(){this.vertexArray.dispose()}get ready(){return this.program.compiled}}export{_ as default};